diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2000-10-30 21:12:45 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2000-10-30 21:12:45 (GMT) |
commit | 1c68fd3fd1c4b63f4f2260e1d7785e61d71c0de6 (patch) | |
tree | 7d5c1ef91e61313f10266a746afd0d903d1e5f2a | |
parent | a1116d64863123e6eda545de7ade61ae7dec7ffb (diff) | |
download | Doxygen-1c68fd3fd1c4b63f4f2260e1d7785e61d71c0de6.zip Doxygen-1c68fd3fd1c4b63f4f2260e1d7785e61d71c0de6.tar.gz Doxygen-1c68fd3fd1c4b63f4f2260e1d7785e61d71c0de6.tar.bz2 |
Release-1.2.3
37 files changed, 479 insertions, 182 deletions
@@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.2-20001015 +DOXYGEN Version 1.2.3 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (15 October 2000) +Dimitri van Heesch (30 October 2000) diff --git a/Makefile.in b/Makefile.in index 812c91b..d6b6096 100644 --- a/Makefile.in +++ b/Makefile.in @@ -24,7 +24,7 @@ distclean: clean -rm -f src/Makefile.doxygen src/Makefile.doxytag src/Makefile.doxysearch qtools/Makefile.qtools -rm -f Makefile qtools/Makefile src/Makefile examples/Makefile doc/Makefile -rm -f .makeconfig .tmakeconfig - -rm -f src/doxygen.pro src/doxytag.pro src/doxysearch.pro + -rm -f src/doxygen.pro src/doxytag.pro src/doxysearch.pro qtools/qtools.pro -rm -f src/version.cpp -rm -r addon/configgen/Makefile addon/doxywizard/Makefile -rm -f addon/configgen/Makefile.configgen @@ -1,4 +1,4 @@ -DOXYGEN Version 1.2.2-20001015 +DOXYGEN Version 1.2.3 Please read INSTALL for compilation instructions. @@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at Enjoy, -Dimitri van Heesch (15 October 2000) +Dimitri van Heesch (30 October 2000) @@ -1 +1 @@ -1.2.2-20001015 +1.2.3 diff --git a/addon/configgen/config_templ.l b/addon/configgen/config_templ.l index 98a688f..81d4acf 100644 --- a/addon/configgen/config_templ.l +++ b/addon/configgen/config_templ.l @@ -140,8 +140,12 @@ static FILE *tryPath(const char *path,const char *fileName) return 0; } +static void substEnvVarsInStrList(QStrList &sl); +static void substEnvVarsInString(QCString &s); + static FILE *findFile(const char *fileName) { + substEnvVarsInStrList(includePathList); char *s=includePathList.first(); while (s) // try each of the include paths { @@ -162,6 +166,7 @@ static void readIncludeFile(const char *incName) } QCString inc = incName; + substEnvVarsInString(inc); inc = inc.stripWhiteSpace(); uint incLen = inc.length(); if (inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes @@ -430,6 +435,23 @@ void configStrToVal() } Config::colsInAlphaIndex=cols; } + + if (enumValuesPerLineString.isEmpty()) + { + Config::enumValuesPerLine=4; + } + else + { + bool ok; + int cols = enumValuesPerLineString.toInt(&ok); + if (!ok || cols<1 || cols>20) + { + warn_cont("Warning: argument of ENUM_VALUES_PER_LINE is not a valid number in the range [1..20]!\n" + "Using the default of 4!\n"); + cols = 4; + } + Config::enumValuesPerLine=cols; + } if (maxDotGraphWidthString.isEmpty()) { @@ -441,7 +463,7 @@ void configStrToVal() int width =maxDotGraphWidthString.toInt(&ok); if (!ok) { - warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n" + warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n" "Using the default of 1024 pixels!\n"); width=1024; } @@ -466,7 +488,7 @@ void configStrToVal() int height =maxDotGraphHeightString.toInt(&ok); if (!ok) { - warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n" + warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n" "Using the default of 1024 pixels!\n"); height=1024; } diff --git a/addon/configgen/configgen.cpp b/addon/configgen/configgen.cpp index c9d5a2d..95aab45 100644 --- a/addon/configgen/configgen.cpp +++ b/addon/configgen/configgen.cpp @@ -775,8 +775,8 @@ void init() "information to generate all constant output in the proper language. \n" "The default language is English, other supported languages are: \n" "Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n" - "Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, \n" - "Portuguese and Slovene.\n" + "Korean, Hungarian, Norwegian, Spanish, Romanian, Russian, Croatian, \n" + "Polish, Portuguese and Slovene.\n" ); ConfigString::addFixedValue("outputLanguage","Croatian"); ConfigString::addFixedValue("outputLanguage","Czech"); @@ -789,6 +789,7 @@ void init() ConfigString::addFixedValue("outputLanguage","Italian"); ConfigString::addFixedValue("outputLanguage","Japanese"); ConfigString::addFixedValue("outputLanguage","Korean"); + ConfigString::addFixedValue("outputLanguage","Norwegian"); ConfigString::addFixedValue("outputLanguage","Romanian"); ConfigString::addFixedValue("outputLanguage","Russian"); ConfigString::addFixedValue("outputLanguage","Polish"); @@ -1169,6 +1170,14 @@ void init() "to standard output. \n", ConfigString::File ); + ConfigBool::add( "filterForSourceFlag", + "FILTER_SOURCE_FILES", + "FALSE", + "do we filter source files?", + "If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \n" + "INPUT_FILTER) will be used to filter the input files when producing source \n" + "files to browse. \n" + ); //----------------------------------------------------------------------------------------------- ConfigInfo::add( "Index","configuration options related to the alphabetical class index"); @@ -1279,6 +1288,15 @@ void init() "the value YES disables it. \n" ); addDependency("noIndexFlag","generateHtml"); + ConfigInt::add( "enumValuesPerLine", + "ENUM_VALUES_PER_LINE", + "4", + "number of enum values that are put on one line", + "This tag can be used to set the number of enum values (range [1..20]) \n" + "that doxygen will group on one line in the generated HTML documentation. \n", + 1,20 + ); + addDependency("enumValuesPerLine","generateHtml"); //----------------------------------------------------------------------------------------------- ConfigInfo::add( "LaTeX","configuration options related to the LaTeX output"); //----------------------------------------------------------------------------------------------- diff --git a/addon/doxywizard/doxywizard_templ.cpp b/addon/doxywizard/doxywizard_templ.cpp index 00ed10c..4ba932a 100644 --- a/addon/doxywizard/doxywizard_templ.cpp +++ b/addon/doxywizard/doxywizard_templ.cpp @@ -126,6 +126,10 @@ Wizard::Wizard(int argc,char **argv) : new QToolButton( QPixmap( filesave_xpm ), "Save File", QString::null, this, SLOT(saveFile()), fileTools, "save file" ); + //Micha: QToolButton * = + new QToolButton( QPixmap( rundoxygen_xpm ), "Save and Run doxygen", QString::null, + this, SLOT(runDoxygen()), fileTools, "save and run doxygen" ); + QWhatsThis::whatsThisButton( fileTools ); @@ -142,10 +146,10 @@ Wizard::Wizard(int argc,char **argv) : file->insertItem( "&Quit", this, SLOT(quit()), CTRL+Key_Q ); // Doxygen popupmenu - //QPopupMenu* doxygen = new QPopupMenu; - //int itemIndex = doxygen->insertItem( "&Run" ); - //doxygen->setWhatsThis ( itemIndex, "Run doxygen with the current configuration file..." ); - //doxygen->setItemEnabled( itemIndex, FALSE ); + QPopupMenu* doxygen = new QPopupMenu; + int itemIndex = doxygen->insertItem( QIconSet(QPixmap(rundoxygen_xpm)), + "&Run", this, SLOT(runDoxygen()), CTRL+Key_R ); + doxygen->setWhatsThis ( itemIndex, "Run doxygen with the current configuration file..." ); // Help popupmenu QPopupMenu* help = new QPopupMenu; @@ -154,7 +158,7 @@ Wizard::Wizard(int argc,char **argv) : // menubar definition menuBar()->insertItem( "&File", file ); - //menuBar()->insertItem( "&Doxygen", doxygen ); + menuBar()->insertItem( "&Doxygen", doxygen ); menuBar()->insertSeparator(); menuBar()->insertItem( "&Help", help ); @@ -262,10 +266,20 @@ void Wizard::saveAsFile() } saveConfig(configFileName); - statusBar()->message("Saved as "+ configFileName, messageTimeout ); + statusBar()->message("Saved as "+ configFileName, messageTimeout ); +} + +//Micha +void Wizard::runDoxygen() +{ + saveFile(); + QString s = "doxygen " + configFileName; + system((const char*)s); + statusBar()->message("doxygen completed: "+ configFileName, messageTimeout ); hasChanged = FALSE; refreshCaption(); -} +} + void Wizard::quit() { diff --git a/addon/doxywizard/doxywizard_templ.h b/addon/doxywizard/doxywizard_templ.h index e0c228e..9df50bf 100644 --- a/addon/doxywizard/doxywizard_templ.h +++ b/addon/doxywizard/doxywizard_templ.h @@ -43,6 +43,7 @@ class Wizard : public QMainWindow void quit(); void changed(); void about(); + void runDoxygen(); // Micha signals: diff --git a/addon/doxywizard/pixmaps.cpp b/addon/doxywizard/pixmaps.cpp index e3631c5..6ae7f60 100644 --- a/addon/doxywizard/pixmaps.cpp +++ b/addon/doxywizard/pixmaps.cpp @@ -201,4 +201,38 @@ static const char *filesave_xpm_data[] = "b............." }; const char **filesave_xpm = (const char **)filesave_xpm_data; +/* XPM */ +static const char *rundoxygen_xpm_data[] = +{ + "16 16 11 1", +" c None", +". c #000000", +"+ c #DCDCDC", +"@ c #A0A0A0", +"# c #C3C3C3", +"$ c #808080", +"% c #FFA858", +"& c #FFDCA8", +"* c #FFFFC0", +"= c #FFFFFF", +"- c #585858", +" .. ", +" .. .++. .. ", +" .+@.@##@.@+. ", +" .@+$@%%@$+@. ", +" .$%%&%&%$. ", +" ..+@%&$$%&@+.. ", +".+#@%&%@@&*%@#+.", +".$@+$&*&&=*$+@$.", +" .--+$&*=&$+--. ", +" .$#++$$++#$. ", +" .@=$-$++$-$=@. ", +" .+@-..@@..-@+. ", +" ... .+=. ... ", +" .-$. ", +" .. ", +" " +}; + +const char **rundoxygen_xpm = (const char **)rundoxygen_xpm_data; diff --git a/addon/doxywizard/pixmaps.h b/addon/doxywizard/pixmaps.h index 6c0bb97..b95b75f 100644 --- a/addon/doxywizard/pixmaps.h +++ b/addon/doxywizard/pixmaps.h @@ -22,5 +22,6 @@ extern const char** del_xpm; extern const char** update_xpm; extern const char** fileopen_xpm; extern const char** filesave_xpm; +extern const char** rundoxygen_xpm; #endif @@ -351,26 +351,26 @@ touch .tmakeconfig if test "$f_shared" = NO; then if test "$f_platform" = "osf1-cxx" -o "$f_platform" = "irix-n32"; then cat >> .tmakeconfig <<EOF - TMAKE_LFLAGS = -non_shared + TMAKE_LFLAGS += -non_shared EOF elif test "$f_platform" = "solaris-cc"; then cat >> .tmakeconfig <<EOF - TMAKE_LFLAGS = -Bstatic + TMAKE_LFLAGS += -Bstatic EOF elif test "$f_platform" = "hpux-cc"; then cat >> .tmakeconfig <<EOF - TMAKE_LFLAGS = -noshared + TMAKE_LFLAGS += -noshared EOF else cat >> .tmakeconfig <<EOF - TMAKE_LFLAGS = -static + TMAKE_LFLAGS += -static EOF fi fi if test "$f_english" = YES; then cat >> .tmakeconfig <<EOF -TMAKE_CXXFLAGS = -DENGLISH_ONLY +TMAKE_CXXFLAGS += -DENGLISH_ONLY EOF fi diff --git a/doc/Makefile.win.in b/doc/Makefile.win.in index fffaad7..fd2dbc7 100644 --- a/doc/Makefile.win.in +++ b/doc/Makefile.win.in @@ -13,7 +13,8 @@ # input used in their production; they are not affected by this license. all: FORCE - set DOXYGEN_DOCDIR=file:///$(DOXYGEN) + @xcopy /s /q ..\examples ..\html\examples + set DOXYGEN_DOCDIR=. set VERSION=$(VERSION) $(DOXYGEN)\bin\doxygen @del ..\latex\refman.tex diff --git a/doc/commands.doc b/doc/commands.doc index 46f01f4..78ba52f 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -952,7 +952,8 @@ Public/Protected/Private/... section. \e not in other documentation blocks! \sa - Section \ref cmdpage "\\page" for an example of the \\cmdsection command. + Section \ref cmdpage "\\page" for an example of the + \ref cmdsection "\\section" command. <hr> \subsection cmdsubsection \subsection <subsection-name> (subsection title) @@ -966,7 +967,8 @@ Public/Protected/Private/... section. \e not in other documentation blocks! \sa - Section \ref cmdpage "\\page" for an example of the \\cmdsubsection command. + Section \ref cmdpage "\\page" for an example of the + \ref cmdsubsection "\\cmdsubsection" command. <hr> diff --git a/doc/config.doc b/doc/config.doc index 1d3046f..231cbe9 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -87,6 +87,7 @@ followed by the descriptions of the tags grouped by category. <li> \refitem cfg_doc_url DOC_URL <li> \refitem cfg_dot_path DOT_PATH <li> \refitem cfg_enable_preprocessing ENABLE_PREPROCESSING +<li> \refitem cfg_enum_values_per_line ENUM_VALUES_PER_LINE <li> \refitem cfg_enabled_sections ENABLED_SECTIONS <li> \refitem cfg_example_path EXAMPLE_PATH <li> \refitem cfg_example_patterns EXAMPLE_PATTERNS @@ -212,15 +213,6 @@ followed by the descriptions of the tags grouped by category. Dutch, French, Italian, Czech, Swedish, German, Finnish, Hungarian, Japanese, Korean, Spanish, Russian, Croatian, Polish and Portuguese. -\anchor cfg_disable_index -<dt>\c DISABLE_INDEX <dd> - \addindex DISABLE_INDEX - If you want full control over the layout of the generated HTML pages it - might be necessary to disable the index and replace it with your own. - The \c DISABLE_INDEX tag can be used to turn on/off the condensed index at - top of each page. A value of NO (the default) enables the index and the - value YES disables it. - \anchor cfg_extract_all <dt>\c EXTRACT_ALL <dd> \addindex EXTRACT_ALL @@ -578,6 +570,13 @@ followed by the descriptions of the tags grouped by category. input file. Doxygen will then use the output that the filter program writes to standard output. +\anchor cfg_filter_source_files +<dt>\c FILTER_SOURCE_FILES <dd> + \addindex FILTER_SOURCE_FILES + If the \c FILTER_SOURCE_FILES tag is set to \c YES, the input filter (if set using + \c INPUT_FILTER ) will be used to filter the input files when producing source + files to browse. + </dl> \subsection alphabetical_index Alphabetical index options @@ -723,6 +722,21 @@ followed by the descriptions of the tags grouped by category. (which basically renders \c doxysearch obsolete on Windows). The HTML workshop also contains a viewer for compressed HTML files. +\anchor cfg_disable_index +<dt>\c DISABLE_INDEX <dd> + \addindex DISABLE_INDEX + If you want full control over the layout of the generated HTML pages it + might be necessary to disable the index and replace it with your own. + The \c DISABLE_INDEX tag can be used to turn on/off the condensed index at + top of each page. A value of NO (the default) enables the index and the + value YES disables it. + +\anchor cfg_enum_values_per_line +<dt>\c ENUM_VALUES_PER_LINE <dd> + \addindex ENUM_VALUES_PER_LINE + This tag can be used to set the number of enum values (range [1..20]) + that doxygen will group on one line in the generated HTML documentation. + </dl> \subsection latex_output LaTeX related options \anchor cfg_generate_latex diff --git a/doc/index.doc b/doc/index.doc index 0f7023f..682d921 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -41,10 +41,6 @@ See the GNU General Public License</a> for more details. <p> -It is hereby explicitly allowed that this program may be linked against -<a href="http://www.trolltech.com/products/qt.html">Troll Tech's Qt library</a>, -and distributed, without the GPL applying to Qt. -<p> Documents produced by Doxygen are derivative works derived from the input used in their production; they are not affected by this license. diff --git a/doc/install.doc b/doc/install.doc index 3b0c6b2..1bb1dd2 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -22,18 +22,21 @@ First go to the \latexonly({\tt http://www.stack.nl/$\sim$dimitri/doxygen/download.html})\endlatexonly to get the latest distribution, if you did not have it already. +This section is divided into the following subsections: +<ul> +<li>\ref install_src_unix "Compiling from source on Unix" +<li>\ref install_bin_unix "Installating the binaries on Unix" +<li>\ref unix_problems "Known compilation problems for Unix" +<li>\ref install_src_windows "Compiling from source on Windows" +<li>\ref install_bin_windows "Installating the binaries on Windows" +<li>\ref build_tools "Tools used to develop doxygen" +</ul> + \subsection install_src_unix Compiling from source on Unix If you downloaded the source distribution, you need at least the following to build the executable: <ul> -<li>Troll Tech's GUI toolkit - <A HREF="http://www.trolltech.com/products/qt.html">Qt</A> - \latexonly(see {\tt http://www.trolltech.com/products/qt.html})\endlatexonly. - \addindex Qt - You can download either version 1.44 or version 2.1.x. - If want to build the GUI front-end you will need Qt 2.1.x. If you do - not need it, using Qt 1.44 will result in a somewhat smaller executable. <li>The <a href="ftp://prep.ai.mit.edu/pub/gnu">GNU</a> tools flex, bison and make \addindex flex @@ -49,14 +52,18 @@ To take full advantage of doxygen's features the following additional tools should be installed. <ul> +<li>Troll Tech's GUI toolkit version 2.x.y + <A HREF="http://www.trolltech.com/products/qt.html">Qt</A> + \latexonly(see {\tt http://www.trolltech.com/products/qt.html})\endlatexonly. + \addindex Qt + This is needed to build the GUI front-end. <li>A \f$\mbox{\LaTeX}\f$ distribution: for instance <a href="http://www.tug.org">teTeX 1.0</a>.<br> This is needed for generating LaTeX, Postscript, and PDF output. <li><a href="http://www.research.att.com/sw/tools/graphviz/"> the Graph visualization toolkit version 1.5</a><br> Needed for the include dependency graphs, - the graphical inheritance graphs, - and the collaboration graphs. + the graphical inheritance graphs, and the collaboration graphs. <li>The ghostscript interpreter. </ul> @@ -76,8 +83,8 @@ Compilation is now done by performing the following steps: sh ./configure \endverbatim - The script tries to determine the platform you use, the location - of the Qt library, the make tool (which \e must be GNU make) and the perl + The script tries to determine the platform you use, the make tool + (which \e must be GNU make) and the perl interpreter. It will report what it finds. To override the auto detected platform and compiler you can run @@ -331,17 +338,36 @@ doxygen for Windows. Here is what is required: <ul> <li>WinZip to unpack the tar source distribution. This can be found at - http://www.winzip.com + http://www.winzip.com/ . + + The good, tested, and free alternative is the <code>tar</code> utility + supplied with <a href="http://sourceware.cygnus.com/cygwin/">cygwin + tools</a>. Anyway, the cygwin's flex, bison, and sed are also + recommended below. + + Notice (not related to tar): The good alternative to the WinZip, + concerning the zipping/unzipping are the Zip/UnZip utilities by + Info-ZIP which are available for free from + ftp://ftp.freesoftware.com/pub/infozip/index.html . + There also are archives with binaries for Windows. The tip is to + download the unz540xN.exe and zip23xN.zip (they were used without + problems here) which + contain UnZip, Zip, and other auxiliary (but not necessary) + utilities related to the UnZip and Zip. + It may be the case that + <li>Microsoft Visual C++ (I only tested with version 6.0). Use the <code>vcvars32.bat</code> batch file to set the environment variables (if you did not select to do this automatically during installation). + <li>Perl 5.0 or higher for Windows. This can be download from: http://www.ActiveState.com/Products/ActivePerl/ -<li>The GNU tools flex, bison and sed. + +<li>The GNU tools flex, bison, and sed. To get these working on Windows you should install the - <a href="http://sourceware.cygnus.com/cygwin/">cygwin tools</a> - \latexonly(see {\tt http://sourceware.cygnus.com/cygwin/})\endlatexonly. + <a href="http://sources.redhat.com/cygwin/">cygwin tools</a> + \latexonly(see {\tt http://sources.redhat.com/cygwin/})\endlatexonly. Make sure the <code>BISONLIB</code> environment variable points to the location where the files <code>bison.simple</code> and @@ -349,55 +375,67 @@ Here is what is required: Also make sure the tools are available from a dos box, by adding the directory they are in to the search path. - -<li>A professional license of + + For those of you who are very new to cygwin (if you are going to + install it from scratch), you should notice that there is an + archive file <code>bootstrap.zip</code> which also contains the + <code>tar</code> utility (<code>tar.exe</code>), <code>gzip</code> + utilities, and the <code>cygwin1.dll</code> core. This also means + that you have the <code>tar</code> in hands from the start. It + can be used to unpack the tar source distribution instead of + using WinZip -- as mentioned at the beginning of this list of + steps. + +<li>Since Doxygen-1.2.2-20001015, the distribution includes the part + of Qt-2.2.0 that is needed for compilation of doxygen, doxytag, + and doxysearch. The missing files for Windows were also created. + This allows compilation of doxygen on systems without X11 or the + full Qt. For doxywizard Qt-2.2 is still required however. + + You may be interested in the professional license of <A HREF="http://www.trolltech.com/products/qt.html">Qt for Windows</A> - \latexonly\par (see {\tt http://www.trolltech.com/products/qt.html})\endlatexonly. + \latexonly\par (see + {\tt http://www.trolltech.com/products/qt.html})\endlatexonly. - If you do not have that and you can live without the GUI front-end - you can also download Qt-1.44 for X11. Doxygen only the depends on - the tools section of the Qt library, which happens also to compile - on Windows. (Qt version 2.1.x does not work anymore, at least not - without adding some window's specific code). - - Now create the following directories: - -\verbatim - qtools/src - qtools/include - qtools/lib -\endverbatim - - Copy the contents of the <code>src/tools</code> directory of the - Qt-1.44 for X11 archive to <code>qtools/src</code>. Also copy the include - files in <code>src/tools</code> to <code>qtools/include</code>. Create a - static library project resulting in <code>qtools/lib/qt.lib</code> and - add the files in <code>qtools/src</code> to that project. Then - build the library and set the environment variable <code>QTDIR</code> - to the absolute path of the qtools directory. - -<li>To generate LaTeX documentation or formulas in HTML you need the tools: - latex, dvips and gswin32 - To get these working under Windows install the fpTeX distribution - You can download it at: +<li>To generate LaTeX documentation or formulas in HTML you need the tools: + <code>latex</code>, <code>dvips</code> and <code>gswin32</code>. + To get these working under Windows + install the fpTeX distribution You can download it at: ftp://ctan.tug.org/tex-archive/systems/win32/web2c/fptex-0.3/ Make sure the tools are available from a dos box, by adding the directory they are in to the search path. + For your information, the LaTeX is freely available set of so + called macros and styles on the top of the famous TeX program + (by famous Donald Knuth) and the accompanied utilities (all + available for free). It is used to for high quality + typesetting. The result -- in the form of so called + <code>DVI</code> (DeVice Independent) file -- can be printed or + displayed on various devices preserving exactly the same look up + to the capability of the device. The <code>dvips</code> allows you + to convert the <code>dvi</code> to the high quality PostScript + (i.e. PostScript that can be processed by utilities like + <code>psnup</code>, <code>psbook</code>, <code>psselect</code>, + and others). The derived version of TeX (the pdfTeX) can be used + to produce PDF output instead of DVI, or the PDF can be produced + from PostScript using the utility <code>ps2pdf</code>. + <li>If you want to generate compressed HTML help (see \ref cfg_generate_htmlhelp "GENERATE_HTMLHELP") in the config file, then you need the Microsoft HTML help workshop. You can download it at: http://msdn.microsoft.com/workshop/author/htmlhelp + <li>If you used WinZip to extract the tar archive it will (apparently) not create empty folders, so you have to add the folders <code>objects</code> and <code>bin</code> manually in the root of the distribution before compiling. + <li><a href="http://www.research.att.com/sw/tools/graphviz/"> the Graph visualization toolkit version 1.5</a><br> Needed for the include dependency graphs, the graphical inheritance graphs, - and the collaboration graphs.<br> + and the collaboration graphs. </ul> Compilation is now done by performing the following steps: @@ -406,10 +444,15 @@ Compilation is now done by performing the following steps: <li>Open a dos box. Make sure all tools (i.e. <code>nmake</code>, <code>latex</code>, <code>gswin32</code>, <code>dvips</code>, <code>sed</code>, - <code>flex</code>, <code>bison</code>, - <code>cl</code>, <code>rm</code> and <code>perl</code>), are accessible from the command-line - (add them to the PATH environment variable if needed). - + <code>flex</code>, <code>bison</code>, <code>cl</code>, + <code>rm</code>, and <code>perl</code>), are accessible from + the command-line (add them to the PATH environment variable if + needed). + + Notice: The use of LaTeX is optional and only needed for compilation + of the documentation into PostScript or PDF. + It is \e not needed for compiling the doxygen's binaries. + <li>goto the doxygen root dir and type: \verbatim @@ -421,29 +464,28 @@ Compilation is now done by performing the following steps: <code>doxysearch.exe</code> (The compiler should not produce any serious warnings or errors). -<li>To build the examples type: - -\verbatim - nmake examples -\endverbatim - -<li>To generate the HTML documentation type: +<li>To build the examples, go to the <code>examples</code> subdirectory + and type: \verbatim - nmake docs + nmake \endverbatim - The generated docs are located in the html directory. - -<li> - To generate the postscript and PDF manual type: +<li>To generate the doxygen documentation, do ensure, that the + <code>html</code> and <code>latex</code> subdirectories exist. + Then go to the <code>doc</code> subdirectory and type: \verbatim - nmake pdf + doxygen + nmake \endverbatim - The manual should now be in <code>latex/doxygen_manual.pdf</code> + The generated docs int HTML are located in the <code>html</code> + subdirectory. + The sources for LaTeX documentation are located in <code>latex</code> + subdirectory. From those sources, the DVI, PostScript, and PDF + documentation can be generated. </ol> \subsection install_bin_windows Installating the binaries on Windows diff --git a/doc/language.doc b/doc/language.doc index 83787e3..8a6fcf6 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -46,8 +46,8 @@ Here is a list of the languages and their current maintainers: Jens Breitenstein </TD> <TD> - <a href="mailto:j@NOSPAM.js-b.de"> - j@NOSPAM.js-b.de</a> + <a href="mailto:Jens.Breitenstein@NOSPAM.tlc.de"> + Jens.Breitenstein@NOSPAM.tlc.de</a> </TD> </TR> <TR BGCOLOR="#ffffff"> @@ -227,7 +227,7 @@ Here is a list of the languages and their current maintainers: \hline {\bf Language} & {\bf Maintainer} & {Contact address} \\ \hline - German & Jens Breitenstein & {\tt j@jb-s.de} \\ + German & Jens Breitenstein & {\tt Jens.Breitenstein@tlc.de} \\ \hline French & Christophe Bordeux & {\tt bordeux@lig.di.epfl.ch} \\ \hline diff --git a/doc/preprocessing.doc b/doc/preprocessing.doc index 2e1ee36..2300525 100644 --- a/doc/preprocessing.doc +++ b/doc/preprocessing.doc @@ -168,7 +168,9 @@ PREDEFINED = DECLARE_REGISTRY_RESOURCEID=// \ "ATL_NO_VTABLE= "\ "__declspec(a)= "\ BEGIN_CONNECTION_POINT_MAP=/* \ - END_CONNECTION_POINT_MAP=*/// + END_CONNECTION_POINT_MAP=*/// \ + "DECLARE_AGGREGATABLE(Class)= " \ + "DECLARE_REGISTRY_RESOURCEID(id)= " \endverbatim As you can see doxygen's preprocessor is quite powerful, but if you want diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index ee917cc..1410ae0 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ Name: doxygen -Version: 1.2.2-20001015 +Version: 1.2.3 Summary: documentation system for C, C++ and IDL Release: 1 Source0: doxygen-%{version}.src.tar.gz diff --git a/src/classdef.cpp b/src/classdef.cpp index 9289375..49846b6 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -727,7 +727,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ClassDef *cd=bcd->classDef; if (cd->isLinkable()) { - if (!Config::genTagFile.isEmpty()) tagFile << cd->getOutputFileBase() << "?"; + if (!Config::genTagFile.isEmpty()) tagFile << cd->name() << "?"; ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->name()+bcd->templSpecifiers); } else @@ -127,12 +127,9 @@ static QCString g_saveType; * is TRUE. If a definition starts at the current line, then the line * number is linked to the documentation of that definition. */ -static void startCodeLine(OutputList &ol) +static void startCodeLine() { - if (g_currentFontClass) - { - g_code->endFontClass(); - } + //if (g_currentFontClass) { g_code->endFontClass(); } if (g_sourceFileDef) { QCString lineNumber,lineAnchor; @@ -149,25 +146,32 @@ static void startCodeLine(OutputList &ol) g_searchingForBody = TRUE; g_bodyCurlyCount = 0; if (g_currentMemberDef) anchor=g_currentMemberDef->anchor(); - ol.startCodeAnchor(lineAnchor); - ol.writeCodeLink(d->getReference(),d->getOutputFileBase(), + g_code->startCodeAnchor(lineAnchor); + g_code->writeCodeLink(d->getReference(),d->getOutputFileBase(), anchor,lineNumber); - ol.endCodeAnchor(); - ol.codify(" "); + g_code->endCodeAnchor(); + g_code->codify(" "); } else { - ol.codify(lineNumber); - ol.codify(" "); + g_code->codify(lineNumber); + g_code->codify(" "); } } - ol.startCodeLine(); + g_code->startCodeLine(); if (g_currentFontClass) { g_code->startFontClass(g_currentFontClass); } } + +static void endCodeLine() +{ + if (g_currentFontClass) { g_code->endFontClass(); } + g_code->endCodeLine(); +} + /*! write a code fragment `text' that may span multiple lines, inserting * line numbers for each line. */ @@ -185,10 +189,10 @@ static void codifyLines(char *text) g_yyLineNr++; *(p-1)='\0'; g_code->codify(sp); - g_code->endCodeLine(); + endCodeLine(); if (g_yyLineNr<g_inputLines) { - startCodeLine(*g_code); + startCodeLine(); } } else @@ -219,10 +223,10 @@ static void writeMultiLineCodeLink(OutputList &ol, g_yyLineNr++; *(p-1)='\0'; ol.writeCodeLink(ref,file,anchor,sp); - ol.endCodeLine(); + endCodeLine(); if (g_yyLineNr<g_inputLines) { - startCodeLine(ol); + startCodeLine(); } } else @@ -1241,10 +1245,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" } <RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*({B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n)? { g_yyLineNr+=QCString(yytext).contains('\n'); - g_code->endCodeLine(); + endCodeLine(); if (g_yyLineNr<g_inputLines) { - startCodeLine(*g_code); + startCodeLine(); } if (g_lastSpecialCContext==SkipCxxComment) { // force end of C++ comment here @@ -1267,10 +1271,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" if (Config::stripCommentsFlag) { g_yyLineNr+=((QCString)yytext).contains('\n'); - g_code->endCodeLine(); + endCodeLine(); if (g_yyLineNr<g_inputLines) { - startCodeLine(*g_code); + startCodeLine(); } } else @@ -1284,10 +1288,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" if (Config::stripCommentsFlag) { g_yyLineNr+=2; - g_code->endCodeLine(); + endCodeLine(); if (g_yyLineNr<g_inputLines) { - startCodeLine(*g_code); + startCodeLine(); } } else @@ -1320,10 +1324,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" if (Config::stripCommentsFlag) { g_yyLineNr++; - g_code->endCodeLine(); + endCodeLine(); if (g_yyLineNr<g_inputLines) { - startCodeLine(*g_code); + startCodeLine(); } } else @@ -1355,10 +1359,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" if (Config::stripCommentsFlag) { g_yyLineNr++; - g_code->endCodeLine(); + endCodeLine(); if (g_yyLineNr<g_inputLines) { - startCodeLine(*g_code); + startCodeLine(); } } else @@ -1527,7 +1531,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, g_bracketCount = 0; g_exampleFile = convertFileName(g_exampleName)+"-example"; g_includeCodeFragment = inlineFragment; - startCodeLine(*g_code); + startCodeLine(); g_type.resize(0); g_name.resize(0); g_args.resize(0); @@ -1537,7 +1541,6 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, BEGIN( Body ); codeYYlex(); endFontClass(); - //if (g_yyLineNr<=g_inputLines) code->endCodeLine(); ol+=*g_code; delete g_code; return; diff --git a/src/config.h b/src/config.h index a85fc68..a3165d7 100644 --- a/src/config.h +++ b/src/config.h @@ -1,4 +1,4 @@ -/* This file was generated by configgen on Tue Oct 10 22:16:03 2000 +/* This file was generated by configgen on Sat Oct 28 15:42:39 2000 * from config_templ.h * * DO NOT EDIT! @@ -84,6 +84,7 @@ struct Config static QStrList examplePatternList; // list of example patterns static QStrList imagePath; // list of image paths static QCString inputFilter; // a filter command that is applied to input files + static bool filterForSourceFlag; // do we filter source files? static bool alphaIndexFlag; // should an alphabetical index be generated? static int colsInAlphaIndex; // number of columns in the alphabetical index static QStrList ignorePrefixList; // list of prefixes to ignore for the alphabetical index @@ -95,6 +96,7 @@ struct Config static bool htmlAlignMemberFlag; // align members in HTML using tables. static bool htmlHelpFlag; // should html help files be generated? static bool noIndexFlag; // generate condensed index flag + static int enumValuesPerLine; // number of enum values that are put on one line static bool generateLatex; // generate Latex output static QCString latexOutputDir; // the directory to put the Latex files static bool compactLatexFlag; // generate compact LaTeX documentation. diff --git a/src/config.l b/src/config.l index 86b6578..d158cdb 100644 --- a/src/config.l +++ b/src/config.l @@ -1,4 +1,4 @@ -/* This file was generated by configgen on Tue Oct 10 22:16:03 2000 +/* This file was generated by configgen on Sat Oct 28 15:42:39 2000 * from config_templ.l * * DO NOT EDIT! @@ -121,6 +121,7 @@ QStrList Config::examplePath; QStrList Config::examplePatternList; QStrList Config::imagePath; QCString Config::inputFilter; +bool Config::filterForSourceFlag = FALSE; bool Config::alphaIndexFlag = FALSE; int Config::colsInAlphaIndex = 5; QStrList Config::ignorePrefixList; @@ -132,6 +133,7 @@ QCString Config::htmlStyleSheet; bool Config::htmlAlignMemberFlag = TRUE; bool Config::htmlHelpFlag = FALSE; bool Config::noIndexFlag = FALSE; +int Config::enumValuesPerLine = 4; bool Config::generateLatex = TRUE; QCString Config::latexOutputDir = "latex"; bool Config::compactLatexFlag = FALSE; @@ -211,6 +213,7 @@ static int includeDepth; static QCString tabSizeString; static QCString colsInAlphaIndexString; +static QCString enumValuesPerLineString; static QCString maxDotGraphWidthString; static QCString maxDotGraphHeightString; @@ -253,8 +256,12 @@ static FILE *tryPath(const char *path,const char *fileName) return 0; } +static void substEnvVarsInStrList(QStrList &sl); +static void substEnvVarsInString(QCString &s); + static FILE *findFile(const char *fileName) { + substEnvVarsInStrList(includePathList); char *s=includePathList.first(); while (s) // try each of the include paths { @@ -275,6 +282,7 @@ static void readIncludeFile(const char *incName) } QCString inc = incName; + substEnvVarsInString(inc); inc = inc.stripWhiteSpace(); uint incLen = inc.length(); if (inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes @@ -389,6 +397,7 @@ static void readIncludeFile(const char *incName) <Start>"IMAGE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::imagePath; l->clear(); elemStr=""; } <Start>"IMAGE_PATH"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::imagePath; elemStr=""; } <Start>"INPUT_FILTER"[ \t]*"=" { BEGIN(GetString); s=&Config::inputFilter; s->resize(0); } +<Start>"FILTER_SOURCE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::filterForSourceFlag; } <Start>"ALPHABETICAL_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::alphaIndexFlag; } <Start>"COLS_IN_ALPHA_INDEX"[ \t]*"=" { BEGIN(GetString); s=&colsInAlphaIndexString; s->resize(0); } <Start>"IGNORE_PREFIX"[ \t]*"=" { BEGIN(GetStrList); l=&Config::ignorePrefixList; l->clear(); elemStr=""; } @@ -401,6 +410,7 @@ static void readIncludeFile(const char *incName) <Start>"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; } <Start>"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; } <Start>"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; } +<Start>"ENUM_VALUES_PER_LINE"[ \t]*"=" { BEGIN(GetString); s=&enumValuesPerLineString; s->resize(0); } <Start>"GENERATE_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateLatex; } <Start>"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); } <Start>"COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; } @@ -678,6 +688,7 @@ void dumpConfig() } } printf("inputFilter=`%s'\n",Config::inputFilter.data()); + printf("filterForSourceFlag=`%d'\n",Config::filterForSourceFlag); printf("# configuration options related to the alphabetical class index\n"); printf("alphaIndexFlag=`%d'\n",Config::alphaIndexFlag); printf("colsInAlphaIndex=`%d'\n",Config::colsInAlphaIndex); @@ -698,6 +709,7 @@ void dumpConfig() printf("htmlAlignMemberFlag=`%d'\n",Config::htmlAlignMemberFlag); printf("htmlHelpFlag=`%d'\n",Config::htmlHelpFlag); printf("noIndexFlag=`%d'\n",Config::noIndexFlag); + printf("enumValuesPerLine=`%d'\n",Config::enumValuesPerLine); printf("# configuration options related to the LaTeX output\n"); printf("generateLatex=`%d'\n",Config::generateLatex); printf("latexOutputDir=`%s'\n",Config::latexOutputDir.data()); @@ -853,6 +865,7 @@ void Config::init() Config::examplePatternList.clear(); Config::imagePath.clear(); Config::inputFilter.resize(0); + Config::filterForSourceFlag = FALSE; Config::alphaIndexFlag = FALSE; Config::colsInAlphaIndex = 5; Config::ignorePrefixList.clear(); @@ -864,6 +877,7 @@ void Config::init() Config::htmlAlignMemberFlag = TRUE; Config::htmlHelpFlag = FALSE; Config::noIndexFlag = FALSE; + Config::enumValuesPerLine = 4; Config::generateLatex = TRUE; Config::latexOutputDir = "latex"; Config::compactLatexFlag = FALSE; @@ -1536,6 +1550,17 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; + t << "# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \n"; + t << "# INPUT_FILTER) will be used to filter the input files when producing source \n"; + t << "# files to browse. \n"; + t << "\n"; + } + t << "FILTER_SOURCE_FILES = "; + writeBoolValue(t,Config::filterForSourceFlag); + t << "\n"; + if (!sl) + { + t << "\n"; } t << "#---------------------------------------------------------------------------\n"; t << "# configuration options related to the alphabetical class index\n"; @@ -1673,6 +1698,16 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; + t << "# This tag can be used to set the number of enum values (range [1..20]) \n"; + t << "# that doxygen will group on one line in the generated HTML documentation. \n"; + t << "\n"; + } + t << "ENUM_VALUES_PER_LINE = "; + writeIntValue(t,Config::enumValuesPerLine); + t << "\n"; + if (!sl) + { + t << "\n"; } t << "#---------------------------------------------------------------------------\n"; t << "# configuration options related to the LaTeX output\n"; @@ -2286,6 +2321,23 @@ void configStrToVal() } Config::colsInAlphaIndex=cols; } + + if (enumValuesPerLineString.isEmpty()) + { + Config::enumValuesPerLine=4; + } + else + { + bool ok; + int cols = enumValuesPerLineString.toInt(&ok); + if (!ok || cols<1 || cols>20) + { + warn_cont("Warning: argument of ENUM_VALUES_PER_LINE is not a valid number in the range [1..20]!\n" + "Using the default of 4!\n"); + cols = 4; + } + Config::enumValuesPerLine=cols; + } if (maxDotGraphWidthString.isEmpty()) { @@ -2297,7 +2349,7 @@ void configStrToVal() int width =maxDotGraphWidthString.toInt(&ok); if (!ok) { - warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n" + warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n" "Using the default of 1024 pixels!\n"); width=1024; } @@ -2322,7 +2374,7 @@ void configStrToVal() int height =maxDotGraphHeightString.toInt(&ok); if (!ok) { - warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [1..20]!\n" + warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n" "Using the default of 1024 pixels!\n"); height=1024; } diff --git a/src/declinfo.l b/src/declinfo.l index a6cafc4..84e2abd 100644 --- a/src/declinfo.l +++ b/src/declinfo.l @@ -136,7 +136,7 @@ ID ([a-z_A-Z][a-z_A-Z0-9]*)|(@[0-9]+) <Start>{B}+ { addType(); } -<Start>{B}*"("({ID}"::")*{B}*"*" { +<Start>{B}*"("({ID}"::")*{B}*"*"({B}*("const"|"volatile"){B}+)? { addType(); QCString text=yytext; type+=text.stripWhiteSpace(); diff --git a/src/define.h b/src/define.h index 09e0140..060270e 100644 --- a/src/define.h +++ b/src/define.h @@ -20,7 +20,7 @@ #include "qtbc.h" #include <qdict.h> -#include "util.h" +#include <qlist.h> class FileDef; diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 621039d..6d390b5 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1307,6 +1307,7 @@ void buildVarList(Entry *root) ) || (root->section==Entry::FUNCTION_SEC && // function variable !root->type.isEmpty() && root->type.find(re,0)!=-1 && + // special case to catch function pointers root->type.find("operator")==-1 && root->type.find(")(")==-1 ) ) diff --git a/src/filedef.cpp b/src/filedef.cpp index 6ce4c86..c4fe0f1 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -422,11 +422,6 @@ void FileDef::writeDocumentation(OutputList &ol) /*! Write a source listing of this file to the output */ void FileDef::writeSource(OutputList &ol) { - //QCString fn=name(); - //if (Config::fullPathNameFlag) - //{ - // fn.prepend(stripFromPath(getPath().copy())); - //} ol.disableAllBut(OutputGenerator::Html); startFile(ol,sourceName(),docname+" Source File"); startTitle(ol,0); @@ -440,11 +435,9 @@ void FileDef::writeSource(OutputList &ol) ol.endTextLink(); } - //parseText(ol,theTranslator->trVerbatimText(incFile->name())); - //ol.writeRuler(); initParseCodeContext(); ol.startCodeFragment(); - parseCode(ol,0,fileToString(absFilePath()),FALSE,0,this); + parseCode(ol,0,fileToString(absFilePath(),TRUE),FALSE,0,this); ol.endCodeFragment(); endFile(ol); ol.enableAll(); diff --git a/src/index.cpp b/src/index.cpp index f470341..383b41f 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -1199,7 +1199,7 @@ void writeNamespaceMemberList(OutputList &ol,bool useSections) { char lastChar=0; bool first=TRUE; - ol.startItemList(); + //ol.startItemList(); MemberName *mn=functionNameList.first(); while (mn) { diff --git a/src/language.cpp b/src/language.cpp index e7a9576..0711aa3 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -36,6 +36,7 @@ #include "translator_ro.h" #include "translator_si.h" #include "translator_cn.h" +#include "translator_no.h" #endif #define L_EQUAL(a) !stricmp(langName,a) diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 1c2e940..7a20e12 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -1198,7 +1198,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, bmd->anchor(),bcd->name()); if ( bcd->isLinkableInProject()/* && !Config::pdfHyperFlag*/ ) { - writePageRef(ol,bcd->name(),bmd->anchor()); + writePageRef(ol,bcd->getOutputFileBase(),bmd->anchor()); } } else @@ -1207,7 +1207,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, 0,bcd->name()); if (bcd->isLinkableInProject()/* && !Config::pdfHyperFlag*/ ) { - writePageRef(ol,bcd->name(),0); + writePageRef(ol,bcd->getOutputFileBase(),0); } } parseText(ol,reimplFromLine.right( @@ -1273,7 +1273,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, bmd->anchor(),bcd->name()); if (bcd->isLinkableInProject()/* && !Config::pdfHyperFlag*/ ) { - writePageRef(ol,bcd->name(),bmd->anchor()); + writePageRef(ol,bcd->getOutputFileBase(),bmd->anchor()); } } ++mli; diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 3e7b7a0..17b9226 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -302,7 +302,6 @@ void MemberList::writePlainDeclarations(OutputList &ol, typeDecl.writeChar(' '); } - const uint MAX_ENUM_VALUES_FOR_ONE_LINE = 4; int enumMemCount=0; typeDecl.docify("{ "); @@ -313,8 +312,8 @@ void MemberList::writePlainDeclarations(OutputList &ol, while (fmd) { /* in html we start a new line after a number of items */ - if (fmdl->count()>MAX_ENUM_VALUES_FOR_ONE_LINE - && (enumMemCount%MAX_ENUM_VALUES_FOR_ONE_LINE)==0 + if (fmdl->count()>(uint)Config::enumValuesPerLine + && (enumMemCount%(uint)Config::enumValuesPerLine)==0 ) { typeDecl.pushGeneratorState(); @@ -348,7 +347,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, typeDecl.enable(OutputGenerator::Man); enumMemCount++; } - if (fmdl->count()>MAX_ENUM_VALUES_FOR_ONE_LINE) + if (fmdl->count()>(uint)Config::enumValuesPerLine) { typeDecl.pushGeneratorState(); typeDecl.disableAllBut(OutputGenerator::Html); @@ -92,6 +92,7 @@ static int g_findDefArgContext; static QCString g_lastGuardName; static QCString g_incName; static QCString g_guardExpr; +static int g_curlyCount; static void setFileName(const char *name) { @@ -818,12 +819,12 @@ void addDefine() static void outputChar(char c) { - if (g_includeStack.isEmpty()) g_outputBuf->addChar(c); + if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c); } static void outputArray(const char *a,int len) { - if (g_includeStack.isEmpty()) g_outputBuf->addArray(a,len); + if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addArray(a,len); } static void readIncludeFile(const QCString &inc) @@ -917,6 +918,7 @@ BN [ \t\r\n] %x SkipCommand %x SkipLine %x CopyLine +%x CopyString %x Include %x IncludeID %x DefName @@ -967,6 +969,41 @@ BN [ \t\r\n] outputArray(yytext,yyleng); } */ + +<CopyLine>"{" { // count brackets inside the main file + if (g_includeStack.isEmpty()) + g_curlyCount++; + outputChar(*yytext); + } +<CopyLine>"}" { // count brackets inside the main file + if (g_includeStack.isEmpty()) + g_curlyCount--; + outputChar(*yytext); + ASSERT(g_curlyCount>=0); + } +<CopyLine>"'"\\[0-7]{1,3}"'" { + outputArray(yytext,yyleng); + } +<CopyLine>"'"\\."'" { + outputArray(yytext,yyleng); + } +<CopyLine>"'"."'" { + outputArray(yytext,yyleng); + } +<CopyLine>\" { + outputChar(*yytext); + BEGIN( CopyString ); + } +<CopyString>[^\"\\]+ { + outputArray(yytext,yyleng); + } +<CopyString>\\. { + outputArray(yytext,yyleng); + } +<CopyString>\" { + outputChar(*yytext); + BEGIN( CopyLine ); + } <CopyLine>{ID}/{BN}*"(" { Define *def=0; //printf("Search for define %s\n",yytext); @@ -1726,6 +1763,7 @@ void preprocessFile(const char *fileName,BufStr &output) uint orgOffset=output.curPos(); //#endif + g_curlyCount=0; g_outputBuf=&output; g_includeStack.setAutoDelete(TRUE); g_includeStack.clear(); diff --git a/src/scanner.l b/src/scanner.l index a12189b..5d8484e 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -1615,7 +1615,14 @@ TITLE [tT][iI][tT][lL][eE] } <FuncPtr>{SCOPENAME} { current->name = yytext; - BEGIN( EndFuncPtr ); + if (current->name=="const" || current->name=="volatile") + { + funcPtrType += current->name; + } + else + { + BEGIN( EndFuncPtr ); + } } <FuncPtr>. { //printf("Error: FuncPtr `%c' unexpected at line %d of %s\n",*yytext,yyLineNr,yyFileName); @@ -2337,7 +2344,7 @@ TITLE [tT][iI][tT][lL][eE] } <Comment>. { current->program += *yytext ; } -<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits>("//"{B}*)?"/*!" { +<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases>("//"{B}*)?"/*!" { //printf("Start doc block at %d\n",yyLineNr); removeSlashes=(yytext[1]=='/'); tmpDocType=-1; @@ -2350,7 +2357,7 @@ TITLE [tT][iI][tT][lL][eE] current->inside = current_root->name+"::"; BEGIN( Doc ); } -<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits>("//"{B}*)?"/**"/[^/*] { +<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases>("//"{B}*)?"/**"/[^/*] { removeSlashes=(yytext[1]=='/'); lastDocContext = YY_START; if (current_root->section & Entry::SCOPE_MASK) @@ -2382,7 +2389,7 @@ TITLE [tT][iI][tT][lL][eE] } } } -<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar>"//!" { +<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"//!" { current->brief.resize(0); tmpDocType=-1; lastDocContext = YY_START; @@ -2390,7 +2397,7 @@ TITLE [tT][iI][tT][lL][eE] current->inside = current_root->name+"::"; BEGIN( LineDoc ); } -<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar>"///"/[^/] { +<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"///"/[^/] { current->brief.resize(0); tmpDocType=-1; lastDocContext = YY_START; @@ -3181,9 +3188,8 @@ TITLE [tT][iI][tT][lL][eE] current->brief=current->brief.stripWhiteSpace(); BEGIN( lastBriefContext ); } -<ClassDocBrief>{BS}/{CMD}("brief"|"short"){BN}+ { +<ClassDocBrief>{BS}{CMD}("brief"|"short"){BN}+ { lastBriefContext=YY_START; - BEGIN( ClassDocBrief ); } <ClassDocBrief>. { current->brief += *yytext; } <ClassDocDefine>{ID}/"(" { diff --git a/src/translator_cz.h b/src/translator_cz.h index 9b758c4..bad2bf2 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -70,6 +70,9 @@ // - Update for "new since 1.2.1" version. The text of trDCOPMethods() // was translated rather blindly (not knowing what exactly // the DCOP means). +// +// 2000/10/17 (Petr Prikryl) +// - Update for "new since 1.2.2" version. // // Notices: // -------- @@ -1108,6 +1111,21 @@ class TranslatorCzech : public Translator { return Decode("Metody DCOP"); } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.2 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for IDL properties */ + virtual QCString trProperties() + { + return Decode("Vlastnosti"); + } + /*! Used as a section header for IDL property documentation */ + virtual QCString trPropertyDocumentation() + { + return Decode("Dokumentace k vlastnosti"); + } }; #endif // TRANSLATOR_CZ_H diff --git a/src/translator_jp.h b/src/translator_jp.h index 650dc5d..4946379 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -25,6 +25,9 @@ class TranslatorJapanese : public Translator public: QCString idLanguage() { return "japanese"; } + QCString idLanguageCharset() + { return "euc-jp"; } + /*! returns the name of the package that is included by LaTeX */ QCString latexBabelPackage() { return "a4j"; } diff --git a/src/util.cpp b/src/util.cpp index 02188c4..72701d2 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -48,6 +48,11 @@ extern char **environ; #endif +#if defined(_MSC_VER) || defined(__BORLANDC__) +#define popen _popen +#define pclose _pclose +#endif + //------------------------------------------------------------------------ // TextGeneratorOLImpl implementation //------------------------------------------------------------------------ @@ -954,7 +959,7 @@ void setAnchors(char id,MemberList *ml,int groupId) //---------------------------------------------------------------------------- // read a file with `name' to a string. -QCString fileToString(const char *name) +QCString fileToString(const char *name,bool filter) { if (name==0 || name[0]==0) return 0; QFile f; @@ -989,19 +994,47 @@ QCString fileToString(const char *name) err("Error: file `%s' not found\n",name); return ""; } - f.setName(name); - fileOpened=f.open(IO_ReadOnly); - if (fileOpened) + if (Config::inputFilter.isEmpty() || !filter) { - int fsize=f.size(); - QCString contents(fsize+2); - f.readBlock(contents.data(),fsize); - if (fsize==0 || contents[fsize-1]=='\n') - contents[fsize]='\0'; - else - contents[fsize]='\n'; // to help the scanner - contents[fsize+1]='\0'; - f.close(); + f.setName(name); + fileOpened=f.open(IO_ReadOnly); + if (fileOpened) + { + int fsize=f.size(); + QCString contents(fsize+2); + f.readBlock(contents.data(),fsize); + if (fsize==0 || contents[fsize-1]=='\n') + contents[fsize]='\0'; + else + contents[fsize]='\n'; // to help the scanner + contents[fsize+1]='\0'; + f.close(); + return contents; + } + } + else // filter the input + { + QCString cmd=Config::inputFilter+" "+name; + FILE *f=popen(cmd,"r"); + if (!f) + { + err("Error: could not execute filter %s\n",Config::inputFilter.data()); + return ""; + } + const int bSize=4096; + QCString contents(bSize); + int totalSize=0; + int size; + while ((size=fread(contents.data()+totalSize,1,bSize,f))==bSize) + { + totalSize+=bSize; + contents.resize(totalSize+bSize); + } + totalSize+=size+2; + contents.resize(totalSize); + contents.at(totalSize-2)='\n'; // to help the scanner + contents.at(totalSize-1)='\0'; + pclose(f); return contents; } } @@ -2340,7 +2373,8 @@ bool generateRef(OutputList &ol,const char *scName, if (!rt && (md->isFunction() || md->isPrototype() || md->isSignal() || md->isSlot() || md->isDefine())) { if (argsStr.isEmpty() && (!md->isDefine() || md->argsString()!=0)) - ol.writeString("()"); + // ol.writeString("()") + ; else ol.docify(argsStr); } @@ -2732,7 +2766,7 @@ void extractNamespaceName(const QCString &scopeName, { QCString clName=scopeName.copy(); //QCString nsName; - NamespaceDef *nd; + NamespaceDef *nd = 0; if (!clName.isEmpty() && (nd=getResolvedNamespace(clName)) && getClass(clName)==0) { // the whole name is a namespace (and not a class) namespaceName=nd->name().copy(); @@ -83,7 +83,7 @@ extern void linkifyText(const TextGeneratorIntf &ol,const char *clName,const cha const char *text,bool autoBreak=FALSE,bool external=TRUE); extern void setAnchors(char id,MemberList *ml,int groupId=-1); -extern QCString fileToString(const char *name); +extern QCString fileToString(const char *name,bool filter=FALSE); extern QCString dateToString(bool); extern bool getDefs(const QCString &scopeName, const QCString &memberName, |