diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2000-08-13 17:49:57 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2000-08-13 17:49:57 (GMT) |
commit | 5ce25000172e185e0ca5b9f20538f80cbbfe0b0e (patch) | |
tree | 69018221b85af2e6f7d24d25d207dd6fdc8795ad | |
parent | c4ef46195917656ebebed63e3fab5c135d9905a2 (diff) | |
download | Doxygen-5ce25000172e185e0ca5b9f20538f80cbbfe0b0e.zip Doxygen-5ce25000172e185e0ca5b9f20538f80cbbfe0b0e.tar.gz Doxygen-5ce25000172e185e0ca5b9f20538f80cbbfe0b0e.tar.bz2 |
Release-1.2.1
40 files changed, 678 insertions, 266 deletions
@@ -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) @@ -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) @@ -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 <a href="$(DOXYGEN_DOCDIR)/examples/define/html/define.h.html">here</a> + Click <a href="$(DOXYGEN_DOCDIR)/examples/define/html/define_h.html">here</a> 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 <a href="$(DOXYGEN_DOCDIR)/examples/file/html/file.h.html">here</a> + Click <a href="$(DOXYGEN_DOCDIR)/examples/file/html/file_h.html">here</a> 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 <a href="grouping.html">next</a> section or return to the +Go to the <a href="lists.html">next</a> section or return to the <a href="index.html">index</a>. \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. <li>Section \ref docblocks demonstrates the various ways that code can be documented. +<li>Section \ref lists show various ways to create lists. <li>Section \ref grouping shows how to group things together. <li>Section \ref formulas shows how to insert formulas in the documentation. <li>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. + +<b>Using dashes</b> + + 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.<p> + 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. + +<b>Using HTML commands</b> + +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: + * <ul> + * <li> mouse events + * <ol> + * <li>mouse move event + * <li>mouse click event\n + * More info about the click event. + * <li>mouse double click event + * </ol> + * <li> keyboard events + * <ol> + * <li>key down event + * <li>key up event + * </ol> + * </ul> + * More text here. + */ +\endverbatim + +\note The the indent here is not important. + +<b>Using \\arg or \@li</b> + +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 <a href="grouping.html">next</a> section or return to the + <a href="index.html">index</a>. +\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. </ul> - 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.<p> - 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 <a href="docblocks.html">next</a> section or return to the <a href="index.html">index</a>. @@ -241,4 +204,3 @@ Go to the <a href="docblocks.html">next</a> 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); @@ -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" <SkipCPP>. { g_code->codify(yytext); } -<SkipCPP>\\\n { +<SkipCPP>\\[\r]?\n { codifyLines(yytext); } <SkipCPP>\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 ); } -<SkipString>[^\"\\\n]* { +<SkipString>[^\"\\\r\n]* { g_code->codify(yytext); } <SkipString>"//"|"/*" { @@ -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) <Start>"PROJECT_NUMBER"[ \t]*"=" { BEGIN(GetString); s=&Config::projectNumber; s->resize(0); } <Start>"OUTPUT_DIRECTORY"[ \t]*"=" { BEGIN(GetString); s=&Config::outputDir; s->resize(0); } <Start>"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&Config::outputLanguage; s->resize(0); } -<Start>"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; } <Start>"EXTRACT_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; } <Start>"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; } <Start>"EXTRACT_STATIC"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractStaticFlag; } @@ -393,6 +392,7 @@ static void readIncludeFile(const char *incName) <Start>"HTML_STYLESHEET"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlStyleSheet; s->resize(0); } <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>"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; } @@ -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; } @@ -881,7 +881,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") outDoc->writeString(c); } <DocScan>"\\postheader"/{BN} -<DocScan>"\\functionindex"/{BN} { writeMemberList(*outDoc); } +<DocScan>"\\functionindex"/{BN} { writeMemberList(*outDoc,FALSE); } <DocScan>"\\classhierarchy"/{BN} { writeClassHierarchy(*outDoc); } <DocScan>"\\annotatedclasslist"/{BN} { writeAnnotatedClassList(*outDoc); } <DocScan>"\\headerfilelist"/{BN} { /*TODO: fix this writeHeaderFileList(*outDoc); */ } @@ -1636,7 +1636,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") BEGIN( DocCodeBlock ); } <DocScan>{CMD}"endcode"/[^a-z_A-Z0-9] { - warn(yyFileName,yyLineNr,"Warning: \\endcode without <PRE> 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 ); } -<DocCodeBlock>"</"{PRE}{ATTR}">" { - parseCode(*outDoc,className,codeBlock,exampleDoc,exampleName); - //printf("Code block\n-------------\n%s\n--------------\n",codeBlock.data()); - outDoc->endCodeFragment(); - BEGIN( DocScan ); - } <DocScan>{CMD}("e"|"em"|"a"){BN}+ { BEGIN( DocEmphasis ); } <DocScan>{CMD}"b"{BN}+ { BEGIN( DocBold ); } <DocScan>{CMD}("c"|"p"){BN}+ { BEGIN( DocCode ); } @@ -1781,17 +1775,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") /*restoreOutputListState();*/ outDoc->popGeneratorState(); } -<DocScan>"<"{PRE}{ATTR}">" { - outDoc->startCodeFragment(); - codeBlock.resize(0); - BEGIN( DocCodeBlock ); - } -<DocScan>"</"{PRE}{ATTR}">" { - warn(yyFileName,yyLineNr, - "Warning: </PRE> without <PRE> or \\code" - "in the documentation." - ); - } +<DocScan>"<"{PRE}{ATTR}">" { outDoc->startPreFragment(); } +<DocScan>"</"{PRE}{ATTR}">" { outDoc->endPreFragment(); } <DocScan>"<"{SUB}{ATTR}">" { outDoc->startSubscript(); } <DocScan>"</"{SUB}{ATTR}">" { outDoc->endSubscript(); } <DocScan>"<"{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<PageInfo> -{ - 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<QCString> StringList; typedef QDict<FileDef> FileDict; typedef QDict<QCString> StringDict; -typedef QDict<PageInfo> PageDict; typedef QDict<GroupDef> 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<QCString> memberHeaderDict; // dictionary of the member groups heading extern QIntDict<QCString> 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<p><center><img src=\"" << fileName << ".gif\" usemap=\"#" << name << "_map\"" << " border=\"0\"></center>" << endl - << "<map name=\"" << name << "_map\"><p>" << endl; + << "<map name=\"" << name << "_map\">" << 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 << "<pre>"; } + void endPreFragment() { t << "</pre>"; } 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<PageInfo> +{ + public: + PageSDict(int size) : SDict<PageInfo>(size) {} + ~PageSDict() {} + int compareItems(GCI i1,GCI i2) + { + return stricmp(((PageInfo *)i1)->name,((PageInfo *)i2)->name); + } +}; + +class PageSDictIterator : public SDict<PageInfo>::Iterator +{ + public: + PageSDictIterator(const PageSDict &d) : SDict<PageInfo>::Iterator(d) {} + ~PageSDictIterator() {} +}; + @@ -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 <qlist.h> +#include <qdict.h> + +/*! Ordered dictionary of elements of type T. + * Internally uses a QList<T> and a QDict<T>. + */ +template<class T> +class SDict +{ + private: + + /*! internal wrapper class that redirects compareItems() to the + * dictionary + */ + class SList : public QList<T> + { + public: + SList(SDict<T> *owner) : m_owner(owner) {} + ~SList() {} + int compareItems(GCI item1,GCI item2) + { + return m_owner->compareItems(item1,item2); + } + private: + SDict<T> *m_owner; + }; + SList *m_list; + QDict<T> *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<T>(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<T> &dict) + { + m_li = new QListIterator<T>(*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<T> *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 <unistd.h> @@ -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 //---------------------------------------------------------------------- |