From 8726fc640f878611e395b1d821661cff56a49e13 Mon Sep 17 00:00:00 2001 From: dimitri Date: Sun, 13 Aug 2000 17:49:57 +0000 Subject: Release-1.2.1 --- INSTALL | 4 +- README | 4 +- VERSION | 2 +- addon/configgen/config_templ.l | 2 +- addon/configgen/configgen.cpp | 17 ++-- doc/Doxyfile | 2 +- doc/commands.doc | 4 +- doc/docblocks.doc | 2 +- doc/doxygen_manual.tex | 2 + doc/index.doc | 1 + doc/lists.doc | 89 +++++++++++++++++ doc/starting.doc | 38 -------- packages/rpm/doxygen.spec | 2 +- src/classdef.cpp | 1 + src/code.l | 9 +- src/config.h | 4 +- src/config.l | 34 +++---- src/definition.h | 6 +- src/doc.l | 24 +---- src/doxygen.cpp | 105 +++++++++++++++----- src/doxygen.h | 55 +++-------- src/doxygen.pro.in | 2 +- src/htmlgen.cpp | 2 +- src/htmlgen.h | 2 + src/index.cpp | 217 +++++++++++++++++++++++++++++------------ src/index.h | 2 +- src/latexgen.cpp | 24 ++--- src/latexgen.h | 2 + src/mangen.h | 2 + src/memberdef.cpp | 9 +- src/outputgen.h | 2 + src/outputlist.cpp | 2 +- src/outputlist.h | 6 +- src/page.h | 58 +++++++++++ src/pre.l | 4 +- src/rtfgen.cpp | 15 ++- src/rtfgen.h | 2 + src/sortdict.h | 173 ++++++++++++++++++++++++++++++++ src/translator_nl.h | 2 +- src/util.cpp | 11 ++- 40 files changed, 678 insertions(+), 266 deletions(-) create mode 100644 doc/lists.doc create mode 100644 src/page.h create mode 100644 src/sortdict.h diff --git a/INSTALL b/INSTALL index bae44bc..202b9ae 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.0-20000806 +DOXYGEN Version 1.2.1 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (06 August 2000) +Dimitri van Heesch (13 August 2000) diff --git a/README b/README index 11584c4..e1d89eb 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.2.0-20000806 +DOXYGEN Version 1.2.1 Please read INSTALL for compilation instructions. @@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at Enjoy, -Dimitri van Heesch (06 August 2000) +Dimitri van Heesch (13 August 2000) diff --git a/VERSION b/VERSION index c6784c2..6085e94 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.0-20000806 +1.2.1 diff --git a/addon/configgen/config_templ.l b/addon/configgen/config_templ.l index 3da3d56..aab5755 100644 --- a/addon/configgen/config_templ.l +++ b/addon/configgen/config_templ.l @@ -239,7 +239,7 @@ static void readIncludeFile(const char *incName) else { ConfigFileState *fs=includeStack.pop(); - pclose(fs->filePtr); + fclose(fs->filePtr); YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER; yy_switch_to_buffer( fs->oldState ); yy_delete_buffer( oldBuf ); diff --git a/addon/configgen/configgen.cpp b/addon/configgen/configgen.cpp index eeba328..4367f20 100644 --- a/addon/configgen/configgen.cpp +++ b/addon/configgen/configgen.cpp @@ -791,14 +791,6 @@ void init() ConfigString::addFixedValue("outputLanguage","Croatian"); ConfigString::addFixedValue("outputLanguage","Polish"); ConfigString::addFixedValue("outputLanguage","Portuguese"); - ConfigBool::add( "noIndexFlag", - "DISABLE_INDEX", - "FALSE", - "generate condensed index flag", - "The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n" - "top of each HTML page. The value NO (the default) enables the index and \n" - "the value YES disables it. \n" - ); ConfigBool::add( "extractAllFlag", "EXTRACT_ALL", "FALSE", @@ -1244,6 +1236,15 @@ void init() "of the generated HTML documentation. \n" ); addDependency("htmlHelpFlag","generateHtml"); + ConfigBool::add( "noIndexFlag", + "DISABLE_INDEX", + "FALSE", + "generate condensed index flag", + "The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n" + "top of each HTML page. The value NO (the default) enables the index and \n" + "the value YES disables it. \n" + ); + addDependency("noIndexFlag","generateHtml"); //----------------------------------------------------------------------------------------------- ConfigInfo::add( "LaTeX","configuration options related to the LaTeX output"); //----------------------------------------------------------------------------------------------- diff --git a/doc/Doxyfile b/doc/Doxyfile index 9c299b1..f992010 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -30,7 +30,7 @@ ENABLED_SECTIONS = logo_on ENABLE_PREPROCESSING = NO CASE_SENSE_NAMES = NO IMAGE_PATH = . -INPUT = index.doc install.doc starting.doc docblocks.doc \ +INPUT = index.doc install.doc starting.doc docblocks.doc lists.doc \ grouping.doc formulas.doc diagrams.doc preprocessing.doc \ external.doc faq.doc trouble.doc history.doc features.doc \ doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \ diff --git a/doc/commands.doc b/doc/commands.doc index dd0c378..80b032b 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -179,7 +179,7 @@ Doxygen. Unrecognized commands are treated as normal text. \par Example: \verbinclude define.h \htmlonly - Click here + Click here for the corresponding HTML documentation that is generated by Doxygen. \endhtmlonly @@ -270,7 +270,7 @@ Doxygen. Unrecognized commands are treated as normal text. \par Example: \verbinclude file.h \htmlonly - Click here + Click here for the corresponding HTML documentation that is generated by Doxygen. \endhtmlonly diff --git a/doc/docblocks.doc b/doc/docblocks.doc index f02d11f..3ac2789 100644 --- a/doc/docblocks.doc +++ b/doc/docblocks.doc @@ -204,7 +204,7 @@ Here is an example of a the use of these comment blocks: inside these comment blocks. \htmlonly -Go to the next section or return to the +Go to the next section or return to the index. \endhtmlonly diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex index 6bab05e..a9448be 100644 --- a/doc/doxygen_manual.tex +++ b/doc/doxygen_manual.tex @@ -20,6 +20,7 @@ \usepackage{doxygen} \usepackage{multicol} \usepackage{times} +\usepackage{alltt} \usepackage[pagebackref=true, colorlinks=true, linkcolor=blue @@ -46,6 +47,7 @@ Written by Dimitri van Heesch\\[2ex] \input{install} \input{starting} \input{docblocks} +\input{lists} \input{grouping} \input{formulas} \input{diagrams} diff --git a/doc/index.doc b/doc/index.doc index 198bf46..9c7619f 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -89,6 +89,7 @@ The first part forms a user manual: documentation quickly.
  • Section \ref docblocks demonstrates the various ways that code can be documented. +
  • Section \ref lists show various ways to create lists.
  • Section \ref grouping shows how to group things together.
  • Section \ref formulas shows how to insert formulas in the documentation.
  • Section \ref diagrams describes the diagrams and graphs that doxygen can generate. diff --git a/doc/lists.doc b/doc/lists.doc new file mode 100644 index 0000000..eaf8616 --- /dev/null +++ b/doc/lists.doc @@ -0,0 +1,89 @@ +/*! \page lists Lists + +Doxygen has a number of ways to create lists of items. + +Using dashes + + By putting a number of column-aligned minus signs at the start of a + line, a bullet list will automatically be generated. + Numbered lists can also be generated by using a minus followed by a hash. + Nesting of lists is allowed.

    + Here is an example: +\verbatim + /*! + * A list of events: + * - mouse events + * -# mouse move event + * -# mouse click event\n + * More info about the click event. + * -# mouse double click event + * - keyboard events + * -# key down event + * -# key up event + * + * More text here. + */ +\endverbatim + The result will be: + + A list of events: + - mouse events + -# mouse move event + -# mouse click event\n + More info about the click event. + -# mouse double click event + - keyboard events + -# key down event + -# key up event + + More text here. + +If you use tabs within lists, please make sure that \ref cfg_tab_size "TAB_SIZE" in the +configuration file is set to the correct tab size. + +Using HTML commands + +If you like you can also use HTML commands inside the documentation +blocks. Using these commands has the advantage that it is more natural +for list items that consists of multiple paragraphs. + +Here is the above example with HTML commands: +\verbatim + /*! + * A list of events: + *

    + * More text here. + */ +\endverbatim + +\note The the indent here is not important. + +Using \\arg or \@li + +For compatibility with the Troll Tech's internal documentation tool and +with KDoc, doxygen has two commands that can be used to create simple +not nested lists. + +See \ref cmdarg "\arg" and \ref cmdli "\li" for more info. + +\htmlonly +Go to the next section or return to the + index. +\endhtmlonly + +*/ + + diff --git a/doc/starting.doc b/doc/starting.doc index cd48df3..b518838 100644 --- a/doc/starting.doc +++ b/doc/starting.doc @@ -197,43 +197,6 @@ During parsing the following steps take place: See section \ref htmlcmds for an overview of all supported HTML tags. - By putting a number of column-aligned minus signs at the start of a - line, a bullet list will automatically be generated. - Numbered lists can also be generated by using a minus followed by a hash. - Nesting of lists is allowed.

    - Here is an example: -\verbatim - /*! - * A list of events: - * - mouse events - * -# mouse move event - * -# mouse click event\n - * More info about the click event. - * -# mouse double click event - * - keyboard events - * -# key down event - * -# key up event - * - * More text here. - */ -\endverbatim - The result will be: - - A list of events: - - mouse events - -# mouse move event - -# mouse click event\n - More info about the click event. - -# mouse double click event - - keyboard events - -# key down event - -# key up event - - More text here. - -If you use tabs within lists, please make sure that \ref cfg_tab_size "TAB_SIZE" in the -configuration file is set to the correct tab size. - \htmlonly Go to the next section or return to the index. @@ -241,4 +204,3 @@ Go to the next section or return to the */ - diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index 3a30f60..0625b70 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ Name: doxygen -Version: 1.2.0-20000806 +Version: 1.2.1 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 bd7ee04..be5f1c2 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1635,6 +1635,7 @@ void ClassDef::determineImplUsageRelation() } QCString templSpec; if (te>ts) templSpec = type.mid(ts,te-ts); + // TODO: also check using Nx::Cx cases here! ClassDef *cd=getResolvedClass(name()+"::"+type.mid(i,l)); if (cd==0) cd=getResolvedClass(type.mid(i,l)); // TODO: also try inbetween scopes! //printf("Search for class %s result=%p\n",type.mid(i,l).data(),cd); diff --git a/src/code.l b/src/code.l index 9edf6e2..7825142 100644 --- a/src/code.l +++ b/src/code.l @@ -298,6 +298,7 @@ static void addVariable() g_codeVarList.append(new CodeVarDef(g_cvd)); } } + //printf("g_codeVarList.count()=%d\n",g_codeVarList.count()); } } @@ -328,6 +329,7 @@ static void addParameter() g_codeParmList.append(new CodeVarDef(g_cvd)); } } + //printf("g_codeParmList.count()=%d\n",g_codeParmList.count()); } } @@ -747,7 +749,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" . { g_code->codify(yytext); } -\\\n { +\\[\r]?\n { codifyLines(yytext); } \n/.*\n { @@ -817,6 +819,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" CodeClassDef *cd=new CodeClassDef(g_ccd); g_codeClassList.append(cd); g_codeClassDict.insert(cd->name,cd); + //printf("g_codeClassList.count()=%d\n",g_codeClassList.count()); } BEGIN( Body ); } @@ -960,7 +963,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" g_lastStringContext=YY_START; BEGIN( SkipString ); } -[^\"\\\n]* { +[^\"\\\r\n]* { g_code->codify(yytext); } "//"|"/*" { @@ -1448,8 +1451,8 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, bool exBlock, const char *exName,FileDef *fd, int startLine,int endLine,bool inlineFragment) { - g_code = new OutputList(&ol); if (s.isEmpty()) return; + g_code = new OutputList(&ol); g_inputString = s; g_inputPosition = 0; g_currentFontClass = 0; diff --git a/src/config.h b/src/config.h index a5661f4..81e6a4e 100644 --- a/src/config.h +++ b/src/config.h @@ -1,4 +1,4 @@ -/* This file was generated by configgen on Sat Aug 5 20:49:38 2000 +/* This file was generated by configgen on Sat Aug 12 16:16:35 2000 * from config_templ.h * * DO NOT EDIT! @@ -41,7 +41,6 @@ struct Config static QCString projectNumber; // the number of the project static QCString outputDir; // the global output directory static QCString outputLanguage; // the output language - static bool noIndexFlag; // generate condensed index flag static bool extractAllFlag; // generate docs for all classes flag static bool extractPrivateFlag; // generate docs for private members flag static bool extractStaticFlag; // generate docs for static members flag @@ -92,6 +91,7 @@ struct Config static QCString htmlStyleSheet; // user defined cascading style sheet 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 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 54f168a..75a4223 100644 --- a/src/config.l +++ b/src/config.l @@ -1,4 +1,4 @@ -/* This file was generated by configgen on Sun Aug 6 16:28:57 2000 +/* This file was generated by configgen on Sun Aug 13 14:05:26 2000 * from config_templ.l * * DO NOT EDIT! @@ -78,7 +78,6 @@ QCString Config::projectName; QCString Config::projectNumber; QCString Config::outputDir; QCString Config::outputLanguage = "English"; -bool Config::noIndexFlag = FALSE; bool Config::extractAllFlag = FALSE; bool Config::extractPrivateFlag = FALSE; bool Config::extractStaticFlag = FALSE; @@ -129,6 +128,7 @@ QCString Config::footerFile; QCString Config::htmlStyleSheet; bool Config::htmlAlignMemberFlag = TRUE; bool Config::htmlHelpFlag = FALSE; +bool Config::noIndexFlag = FALSE; bool Config::generateLatex = TRUE; QCString Config::latexOutputDir = "latex"; bool Config::compactLatexFlag = FALSE; @@ -332,7 +332,6 @@ static void readIncludeFile(const char *incName) "PROJECT_NUMBER"[ \t]*"=" { BEGIN(GetString); s=&Config::projectNumber; s->resize(0); } "OUTPUT_DIRECTORY"[ \t]*"=" { BEGIN(GetString); s=&Config::outputDir; s->resize(0); } "OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&Config::outputLanguage; s->resize(0); } -"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; } "EXTRACT_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; } "EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; } "EXTRACT_STATIC"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractStaticFlag; } @@ -393,6 +392,7 @@ static void readIncludeFile(const char *incName) "HTML_STYLESHEET"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlStyleSheet; s->resize(0); } "HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; } "GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; } +"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; } "GENERATE_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateLatex; } "LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); } "COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; } @@ -465,7 +465,7 @@ static void readIncludeFile(const char *incName) else { ConfigFileState *fs=includeStack.pop(); - pclose(fs->filePtr); + fclose(fs->filePtr); YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER; yy_switch_to_buffer( fs->oldState ); yy_delete_buffer( oldBuf ); @@ -554,7 +554,6 @@ void dumpConfig() printf("projectNumber=`%s'\n",Config::projectNumber.data()); printf("outputDir=`%s'\n",Config::outputDir.data()); printf("outputLanguage=`%s'\n",Config::outputLanguage.data()); - printf("noIndexFlag=`%d'\n",Config::noIndexFlag); printf("extractAllFlag=`%d'\n",Config::extractAllFlag); printf("extractPrivateFlag=`%d'\n",Config::extractPrivateFlag); printf("extractStaticFlag=`%d'\n",Config::extractStaticFlag); @@ -679,6 +678,7 @@ void dumpConfig() printf("htmlStyleSheet=`%s'\n",Config::htmlStyleSheet.data()); printf("htmlAlignMemberFlag=`%d'\n",Config::htmlAlignMemberFlag); printf("htmlHelpFlag=`%d'\n",Config::htmlHelpFlag); + printf("noIndexFlag=`%d'\n",Config::noIndexFlag); printf("# configuration options related to the LaTeX output\n"); printf("generateLatex=`%d'\n",Config::generateLatex); printf("latexOutputDir=`%s'\n",Config::latexOutputDir.data()); @@ -790,7 +790,6 @@ void Config::init() Config::projectNumber.resize(0); Config::outputDir.resize(0); Config::outputLanguage = "English"; - Config::noIndexFlag = FALSE; Config::extractAllFlag = FALSE; Config::extractPrivateFlag = FALSE; Config::extractStaticFlag = FALSE; @@ -841,6 +840,7 @@ void Config::init() Config::htmlStyleSheet.resize(0); Config::htmlAlignMemberFlag = TRUE; Config::htmlHelpFlag = FALSE; + Config::noIndexFlag = FALSE; Config::generateLatex = TRUE; Config::latexOutputDir = "latex"; Config::compactLatexFlag = FALSE; @@ -1008,17 +1008,6 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; - t << "# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n"; - t << "# top of each HTML page. The value NO (the default) enables the index and \n"; - t << "# the value YES disables it. \n"; - t << "\n"; - } - t << "DISABLE_INDEX = "; - writeBoolValue(t,Config::noIndexFlag); - t << "\n"; - if (!sl) - { - t << "\n"; t << "# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n"; t << "# documentation are documented, even if no documentation was available. \n"; t << "# Private class members and static file members will be hidden unless \n"; @@ -1610,6 +1599,17 @@ void writeTemplateConfig(QFile *f,bool sl) if (!sl) { t << "\n"; + t << "# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n"; + t << "# top of each HTML page. The value NO (the default) enables the index and \n"; + t << "# the value YES disables it. \n"; + t << "\n"; + } + t << "DISABLE_INDEX = "; + writeBoolValue(t,Config::noIndexFlag); + t << "\n"; + if (!sl) + { + t << "\n"; } t << "#---------------------------------------------------------------------------\n"; t << "# configuration options related to the LaTeX output\n"; diff --git a/src/definition.h b/src/definition.h index cf59b0a..bc8c6c7 100644 --- a/src/definition.h +++ b/src/definition.h @@ -101,7 +101,11 @@ class Definition void writeSourceRefs(OutputList &ol,const char *scopeName); void addSourceReference(MemberDef *d); - void setRefItems(int todoId,int testId) { m_todoId=todoId; m_testId=testId; } + void setRefItems(int todoId,int testId) + { + if (todoId!=0) m_todoId=todoId; + if (testId!=0) m_testId=testId; + } int todoId() const { return m_todoId; } int testId() const { return m_testId; } diff --git a/src/doc.l b/src/doc.l index 4aa17c8..935b531 100644 --- a/src/doc.l +++ b/src/doc.l @@ -881,7 +881,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") outDoc->writeString(c); } "\\postheader"/{BN} -"\\functionindex"/{BN} { writeMemberList(*outDoc); } +"\\functionindex"/{BN} { writeMemberList(*outDoc,FALSE); } "\\classhierarchy"/{BN} { writeClassHierarchy(*outDoc); } "\\annotatedclasslist"/{BN} { writeAnnotatedClassList(*outDoc); } "\\headerfilelist"/{BN} { /*TODO: fix this writeHeaderFileList(*outDoc); */ } @@ -1636,7 +1636,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") BEGIN( DocCodeBlock ); } {CMD}"endcode"/[^a-z_A-Z0-9] { - warn(yyFileName,yyLineNr,"Warning: \\endcode without

     or \\code "
    +  					  warn(yyFileName,yyLineNr,"Warning: \\endcode without \\code "
         					       "in the documentation."); 
     					}
     					
    @@ -1675,12 +1675,6 @@ DOCPARAM  ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
     					  outDoc->endCodeFragment();
     					  BEGIN( DocScan ); 
     					}
    -""	{ 
    -				          parseCode(*outDoc,className,codeBlock,exampleDoc,exampleName);
    -					  //printf("Code block\n-------------\n%s\n--------------\n",codeBlock.data());
    -					  outDoc->endCodeFragment();
    -					  BEGIN( DocScan ); 
    -					}
     {CMD}("e"|"em"|"a"){BN}+       { BEGIN( DocEmphasis ); }
     {CMD}"b"{BN}+			{ BEGIN( DocBold ); }
     {CMD}("c"|"p"){BN}+            { BEGIN( DocCode ); }
    @@ -1781,17 +1775,8 @@ DOCPARAM  ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
                                               /*restoreOutputListState();*/
     					  outDoc->popGeneratorState();
     					}
    -"<"{PRE}{ATTR}">"			{ 
    -  					  outDoc->startCodeFragment();
    -  					  codeBlock.resize(0);
    -					  BEGIN( DocCodeBlock ); 
    -					}
    -""		 	{ 
    -  					  warn(yyFileName,yyLineNr,
    -                                               "Warning: 
    without
     or \\code"
    -    					       "in the documentation."
    -                                              ); 
    -					}
    +"<"{PRE}{ATTR}">"		{ outDoc->startPreFragment(); }
    +""	        { outDoc->endPreFragment(); }
     "<"{SUB}{ATTR}">"		{ outDoc->startSubscript(); }
     ""		{ outDoc->endSubscript(); }
     "<"{SUP}{ATTR}">"		{ outDoc->startSuperscript(); }
    @@ -2112,6 +2097,7 @@ void parseDocument(OutputList &ol,const QCString &docString)
       includeFileOffset=0;
       includeFileLength=0;
       currentListIndent.clear();
    +  listIndentStack.clear();
       if (!docString) return;
       linkRef  = "";
       linkText = "";
    diff --git a/src/doxygen.cpp b/src/doxygen.cpp
    index 2a788f0..c18ba20 100644
    --- a/src/doxygen.cpp
    +++ b/src/doxygen.cpp
    @@ -55,6 +55,7 @@
     #include "rtfgen.h"
     #include "xml.h"
     #include "reflist.h"
    +#include "page.h"
     
     #if defined(_MSC_VER) || defined(__BORLANDC__)
     #define popen _popen
    @@ -64,8 +65,8 @@
     // lists
     ClassList      classList;          // all documented classes
     NamespaceList  namespaceList;      // all namespaces
    -PageList       exampleList;        // all example files
    -PageList       pageList;           // all related documentation pages
    +//PageList       *exampleList = new PageList; // all example files
    +//PageList       *pageList = new PageList; // all related documentation pages
     MemberNameList memberNameList;     // class member + related functions
     MemberNameList functionNameList;   // all unrelated functions
     FileNameList   inputNameList;      // all input files
    @@ -74,13 +75,13 @@ GroupList      groupList;          // all groups
     FormulaList    formulaList;        // all formulas
     
     // dictionaries
    -PageDict       pageDict(1009);          // all doc pages
    -PageDict       exampleDict(1009);       // all examples
    +PageSDict      *pageSDict = new PageSDict(1009);          // all doc pages
    +PageSDict      *exampleSDict = new PageSDict(1009);       // all examples
     ClassDict      classDict(1009);         // all documented classes
     NamespaceDict  namespaceDict(257);      // all documented namespaces
     MemberNameDict memberNameDict(10007);   // all class member names
     MemberNameDict functionNameDict(10007); // all functions
    -StringDict     substituteDict(1009);    // class name substitutes
    +//StringDict     substituteDict(1009);    // class name substitutes
     SectionDict    sectionDict(257);        // all page sections
     StringDict     excludeNameDict(1009);   // sections
     FileNameDict   *inputNameDict;          // sections
    @@ -106,21 +107,19 @@ void clearAll()
     {
       classList.clear();       
       namespaceList.clear();   
    -  exampleList.clear();     
    -  pageList.clear();        
    +  pageSDict->clear();         
    +  exampleSDict->clear();      
       memberNameList.clear();  
       functionNameList.clear();
       inputNameList.clear();   
       inputFiles.clear();      
       groupList.clear();       
       formulaList.clear();     
    -  pageDict.clear();         
    -  exampleDict.clear();      
       classDict.clear();        
       namespaceDict.clear();     
       memberNameDict.clear();  
       functionNameDict.clear();
    -  substituteDict.clear();   
    +  //substituteDict.clear();   
       sectionDict.clear();       
       inputNameDict->clear();    
       excludeNameDict.clear();  
    @@ -180,7 +179,7 @@ static void addRelatedPage(const char *name,const QCString &ptitle,
                               )
     {
       PageInfo *pi=0;
    -  if ((pi=pageDict[name]))
    +  if ((pi=pageSDict->find(name)))
       {
         //warn("Warning: Page %s was already documented. Ignoring documentation "
         //     "at line %d of %s\n",root->name.data(),root->startLine,
    @@ -208,8 +207,8 @@ static void addRelatedPage(const char *name,const QCString &ptitle,
           pageName=pi->name.lower();
         setFileNameForSections(anchors,pageName);
     
    -    pageList.append(pi);
    -    pageDict.insert(baseName,pi);
    +    pageSDict->append(baseName,pi);
    +    
         if (!pi->title.isEmpty())
         {
           //outputList->writeTitle(pi->name,pi->title);
    @@ -2065,7 +2064,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
             // look in the outer scope for a match
           {
             Debug::print(
    -            Debug::Classes,0,"    baseClass %s of %s found (%s and %s)\n",
    +            Debug::Classes,0,"    class relation %s inherited by %s found (%s and %s)\n",
                 baseClassName.data(),
                 root->name.data(),
                 (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
    @@ -2126,9 +2125,27 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
                       root->name!=fName;
                   }
                 }
    +            if (fd && !found) // and in the global namespace
    +            {
    +              ClassList *cl = fd->getUsedClasses();
    +              if (cl)
    +              {
    +                ClassListIterator cli(*cl);
    +                ClassDef *ucd;
    +                for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
    +                {
    +                  if (rightScopeMatch(ucd->name(),bi->name))
    +                  {
    +                    baseClass = ucd;
    +                    found = TRUE;
    +                  }
    +                }
    +              }
    +            }
               }
               if (!found && nd) // class is inside a namespace
               {
    +            //printf("    class %s inside namespace %s\n",cd->name().data(),nd->name().data());
                 NamespaceList *nl = nd->getUsedNamespaces();
                 QCString fName = nd->name()+"::"+baseClassName;
                 found = (baseClass=getResolvedClass(fName))!=0 && root->name!=fName;
    @@ -2143,6 +2160,41 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
                       root->name!=fName;
                   }
                 }
    +            if (!found) // also check imported classes within this namespace
    +            {
    +              ClassList *cl = nd->getUsedClasses();
    +              if (cl)
    +              {
    +                ClassListIterator cli(*cl);
    +                ClassDef *ucd;
    +                for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
    +                {
    +                  if (rightScopeMatch(ucd->name(),bi->name))
    +                  {
    +                    baseClass = ucd;
    +                    found = TRUE;
    +                  }
    +                }
    +              }
    +            }
    +            // TODO: check any inbetween namespaces as well!
    +            if (fd && !found) // and in the global namespace
    +            {
    +              ClassList *cl = fd->getUsedClasses();
    +              if (cl)
    +              {
    +                ClassListIterator cli(*cl);
    +                ClassDef *ucd;
    +                for (cli.toFirst(); (ucd=cli.current()) && !found; ++cli)
    +                {
    +                  if (rightScopeMatch(ucd->name(),bi->name))
    +                  {
    +                    baseClass = ucd;
    +                    found = TRUE;
    +                  }
    +                }
    +              }
    +            }
               }
             }
             if (found)
    @@ -2334,11 +2386,11 @@ static void addTodoTestReferences()
         addRefItem(gd->todoId(),gd->testId(),"group",gd->getOutputFileBase(),gd->name());
         gd=groupList.next();
       }
    -  PageInfo *pi=pageList.first();
    -  while (pi)
    +  PageSDictIterator pdi(*pageSDict);
    +  PageInfo *pi=0;
    +  for (pdi.toFirst();(pi=pdi.current());++pdi)
       {
         addRefItem(pi->todoId,pi->testId,"page",pi->name,pi->title);
    -    pi=pageList.next();
       }
       MemberNameListIterator mnli(memberNameList);
       MemberName *mn=0;
    @@ -4190,7 +4242,7 @@ static void generateClassDocs()
       msg("Generating member index...\n");
       writeMemberIndex(*outputList);
     
    -  if (exampleList.count()>0)
    +  if (exampleSDict->count()>0)
       {
         msg("Generating example index...\n");
       }
    @@ -4544,8 +4596,9 @@ static void resolveUserReferences()
     
     static void generatePageDocs()
     {
    -  PageInfo *pi=pageList.first();
    -  while (pi)
    +  PageSDictIterator pdi(*pageSDict);
    +  PageInfo *pi=0;
    +  for (pdi.toFirst();(pi=pdi.current());++pdi)
       {
         msg("Generating docs for page %s...\n",pi->name.data());
         outputList->disable(OutputGenerator::Man);
    @@ -4567,7 +4620,6 @@ static void generatePageDocs()
         outputList->endTextBlock();
         endFile(*outputList);
         outputList->enable(OutputGenerator::Man);
    -    pi=pageList.next();
       }
     }
     
    @@ -4580,7 +4632,7 @@ static void buildExampleList(Entry *root)
       {
         if (!root->name.isEmpty()) 
         {
    -      if (exampleDict[root->name])
    +      if (exampleSDict->find(root->name))
           {
             warn(root->fileName,root->startLine,
                  "Warning: Example %s was already documented. Ignoring "
    @@ -4595,8 +4647,7 @@ static void buildExampleList(Entry *root)
             setFileNameForSections(root->anchors,
                                    convertFileName(pi->name)+"-example"
                                   );
    -        exampleList.inSort(pi);
    -        exampleDict.insert(root->name,pi);
    +        exampleSDict->inSort(root->name,pi);
           }
         }
       }
    @@ -4621,8 +4672,9 @@ static void buildExampleList(Entry *root)
     static void generateExampleDocs()
     {
       outputList->disable(OutputGenerator::Man);
    -  PageInfo *pi=exampleList.first();
    -  while (pi)
    +  PageSDictIterator pdi(*exampleSDict);
    +  PageInfo *pi=0;
    +  for (pdi.toFirst();(pi=pdi.current());++pdi)
       {
         msg("Generating docs for example %s...\n",pi->name.data());
         QCString n=convertFileName(pi->name)+"-example";
    @@ -4632,7 +4684,6 @@ static void generateExampleDocs()
         endTitle(*outputList,n,0);
         parseExample(*outputList,pi->doc+"\n\\include "+pi->name,pi->name);
         endFile(*outputList);
    -    pi=exampleList.next();
       }
       outputList->enable(OutputGenerator::Man);
     }
    diff --git a/src/doxygen.h b/src/doxygen.h
    index f4cd097..6229ac5 100644
    --- a/src/doxygen.h
    +++ b/src/doxygen.h
    @@ -33,34 +33,6 @@
     #include "section.h"
     #include "membergroup.h"
     
    -struct PageInfo
    -{
    -  PageInfo(const char *f, int l,const char *n,const char *d,const char *t) :
    -     defFileName(f), defLine(l), name(n), doc(d), title(t), 
    -     todoId(0), testId(0) {}
    -
    -  // where the page definition was found
    -  QCString defFileName;
    -  int defLine;
    -
    -  // contents of the page
    -  QCString name;
    -  QCString doc;
    -  QCString title;
    -
    -  // ids
    -  int todoId;
    -  int testId;
    -};
    -
    -class PageList : public QList 
    -{
    -  int compareItems(GCI i1,GCI i2)
    -  {
    -    return stricmp(((PageInfo *)i1)->name,((PageInfo *)i2)->name);
    -  }
    -};
    -
     class BufStr : public QCString
     {
       public:
    @@ -87,35 +59,37 @@ class BufStr : public QCString
         const int spareRoom; // 10Kb extra room to avoid frequent resizing
     };
     
    +class PageSList;
    +class PageSDict;
    +class PageInfo;
    +
    +extern PageSDict *exampleSDict;
    +extern PageSDict *pageSDict;
    +extern PageInfo *mainPage;
    +extern FileNameDict *includeNameDict;
    +extern FileNameDict *exampleNameDict;
    +extern FileNameDict *inputNameDict;
    +extern FileNameDict *imageNameDict;
    +
     typedef QList    StringList;
     typedef QDict     FileDict;
     typedef QDict    StringDict;
    -typedef QDict    PageDict;
     typedef QDict    GroupDict;
     
    -extern const char * getOverloadDocs();
     extern ClassList classList;
     extern ClassDict classDict;
     extern QStrList tagfileList;
    -extern PageList exampleList;
    -extern PageDict exampleDict;
    -extern PageList pageList;
    -extern PageDict pageDict;
     extern MemberNameList memberNameList;
     extern MemberNameList functionNameList;
     extern MemberNameDict memberNameDict;
     extern MemberNameDict functionNameDict;
    -extern StringDict substituteDict;
    +//extern StringDict substituteDict;
     extern FileList fileList;
     extern FileDict fileDict;
     extern ClassDef unrelatedClass; 
     extern QTextStream tagFile;
     extern SectionDict sectionDict;
     extern FileNameList inputNameList;
    -extern FileNameDict *includeNameDict;
    -extern FileNameDict *exampleNameDict;
    -extern FileNameDict *inputNameDict;
    -extern FileNameDict *imageNameDict;
     extern StringDict typedefDict;
     extern GroupList groupList;
     extern GroupDict groupDict;
    @@ -124,7 +98,6 @@ extern NamespaceDict namespaceDict;
     extern FormulaList formulaList;
     extern FormulaDict formulaDict;
     extern FormulaDict formulaNameDict;
    -extern PageInfo *mainPage;
     extern StringDict tagDestinationDict; 
     extern QIntDict memberHeaderDict; // dictionary of the member groups heading
     extern QIntDict memberDocDict;    // dictionary of the member groups heading
    @@ -143,4 +116,6 @@ extern int documentedNamespaceMembers;
     extern int documentedIncludeFiles;
     extern QCString spaces;
     
    +extern const char * getOverloadDocs();
    +
     #endif
    diff --git a/src/doxygen.pro.in b/src/doxygen.pro.in
    index c219073..417dea8 100644
    --- a/src/doxygen.pro.in
    +++ b/src/doxygen.pro.in
    @@ -26,7 +26,7 @@ HEADERS      =	doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \
     		translator_nl.h translator_se.h translator_cz.h translator_fr.h \
     		translator_it.h formula.h debug.h membergroup.h htmlhelp.h \
                     translator_ru.h translator_pl.h dot.h rtfgen.h xml.h xml_dtd.h \
    -                reflist.h
    +                reflist.h page.h sortdict.h
     SOURCES      =	doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \
                     memberdef.cpp membername.cpp index.cpp memberlist.cpp \
     		entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
    diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
    index f9b5075..4667631 100644
    --- a/src/htmlgen.cpp
    +++ b/src/htmlgen.cpp
    @@ -575,7 +575,7 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d,
       t << ":\n

    " << endl - << "

    " << endl; + << "" << endl; d.writeImageMap(t,dir,fileName); } diff --git a/src/htmlgen.h b/src/htmlgen.h index 9fd1a84..6c6b40c 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -124,6 +124,8 @@ class HtmlGenerator : public OutputGenerator // to prevent an extra // blank line // (with netscape) + void startPreFragment() { t << "

    "; }
    +    void endPreFragment()   { t << "
    "; } void startCodeLine() { col=0; } void endCodeLine() { codify("\n"); } void writeBoldString(const char *text) diff --git a/src/index.cpp b/src/index.cpp index c404f35..bd4810b 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -34,9 +34,14 @@ #include "language.h" #include "htmlhelp.h" #include "dot.h" +#include "page.h" //---------------------------------------------------------------------------- +static bool g_memberIndexLetterUsed[256]; +static bool g_fileIndexLetterUsed[256]; +static bool g_namespaceIndexLetterUsed[256]; + //---------------------------------------------------------------------------- // strips w from s iff s starts with w @@ -931,9 +936,10 @@ void writeAnnotatedIndex(OutputList &ol) //---------------------------------------------------------------------------- -void writeMemberList(OutputList &ol) +void writeMemberList(OutputList &ol,bool useSections) { - ol.startItemList(); + bool first = TRUE; + char lastChar = 0; MemberName *mn=memberNameList.first(); while (mn) { @@ -943,9 +949,7 @@ void writeMemberList(OutputList &ol) while (md && !found) { ClassDef *cd; - if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) && - //!md->isReference() && md->hasDocumentation() && - // md->name()[0]!='@' && + if ( md->isLinkableInProject() && (cd=md->getClassDef()) && cd->isLinkableInProject() @@ -958,8 +962,28 @@ void writeMemberList(OutputList &ol) } if (found) { + if (useSections) + { + QCString name = mn->memberName(); + if (tolower(name.at(0))!=lastChar) + { + if (!first) ol.endItemList(); + char cs[2]; + lastChar=cs[0]=tolower(name.at(0));cs[1]='\0'; + QCString anchor=(QCString)"index_"+cs; + QCString title=(QCString)"- "+cs+" -"; + ol.writeSection(anchor,title,TRUE); + ol.startItemList(); + first=FALSE; + } + } + else if (first) + { + first=FALSE; + ol.startItemList(); + } ol.writeListItem(); - ol.docify(substituteClassNames(mn->memberName())); + ol.docify(mn->memberName()); if (isFunc) ol.docify("()"); ol.writeString("\n"); @@ -969,8 +993,7 @@ void writeMemberList(OutputList &ol) while (md) { ClassDef *cd=md->getClassDef(); - if (//cd && (md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) && - //!md->isReference() && md->hasDocumentation() && + if ( md->isLinkableInProject() && prevName!=cd->displayName() && cd->isLinkableInProject() @@ -997,44 +1020,32 @@ void writeMemberList(OutputList &ol) int countClassMembers() { + int i=0;for (i=0;i<256;i++) g_memberIndexLetterUsed[i]=FALSE; int count=0; MemberName *mn=memberNameList.first(); while (mn) { MemberDef *md=mn->first(); bool found=FALSE; - MemberDef *otherMd=0; ClassDef *cd; while (md && !found) { - if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) && - //!md->isReference() && !md->isRelated() && md->hasDocumentation() && - //md->name()[0]!='@' && (cd=md->getClassDef()) && cd->isLinkable()) + if ( md->isLinkableInProject() && - !md->isRelated() && (cd=md->getClassDef()) && cd->isLinkableInProject() ) { - if (!md->isRelated()) - otherMd=md; - if (md->isRelated()) - found=TRUE; + found=TRUE; } - - // otherMd=md; - //if (//(md->isFriend() || md->protection()!=Private || Config::extractPrivateFlag) && - // //!md->isReference() && md->isRelated() && md->hasDocumentation() && - // //md->name()[0]!='@' && (cd=md->getClassDef()) && cd->isLinkable() - // md->isLinkableInProject() && - // md->isRelated() && - // (cd=md->getClassDef()) && - // cd->isLinkableInProject() - // ) - // found=TRUE; md=mn->next(); } - if (found || otherMd) count++; + if (found) + { + QCString n = mn->memberName(); + if (!n.isEmpty()) g_memberIndexLetterUsed[tolower(n.at(0))]=TRUE; + count++; + } mn=memberNameList.next(); } return count; @@ -1042,30 +1053,59 @@ int countClassMembers() //---------------------------------------------------------------------------- +void writeQuickMemberIndex(OutputList &ol,bool *charUsed) +{ + bool first=TRUE; + int i; + ol.startCenter(); + for (i=33;i<127;i++) + { + QCString anchor="index_"; + char is[2];is[0]=(char)i;is[1]='\0'; + if (charUsed[i]) + { + if (!first) + { + ol.writeString(" | "); + } + ol.startTextLink(0,anchor+is); + ol.writeString(is); + ol.endTextLink(); + first=FALSE; + } + } + ol.endCenter(); + ol.newParagraph(); +} + +//---------------------------------------------------------------------------- + void writeMemberIndex(OutputList &ol) { - if (memberNameList.count()==0) return; + if (documentedMembers==0) return; ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - //ol.disable(OutputGenerator::Man); - //ol.disable(OutputGenerator::Latex); startFile(ol,"functions","Compound Member Index"); startTitle(ol,0); parseText(ol,Config::projectName+" "+theTranslator->trCompoundMembers()); endTitle(ol,0,0); + bool quickIndex = documentedMembers>50; + if (quickIndex) + { + writeQuickMemberIndex(ol,g_memberIndexLetterUsed); + } parseText(ol,theTranslator->trCompoundMembersDescription(Config::extractAllFlag)); - writeMemberList(ol); + writeMemberList(ol,quickIndex); endFile(ol); - //ol.enable(OutputGenerator::Latex); - //ol.enable(OutputGenerator::Man); ol.popGeneratorState(); } //---------------------------------------------------------------------------- -void writeFileMemberList(OutputList &ol) +void writeFileMemberList(OutputList &ol,bool useSections) { - ol.startItemList(); + char lastChar=0; + bool first=TRUE; MemberName *mn=functionNameList.first(); while (mn) { @@ -1079,15 +1119,32 @@ void writeFileMemberList(OutputList &ol) if (fd && hasDocs && md->isLinkableInProject() - //!md->isReference() && - //md->hasDocumentation() && - //md->name()[0]!='@' ) found=TRUE; else md=mn->next(); } if (found) // function is documented { + if (useSections) + { + QCString name = mn->memberName(); + if (tolower(name.at(0))!=lastChar) + { + if (!first) ol.endItemList(); + char cs[2]; + lastChar=cs[0]=tolower(name.at(0));cs[1]='\0'; + QCString anchor=(QCString)"index_"+cs; + QCString title=(QCString)"- "+cs+" -"; + ol.writeSection(anchor,title,TRUE); + ol.startItemList(); + first=FALSE; + } + } + else if (first) + { + first=FALSE; + ol.startItemList(); + } ol.writeListItem(); ol.docify(md->name()); if (md->isFunction()) ol.docify("()"); @@ -1103,9 +1160,6 @@ void writeFileMemberList(OutputList &ol) md->getFileDef()->isLinkableInProject(); if (fd && hasDocs && md->isLinkableInProject() && - //!md->isReference() && - //md->hasDocumentation() && - //md->name()[0]!='@' && prevName!=fd->name()) { if (count==0) @@ -1113,9 +1167,6 @@ void writeFileMemberList(OutputList &ol) else ol.docify(", "); QCString baseName=fd->name().copy(); - //int s; - //if ((s=baseName.findRev("/"))!=-1) - // baseName=baseName.right(baseName.length()-s-1); ol.writeObjectLink(fd->getReference(), fd->getOutputFileBase(),md->anchor(), baseName); count++; @@ -1131,8 +1182,10 @@ void writeFileMemberList(OutputList &ol) //---------------------------------------------------------------------------- -void writeNamespaceMemberList(OutputList &ol) +void writeNamespaceMemberList(OutputList &ol,bool useSections) { + char lastChar=0; + bool first=TRUE; ol.startItemList(); MemberName *mn=functionNameList.first(); while (mn) @@ -1149,6 +1202,26 @@ void writeNamespaceMemberList(OutputList &ol) } if (found) // member is documented and in a documented namespace { + if (useSections) + { + QCString name = mn->memberName(); + if (tolower(name.at(0))!=lastChar) + { + if (!first) ol.endItemList(); + char cs[2]; + lastChar=cs[0]=tolower(name.at(0));cs[1]='\0'; + QCString anchor=(QCString)"index_"+cs; + QCString title=(QCString)"- "+cs+" -"; + ol.writeSection(anchor,title,TRUE); + ol.startItemList(); + first=FALSE; + } + } + else if (first) + { + first=FALSE; + ol.startItemList(); + } ol.writeListItem(); ol.docify(md->name()); if (md->isFunction()) ol.docify("()"); @@ -1185,6 +1258,7 @@ void writeNamespaceMemberList(OutputList &ol) int countNamespaceMembers() { + int i=0;for (i=0;i<256;i++) g_namespaceIndexLetterUsed[i]=FALSE; int count=0; MemberName *mn=functionNameList.first(); while (mn) @@ -1195,7 +1269,11 @@ int countNamespaceMembers() { NamespaceDef *nd=md->getNamespaceDef(); if (nd && nd->isLinkableInProject() && md->isLinkableInProject()) + { + QCString n = mn->memberName(); + if (!n.isEmpty()) g_namespaceIndexLetterUsed[tolower(n.at(0))]=TRUE; found=TRUE; + } else md=mn->next(); } @@ -1209,6 +1287,7 @@ int countNamespaceMembers() int countFileMembers() { + int i=0;for (i=0;i<256;i++) g_fileIndexLetterUsed[i]=FALSE; int count=0; MemberName *mn=functionNameList.first(); while (mn) @@ -1222,7 +1301,11 @@ int countFileMembers() (fd=md->getFileDef()) && fd->isLinkableInProject() ) + { + QCString n = mn->memberName(); + if (!n.isEmpty()) g_fileIndexLetterUsed[tolower(n.at(0))]=TRUE; found=TRUE; + } else md=mn->next(); } @@ -1243,8 +1326,13 @@ void writeFileMemberIndex(OutputList &ol) startTitle(ol,0); parseText(ol,Config::projectName+" "+theTranslator->trFileMembers()); endTitle(ol,0,0); + bool quickIndex = documentedMembers>50; + if (quickIndex) + { + writeQuickMemberIndex(ol,g_fileIndexLetterUsed); + } parseText(ol,theTranslator->trFileMembersDescription(Config::extractAllFlag)); - writeFileMemberList(ol); + writeFileMemberList(ol,quickIndex); endFile(ol); ol.popGeneratorState(); } @@ -1256,17 +1344,18 @@ void writeNamespaceMemberIndex(OutputList &ol) if (documentedNamespaceMembers==0) return; ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - //ol.disable(OutputGenerator::Man); - //ol.disable(OutputGenerator::Latex); startFile(ol,"namespacemembers","Namespace Member Index"); startTitle(ol,0); parseText(ol,Config::projectName+" "+theTranslator->trNamespaceMembers()); endTitle(ol,0,0); + bool quickIndex = documentedMembers>50; + if (quickIndex) + { + writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed); + } parseText(ol,theTranslator->trNamespaceMemberDescription(Config::extractAllFlag)); - writeNamespaceMemberList(ol); + writeNamespaceMemberList(ol,quickIndex); endFile(ol); - //ol.enable(OutputGenerator::Latex); - //ol.enable(OutputGenerator::Man); ol.popGeneratorState(); } @@ -1360,7 +1449,7 @@ void writeNamespaceMemberIndex(OutputList &ol) void writeExampleIndex(OutputList &ol) { - if (exampleList.count()==0) return; + if (exampleSDict->count()==0) return; ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); startFile(ol,"examples","Example Index"); @@ -1382,8 +1471,9 @@ void writeExampleIndex(OutputList &ol) //ol.newParagraph(); ol.endTextBlock(); ol.startIndexList(); - PageInfo *pi=exampleList.first(); - while (pi) + PageSDictIterator pdi(*exampleSDict); + PageInfo *pi=0; + for (pdi.toFirst();(pi=pdi.current());++pdi) { ol.writeListItem(); QCString n=convertFileName(pi->name)+"-example"; @@ -1398,7 +1488,6 @@ void writeExampleIndex(OutputList &ol) if (hasHtmlHelp) htmlHelp->addContentsItem(pi->name,n); } ol.writeString("\n"); - pi=exampleList.next(); } ol.endIndexList(); if (hasHtmlHelp) @@ -1414,7 +1503,7 @@ void writeExampleIndex(OutputList &ol) void writePageIndex(OutputList &ol) { - if (pageList.count()==0) return; + if (pageSDict->count()==0) return; ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); startFile(ol,"pages","Page Index"); @@ -1436,8 +1525,9 @@ void writePageIndex(OutputList &ol) //ol.newParagraph(); ol.endTextBlock(); ol.startIndexList(); - PageInfo *pi=pageList.first(); - while (pi) + PageSDictIterator pdi(*pageSDict); + PageInfo *pi=0; + for (pdi.toFirst();(pi=pdi.current());++pdi) { QCString pageName,pageTitle; @@ -1457,7 +1547,6 @@ void writePageIndex(OutputList &ol) ol.writeEndAnnoItem(pageName); ol.writeString("\n"); if (hasHtmlHelp) htmlHelp->addContentsItem(pageTitle,pageName); - pi=pageList.next(); } ol.endIndexList(); if (hasHtmlHelp) @@ -1699,7 +1788,7 @@ void writeIndex(OutputList &ol) parseText(ol,projPrefix+theTranslator->trFileIndex()); ol.endIndexSection(isFileIndex); } - if (pageList.count()>0) + if (pageSDict->count()>0) { ol.startIndexSection(isPageIndex); parseText(ol,projPrefix+theTranslator->trPageIndex()); @@ -1730,13 +1819,13 @@ void writeIndex(OutputList &ol) parseText(ol,projPrefix+theTranslator->trFileDocumentation()); ol.endIndexSection(isFileDocumentation); } - if (exampleList.count()>0) + if (exampleSDict->count()>0) { ol.startIndexSection(isExampleDocumentation); parseText(ol,projPrefix+theTranslator->trExampleDocumentation()); ol.endIndexSection(isExampleDocumentation); } - if (pageList.count()>0) + if (pageSDict->count()>0) { ol.startIndexSection(isPageDocumentation); parseText(ol,projPrefix+theTranslator->trPageDocumentation()); diff --git a/src/index.h b/src/index.h index 8a81d96..1bcf12d 100644 --- a/src/index.h +++ b/src/index.h @@ -52,7 +52,7 @@ void writeSourceIndex(OutputList &ol); void writeAnnotatedIndex(OutputList &ol); void writeAnnotatedClassList(OutputList &ol); void writeMemberIndex(OutputList &ol); -void writeMemberList(OutputList &ol); +void writeMemberList(OutputList &ol,bool useSections); void writeHeaderIndex(OutputList &ol); void writeHeaderFileList(OutputList &ol); void writeExampleIndex(OutputList &ol); diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 757359b..28c7915 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -28,6 +28,7 @@ #include "language.h" #include "version.h" #include "dot.h" +#include "page.h" static QCString filterTitle(const char *s) { @@ -204,6 +205,7 @@ static void writeDefaultHeaderPart1(QTextStream &t) "\\usepackage{fancyhdr}\n" "\\usepackage{graphicx}\n" "\\usepackage{float}\n" + "\\usepackage{alltt}\n" "\\usepackage{doxygen}\n"; if (Config::pdfHyperFlag) { @@ -703,24 +705,24 @@ void LatexGenerator::endIndexSection(IndexSections is) case isExampleDocumentation: { t << "}\n"; - PageInfo *pi=exampleList.first(); + PageSDictIterator pdi(*exampleSDict); + PageInfo *pi=pdi.toFirst(); if (pi) { t << "\\input{" << convertFileName(pi->name) << "-example}\n"; - pi=exampleList.next(); } - while (pi) + for (++pdi;(pi=pdi.current());++pdi) { if (Config::compactLatexFlag) t << "\\input" ; else t << "\\include"; t << "{" << convertFileName(pi->name) << "-example}\n"; - pi=exampleList.next(); } } break; case isPageDocumentation: { t << "}\n"; - PageInfo *pi=pageList.first(); + PageSDictIterator pdi(*pageSDict); + PageInfo *pi=pdi.toFirst(); if (pi) { QCString pageName; @@ -729,9 +731,8 @@ void LatexGenerator::endIndexSection(IndexSections is) else pageName=pi->name.lower(); t << "\\input{" << pageName << "}\n"; - pi=pageList.next(); } - while (pi) + for (++pdi;(pi=pdi.current());++pdi) { if (Config::compactLatexFlag) t << "\\input" ; else t << "\\include"; QCString pageName; @@ -740,7 +741,6 @@ void LatexGenerator::endIndexSection(IndexSections is) else pageName=pi->name.lower(); t << "{" << pageName << "}\n"; - pi=pageList.next(); } } break; @@ -1071,14 +1071,14 @@ void LatexGenerator::addToIndex(const char *s1,const char *s2) void LatexGenerator::writeSection(const char *lab,const char *title,bool sub) { - t << "\\"; - if (sub) t << "subsection{"; else t << "section{"; - docify(title); - t << "}\\label{" << lab << "}" << endl; if (Config::pdfHyperFlag) { t << "\\hypertarget{" << lab << "}{}"; } + t << "\\"; + if (sub) t << "subsection{"; else t << "section{"; + docify(title); + t << "}\\label{" << lab << "}" << endl; } void LatexGenerator::writeSectionRef(const char *,const char *lab, diff --git a/src/latexgen.h b/src/latexgen.h index 7e8a174..b102f76 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -110,6 +110,8 @@ class LatexGenerator : public OutputGenerator void writeAnchor(const char *fileName,const char *name); void startCodeFragment() { t << "\\small\\begin{verbatim}"; } void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; } + void startPreFragment() { t << "\\small\\begin{alltt}"; } + void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl; } void startCodeLine() { col=0; } void endCodeLine() { t << endl; } void writeBoldString(const char *text) diff --git a/src/mangen.h b/src/mangen.h index 09f5b48..7a81bd9 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -106,6 +106,8 @@ class ManGenerator : public OutputGenerator void writeAnchor(const char *,const char *) {} void startCodeFragment(); void endCodeFragment(); + void startPreFragment() { startCodeFragment(); } + void endPreFragment() { endCodeFragment(); } void startCodeLine() {} void endCodeLine() { t << endl; col=0; } void writeBoldString(const char *text) diff --git a/src/memberdef.cpp b/src/memberdef.cpp index f64950f..266c45c 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -234,7 +234,7 @@ MemberDef::MemberDef(const char *df,int dl, const char *t,const char *na,const char *a,const char *e, Protection p,Specifier v,bool s,bool r,MemberType mt, const ArgumentList *tal,const ArgumentList *al - ) : Definition(df,dl,substituteClassNames(na)) + ) : Definition(df,dl,na) { //printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl); classDef=0; @@ -255,8 +255,8 @@ MemberDef::MemberDef(const char *df,int dl, scopeTAL=0; membTAL=0; initLines=0; - type=substituteClassNames(t); - args=substituteClassNames(a); + type=t; + args=a; if (type.isEmpty()) decl=name()+args; else decl=type+" "+name()+args; declLine=0; memberGroup=0; @@ -1025,6 +1025,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ol.startBold(); parseText(ol,theTranslator->trInitialValue()); ol.endBold(); + initParseCodeContext(); ol.startCodeFragment(); parseCode(ol,scopeName,init,FALSE,0); ol.endCodeFragment(); @@ -1400,7 +1401,7 @@ void MemberDef::generateXML(QTextStream &t,Definition *def) scopeName=getNamespaceDef()->name(); t << " <"; - enum { define_t,variable_t,typedef_t,enum_t,function_t } xmlType; + enum { define_t,variable_t,typedef_t,enum_t,function_t } xmlType = function_t; switch (mtype) { case Define: t << "definedef"; xmlType=define_t; break; diff --git a/src/outputgen.h b/src/outputgen.h index a782ada..d2d0d54 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -113,6 +113,8 @@ class OutputGenerator virtual void writeAnchor(const char *fileName,const char *name) = 0; virtual void startCodeFragment() = 0; virtual void endCodeFragment() = 0; + virtual void startPreFragment() = 0; + virtual void endPreFragment() = 0; virtual void startCodeLine() = 0; virtual void endCodeLine() = 0; virtual void writeBoldString(const char *text) = 0; diff --git a/src/outputlist.cpp b/src/outputlist.cpp index 03a5e1e..7f84dc9 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -260,7 +260,7 @@ FORALL1(int a1,a1) FORALL1(DotClassGraph &a1,a1) FORALL1(DotInclDepGraph &a1,a1) FORALL1(DotGfxHierarchyTable &a1,a1) -#if defined(HAS_BOOL_TYPE) +#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) FORALL1(bool a1,a1) FORALL2(bool a1,int a2,a1,a2) FORALL2(bool a1,bool a2,a1,a2) diff --git a/src/outputlist.h b/src/outputlist.h index b177f02..a0e755e 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -186,6 +186,10 @@ class OutputList { forall(&OutputGenerator::startCodeFragment); } void endCodeFragment() { forall(&OutputGenerator::endCodeFragment); } + void startPreFragment() + { forall(&OutputGenerator::startPreFragment); } + void endPreFragment() + { forall(&OutputGenerator::endPreFragment); } void startCodeLine() { forall(&OutputGenerator::startCodeLine); } void endCodeLine() @@ -395,7 +399,7 @@ class OutputList FORALLPROTO1(DotClassGraph &); FORALLPROTO1(DotInclDepGraph &); FORALLPROTO1(DotGfxHierarchyTable &); -#if defined(HAS_BOOL_TYPE) +#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) FORALLPROTO1(bool); FORALLPROTO2(bool,int); FORALLPROTO2(bool,bool); diff --git a/src/page.h b/src/page.h new file mode 100644 index 0000000..11136c9 --- /dev/null +++ b/src/page.h @@ -0,0 +1,58 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2000 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#include "sortdict.h" + +class PageInfo +{ + public: + PageInfo(const char *f, int l,const char *n,const char *d,const char *t) : + defFileName(f), defLine(l), name(n), + doc(d), title(t), todoId(0), testId(0) {} + + // where the page definition was found + QCString defFileName; + int defLine; + + // contents of the page + QCString name; + QCString doc; + QCString title; + + // ids + int todoId; + int testId; +}; + +class PageSDict : public SDict +{ + public: + PageSDict(int size) : SDict(size) {} + ~PageSDict() {} + int compareItems(GCI i1,GCI i2) + { + return stricmp(((PageInfo *)i1)->name,((PageInfo *)i2)->name); + } +}; + +class PageSDictIterator : public SDict::Iterator +{ + public: + PageSDictIterator(const PageSDict &d) : SDict::Iterator(d) {} + ~PageSDictIterator() {} +}; + diff --git a/src/pre.l b/src/pre.l index cf4df3b..f08aaa9 100644 --- a/src/pre.l +++ b/src/pre.l @@ -502,7 +502,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int } else { - resExpr+=substArg; + resExpr+=" "+substArg+" "; } } } @@ -592,7 +592,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos) { // substitute the definition of the macro //printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data()); - expMacro=def->definition.stripWhiteSpace(); + expMacro=" "+def->definition.stripWhiteSpace()+" "; replaced=TRUE; len=l; //printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data()); diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 29db892..8fef647 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -32,6 +32,7 @@ #include "language.h" #include "dot.h" #include "version.h" +#include "page.h" //#define DBG_RTF(x) x; #define DBG_RTF(x) @@ -935,31 +936,31 @@ void RTFGenerator::endIndexSection(IndexSections is) case isExampleDocumentation: { //t << "}\n"; - PageInfo *pi=exampleList.first(); t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl; + PageSDictIterator pdi(*exampleSDict); + PageInfo *pi=pdi.toFirst(); if (pi) { t << "\\par " << Rtf_Style["Reset"] << endl; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << convertFileName(pi->name); t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; - pi=exampleList.next(); } - while (pi) + for (++pdi;(pi=pdi.current());++pdi) { t << "\\par " << Rtf_Style["Reset"] << endl; beginRTFSection(); t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << convertFileName(pi->name); t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; - pi=exampleList.next(); } } break; case isPageDocumentation: { t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl; - PageInfo *pi=pageList.first(); + PageSDictIterator pdi(*pageSDict); + PageInfo *pi=pdi.toFirst(); if (pi) { QCString pageName; @@ -971,9 +972,8 @@ void RTFGenerator::endIndexSection(IndexSections is) t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << pageName; t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; - pi=pageList.next(); } - while (pi) + for (++pdi;(pi=pdi.current());++pdi) { QCString pageName; if (Config::caseSensitiveNames) @@ -985,7 +985,6 @@ void RTFGenerator::endIndexSection(IndexSections is) t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << pageName; t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; - pi=pageList.next(); } } break; diff --git a/src/rtfgen.h b/src/rtfgen.h index d52352a..de873a2 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -105,6 +105,8 @@ class RTFGenerator : public OutputGenerator void writeAnchor(const char *fileName,const char *name); void startCodeFragment(); void endCodeFragment(); + void startPreFragment() { startCodeFragment(); } + void endPreFragment() { endCodeFragment(); } void startCodeLine() { col=0; } void endCodeLine() { lineBreak(); } void writeBoldString(const char *text) diff --git a/src/sortdict.h b/src/sortdict.h new file mode 100644 index 0000000..471a447 --- /dev/null +++ b/src/sortdict.h @@ -0,0 +1,173 @@ +/****************************************************************************** + * + * + * + * + * Copyright (C) 1997-2000 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef _SORTDICT_H +#define _SORTDICT_H + +#include "qtbc.h" +#include +#include + +/*! Ordered dictionary of elements of type T. + * Internally uses a QList and a QDict. + */ +template +class SDict +{ + private: + + /*! internal wrapper class that redirects compareItems() to the + * dictionary + */ + class SList : public QList + { + public: + SList(SDict *owner) : m_owner(owner) {} + ~SList() {} + int compareItems(GCI item1,GCI item2) + { + return m_owner->compareItems(item1,item2); + } + private: + SDict *m_owner; + }; + SList *m_list; + QDict *m_dict; + + public: + /*! Create an ordered dictionary. + * \param size The size of the dictionary. Should be a prime number for + * best distribution of elements. + */ + SDict(int size) + { + m_list = new SList(this); + m_dict = new QDict(size); + } + /*! Destroys the dictionary */ + virtual ~SDict() + { + delete m_list; + delete m_dict; + } + /*! Appends a compound to the dictionary. The element is owned by the + * dictionary. + * \param key The unique key to use to quicky find the item later on. + * \param d The compound to add. + * \sa find() + */ + void append(const char *key,const T *d) + { + m_list->append(d); + m_dict->insert(key,d); + } + /*! Inserts a compound into the dictionary in a sorted way. + * \param key The unique key to use to quicky find the item later on. + * \param d The compound to add. + * \sa find() + */ + void inSort(const char *key,const T *d) + { + m_list->inSort(d); + m_dict->insert(key,d); + } + /*! Indicates whether or not the dictionary owns its elements */ + void setAutoDelete(bool val) + { + m_list->setAutoDelete(val); + } + /*! Looks up a compound given its key. + * \param key The key to identify this element. + * \return The requested compound or zero if it cannot be found. + * \sa append() + */ + T *find(const char *key) + { + return m_dict->find(key); + } + /*! Function that is used to compare two items when sorting. + * Overload this to properly sort items. + * \sa inSort() + */ + virtual int compareItems(GCI item1,GCI item2) + { + return item1!=item2; + } + /*! Clears the dictionary. Will delete items if setAutoDelete() was + * set to \c TRUE. + * \sa setAutoDelete + */ + void clear() + { + m_list->clear(); + m_dict->clear(); + } + /*! Returns the number of items stored in the dictionary + */ + int count() + { + return m_list->count(); + } + + class Iterator; // first forward declare + friend class Iterator; // then make it a friend + /*! Simple iterator for SDict. It iterates in the order in which the + * elements are stored. + */ + class Iterator + { + public: + /*! Create an iterator given the dictionary. */ + Iterator(const SDict &dict) + { + m_li = new QListIterator(*dict.m_list); + } + /*! Destroys the dictionary */ + virtual ~Iterator() + { + delete m_li; + } + /*! Set the iterator to the first element in the list. + * \return The first compound, or zero if the list was empty. + */ + T *toFirst() const + { + return m_li->toFirst(); + } + /*! Returns the current compound */ + T *current() const + { + return m_li->current(); + } + /*! Moves the iterator to the next element. + * \return the new "current" element, or zero if the iterator was + * already pointing at the last element. + */ + T *operator++() + { + return m_li->operator++(); + } + + private: + QListIterator *m_li; + }; + +}; + + +#endif diff --git a/src/translator_nl.h b/src/translator_nl.h index c13d96d..14db842 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -151,7 +151,7 @@ class TranslatorDutch : public Translator QCString trModuleDocumentation() { return "Module Documentatie"; } QCString trClassDocumentation() - { return "Klasse Documentatie"; } + { return "Klassen Documentatie"; } QCString trFileDocumentation() { return "File Documentatie"; } QCString trExampleDocumentation() diff --git a/src/util.cpp b/src/util.cpp index fc1ff20..3d9972b 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -37,6 +37,7 @@ #include "version.h" #include "groupdef.h" #include "xml.h" +#include "page.h" #ifndef _WIN32 #include @@ -797,14 +798,14 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext) parseText(ol,theTranslator->trFileMembers()); ol.endQuickIndexItem(); } - if (pageList.count()>0) + if (pageSDict->count()>0) { if (!compact) ol.writeListItem(); ol.startQuickIndexItem(extLink,"pages.html"); parseText(ol,theTranslator->trRelatedPages()); ol.endQuickIndexItem(); } - if (exampleList.count()>0) + if (exampleSDict->count()>0) { if (!compact) ol.writeListItem(); ol.startQuickIndexItem(extLink,"examples.html"); @@ -2109,13 +2110,13 @@ bool generateLink(OutputList &ol,const char *clName, ol.docify(lt); return FALSE; } - else if ((pi=pageDict[linkRef])) // link to a page + else if ((pi=pageSDict->find(linkRef))) // link to a page { ol.writeObjectLink(0,pi->name,0,lt); writePageRef(ol,pi->name,0); return TRUE; } - else if ((pi=exampleDict[linkRef])) // link to an example + else if ((pi=exampleSDict->find(linkRef))) // link to an example { ol.writeObjectLink(0,convertFileName(pi->name)+"-example",0,lt); writePageRef(ol,convertFileName(pi->name)+"-example",0); @@ -2162,6 +2163,7 @@ void generateFileRef(OutputList &ol,const char *name,const char *text) //---------------------------------------------------------------------- +#if 0 QCString substituteClassNames(const QCString &s) { int i=0,l,p; @@ -2185,6 +2187,7 @@ QCString substituteClassNames(const QCString &s) result+=s.mid(i,s.length()-i); return result; } +#endif //---------------------------------------------------------------------- -- cgit v0.12