Commit 8726fc64 authored by dimitri's avatar dimitri

Release-1.2.1

parent ef99315d
DOXYGEN Version 1.2.0-20000806 DOXYGEN Version 1.2.1
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (06 August 2000) Dimitri van Heesch (13 August 2000)
DOXYGEN Version 1.2.0-20000806 DOXYGEN Version 1.2.1
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (06 August 2000) Dimitri van Heesch (13 August 2000)
1.2.0-20000806 1.2.1
...@@ -239,7 +239,7 @@ static void readIncludeFile(const char *incName) ...@@ -239,7 +239,7 @@ static void readIncludeFile(const char *incName)
else else
{ {
ConfigFileState *fs=includeStack.pop(); ConfigFileState *fs=includeStack.pop();
pclose(fs->filePtr); fclose(fs->filePtr);
YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER; YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
yy_switch_to_buffer( fs->oldState ); yy_switch_to_buffer( fs->oldState );
yy_delete_buffer( oldBuf ); yy_delete_buffer( oldBuf );
......
...@@ -791,14 +791,6 @@ void init() ...@@ -791,14 +791,6 @@ void init()
ConfigString::addFixedValue("outputLanguage","Croatian"); ConfigString::addFixedValue("outputLanguage","Croatian");
ConfigString::addFixedValue("outputLanguage","Polish"); ConfigString::addFixedValue("outputLanguage","Polish");
ConfigString::addFixedValue("outputLanguage","Portuguese"); 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", ConfigBool::add( "extractAllFlag",
"EXTRACT_ALL", "EXTRACT_ALL",
"FALSE", "FALSE",
...@@ -1244,6 +1236,15 @@ void init() ...@@ -1244,6 +1236,15 @@ void init()
"of the generated HTML documentation. \n" "of the generated HTML documentation. \n"
); );
addDependency("htmlHelpFlag","generateHtml"); 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"); ConfigInfo::add( "LaTeX","configuration options related to the LaTeX output");
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
......
...@@ -30,7 +30,7 @@ ENABLED_SECTIONS = logo_on ...@@ -30,7 +30,7 @@ ENABLED_SECTIONS = logo_on
ENABLE_PREPROCESSING = NO ENABLE_PREPROCESSING = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
IMAGE_PATH = . 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 \ grouping.doc formulas.doc diagrams.doc preprocessing.doc \
external.doc faq.doc trouble.doc history.doc features.doc \ external.doc faq.doc trouble.doc history.doc features.doc \
doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \ doxygen_usage.doc doxytag_usage.doc doxysearch_usage.doc \
......
...@@ -179,7 +179,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -179,7 +179,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example: \par Example:
\verbinclude define.h \verbinclude define.h
\htmlonly \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. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
...@@ -270,7 +270,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -270,7 +270,7 @@ Doxygen. Unrecognized commands are treated as normal text.
\par Example: \par Example:
\verbinclude file.h \verbinclude file.h
\htmlonly \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. for the corresponding HTML documentation that is generated by Doxygen.
\endhtmlonly \endhtmlonly
......
...@@ -204,7 +204,7 @@ Here is an example of a the use of these comment blocks: ...@@ -204,7 +204,7 @@ Here is an example of a the use of these comment blocks:
inside these comment blocks. inside these comment blocks.
\htmlonly \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>. <a href="index.html">index</a>.
\endhtmlonly \endhtmlonly
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
\usepackage{doxygen} \usepackage{doxygen}
\usepackage{multicol} \usepackage{multicol}
\usepackage{times} \usepackage{times}
\usepackage{alltt}
\usepackage[pagebackref=true, \usepackage[pagebackref=true,
colorlinks=true, colorlinks=true,
linkcolor=blue linkcolor=blue
...@@ -46,6 +47,7 @@ Written by Dimitri van Heesch\\[2ex] ...@@ -46,6 +47,7 @@ Written by Dimitri van Heesch\\[2ex]
\input{install} \input{install}
\input{starting} \input{starting}
\input{docblocks} \input{docblocks}
\input{lists}
\input{grouping} \input{grouping}
\input{formulas} \input{formulas}
\input{diagrams} \input{diagrams}
......
...@@ -89,6 +89,7 @@ The first part forms a user manual: ...@@ -89,6 +89,7 @@ The first part forms a user manual:
documentation quickly. documentation quickly.
<li>Section \ref docblocks demonstrates the various ways that code can <li>Section \ref docblocks demonstrates the various ways that code can
be documented. 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 grouping shows how to group things together.
<li>Section \ref formulas shows how to insert formulas in the documentation. <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. <li>Section \ref diagrams describes the diagrams and graphs that doxygen can generate.
......
/*! \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
*/
...@@ -197,43 +197,6 @@ During parsing the following steps take place: ...@@ -197,43 +197,6 @@ During parsing the following steps take place:
See section \ref htmlcmds for an overview of all supported HTML tags. See section \ref htmlcmds for an overview of all supported HTML tags.
</ul> </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 \htmlonly
Go to the <a href="docblocks.html">next</a> section or return to the Go to the <a href="docblocks.html">next</a> section or return to the
<a href="index.html">index</a>. <a href="index.html">index</a>.
...@@ -241,4 +204,3 @@ Go to the <a href="docblocks.html">next</a> section or return to the ...@@ -241,4 +204,3 @@ Go to the <a href="docblocks.html">next</a> section or return to the
*/ */
Name: doxygen Name: doxygen
Version: 1.2.0-20000806 Version: 1.2.1
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 1 Release: 1
Source0: doxygen-%{version}.src.tar.gz Source0: doxygen-%{version}.src.tar.gz
......
...@@ -1635,6 +1635,7 @@ void ClassDef::determineImplUsageRelation() ...@@ -1635,6 +1635,7 @@ void ClassDef::determineImplUsageRelation()
} }
QCString templSpec; QCString templSpec;
if (te>ts) templSpec = type.mid(ts,te-ts); 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)); ClassDef *cd=getResolvedClass(name()+"::"+type.mid(i,l));
if (cd==0) cd=getResolvedClass(type.mid(i,l)); // TODO: also try inbetween scopes! 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); //printf("Search for class %s result=%p\n",type.mid(i,l).data(),cd);
......
...@@ -298,6 +298,7 @@ static void addVariable() ...@@ -298,6 +298,7 @@ static void addVariable()
g_codeVarList.append(new CodeVarDef(g_cvd)); g_codeVarList.append(new CodeVarDef(g_cvd));
} }
} }
//printf("g_codeVarList.count()=%d\n",g_codeVarList.count());
} }
} }
...@@ -328,6 +329,7 @@ static void addParameter() ...@@ -328,6 +329,7 @@ static void addParameter()
g_codeParmList.append(new CodeVarDef(g_cvd)); 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" ...@@ -747,7 +749,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<SkipCPP>. { <SkipCPP>. {
g_code->codify(yytext); g_code->codify(yytext);
} }
<SkipCPP>\\\n { <SkipCPP>\\[\r]?\n {
codifyLines(yytext); codifyLines(yytext);
} }
<SkipCPP>\n/.*\n { <SkipCPP>\n/.*\n {
...@@ -817,6 +819,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -817,6 +819,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
CodeClassDef *cd=new CodeClassDef(g_ccd); CodeClassDef *cd=new CodeClassDef(g_ccd);
g_codeClassList.append(cd); g_codeClassList.append(cd);
g_codeClassDict.insert(cd->name,cd); g_codeClassDict.insert(cd->name,cd);
//printf("g_codeClassList.count()=%d\n",g_codeClassList.count());
} }
BEGIN( Body ); BEGIN( Body );
} }
...@@ -960,7 +963,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -960,7 +963,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_lastStringContext=YY_START; g_lastStringContext=YY_START;
BEGIN( SkipString ); BEGIN( SkipString );
} }
<SkipString>[^\"\\\n]* { <SkipString>[^\"\\\r\n]* {
g_code->codify(yytext); g_code->codify(yytext);
} }
<SkipString>"//"|"/*" { <SkipString>"//"|"/*" {
...@@ -1448,8 +1451,8 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, ...@@ -1448,8 +1451,8 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
bool exBlock, const char *exName,FileDef *fd, bool exBlock, const char *exName,FileDef *fd,
int startLine,int endLine,bool inlineFragment) int startLine,int endLine,bool inlineFragment)
{ {
g_code = new OutputList(&ol);
if (s.isEmpty()) return; if (s.isEmpty()) return;
g_code = new OutputList(&ol);
g_inputString = s; g_inputString = s;
g_inputPosition = 0; g_inputPosition = 0;
g_currentFontClass = 0; g_currentFontClass = 0;
......
/* 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 * from config_templ.h
* *
* DO NOT EDIT! * DO NOT EDIT!
...@@ -41,7 +41,6 @@ struct Config ...@@ -41,7 +41,6 @@ struct Config
static QCString projectNumber; // the number of the project static QCString projectNumber; // the number of the project
static QCString outputDir; // the global output directory static QCString outputDir; // the global output directory
static QCString outputLanguage; // the output language static QCString outputLanguage; // the output language
static bool noIndexFlag; // generate condensed index flag
static bool extractAllFlag; // generate docs for all classes flag static bool extractAllFlag; // generate docs for all classes flag
static bool extractPrivateFlag; // generate docs for private members flag static bool extractPrivateFlag; // generate docs for private members flag
static bool extractStaticFlag; // generate docs for static members flag static bool extractStaticFlag; // generate docs for static members flag
...@@ -92,6 +91,7 @@ struct Config ...@@ -92,6 +91,7 @@ struct Config
static QCString htmlStyleSheet; // user defined cascading style sheet static QCString htmlStyleSheet; // user defined cascading style sheet
static bool htmlAlignMemberFlag; // align members in HTML using tables. static bool htmlAlignMemberFlag; // align members in HTML using tables.
static bool htmlHelpFlag; // should html help files be generated? static bool htmlHelpFlag; // should html help files be generated?
static bool noIndexFlag; // generate condensed index flag
static bool generateLatex; // generate Latex output static bool generateLatex; // generate Latex output
static QCString latexOutputDir; // the directory to put the Latex files static QCString latexOutputDir; // the directory to put the Latex files
static bool compactLatexFlag; // generate compact LaTeX documentation. static bool compactLatexFlag; // generate compact LaTeX documentation.
......
/* 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 * from config_templ.l
* *
* DO NOT EDIT! * DO NOT EDIT!
...@@ -78,7 +78,6 @@ QCString Config::projectName; ...@@ -78,7 +78,6 @@ QCString Config::projectName;
QCString Config::projectNumber; QCString Config::projectNumber;
QCString Config::outputDir; QCString Config::outputDir;
QCString Config::outputLanguage = "English"; QCString Config::outputLanguage = "English";
bool Config::noIndexFlag = FALSE;
bool Config::extractAllFlag = FALSE; bool Config::extractAllFlag = FALSE;
bool Config::extractPrivateFlag = FALSE; bool Config::extractPrivateFlag = FALSE;
bool Config::extractStaticFlag = FALSE; bool Config::extractStaticFlag = FALSE;
...@@ -129,6 +128,7 @@ QCString Config::footerFile; ...@@ -129,6 +128,7 @@ QCString Config::footerFile;
QCString Config::htmlStyleSheet; QCString Config::htmlStyleSheet;
bool Config::htmlAlignMemberFlag = TRUE; bool Config::htmlAlignMemberFlag = TRUE;
bool Config::htmlHelpFlag = FALSE; bool Config::htmlHelpFlag = FALSE;
bool Config::noIndexFlag = FALSE;
bool Config::generateLatex = TRUE; bool Config::generateLatex = TRUE;
QCString Config::latexOutputDir = "latex"; QCString Config::latexOutputDir = "latex";
bool Config::compactLatexFlag = FALSE; bool Config::compactLatexFlag = FALSE;
...@@ -332,7 +332,6 @@ static void readIncludeFile(const char *incName) ...@@ -332,7 +332,6 @@ static void readIncludeFile(const char *incName)
<Start>"PROJECT_NUMBER"[ \t]*"=" { BEGIN(GetString); s=&Config::projectNumber; s->resize(0); } <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_DIRECTORY"[ \t]*"=" { BEGIN(GetString); s=&Config::outputDir; s->resize(0); }
<Start>"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&Config::outputLanguage; 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_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; }
<Start>"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; } <Start>"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; }
<Start>"EXTRACT_STATIC"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractStaticFlag; } <Start>"EXTRACT_STATIC"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractStaticFlag; }
...@@ -393,6 +392,7 @@ static void readIncludeFile(const char *incName) ...@@ -393,6 +392,7 @@ static void readIncludeFile(const char *incName)
<Start>"HTML_STYLESHEET"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlStyleSheet; s->resize(0); } <Start>"HTML_STYLESHEET"[ \t]*"=" { BEGIN(GetString); s=&Config::htmlStyleSheet; s->resize(0); }
<Start>"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; } <Start>"HTML_ALIGN_MEMBERS"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlAlignMemberFlag; }
<Start>"GENERATE_HTMLHELP"[ \t]*"=" { BEGIN(GetBool); b=&Config::htmlHelpFlag; } <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>"GENERATE_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateLatex; }
<Start>"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); } <Start>"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); }
<Start>"COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; } <Start>"COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; }
...@@ -465,7 +465,7 @@ static void readIncludeFile(const char *incName) ...@@ -465,7 +465,7 @@ static void readIncludeFile(const char *incName)
else else
{ {
ConfigFileState *fs=includeStack.pop(); ConfigFileState *fs=includeStack.pop();
pclose(fs->filePtr); fclose(fs->filePtr);
YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER; YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
yy_switch_to_buffer( fs->oldState ); yy_switch_to_buffer( fs->oldState );
yy_delete_buffer( oldBuf ); yy_delete_buffer( oldBuf );
...@@ -554,7 +554,6 @@ void dumpConfig() ...@@ -554,7 +554,6 @@ void dumpConfig()
printf("projectNumber=`%s'\n",Config::projectNumber.data()); printf("projectNumber=`%s'\n",Config::projectNumber.data());
printf("outputDir=`%s'\n",Config::outputDir.data()); printf("outputDir=`%s'\n",Config::outputDir.data());
printf("outputLanguage=`%s'\n",Config::outputLanguage.data()); printf("outputLanguage=`%s'\n",Config::outputLanguage.data());
printf("noIndexFlag=`%d'\n",Config::noIndexFlag);
printf("extractAllFlag=`%d'\n",Config::extractAllFlag); printf("extractAllFlag=`%d'\n",Config::extractAllFlag);
printf("extractPrivateFlag=`%d'\n",Config::extractPrivateFlag); printf("extractPrivateFlag=`%d'\n",Config::extractPrivateFlag);
printf("extractStaticFlag=`%d'\n",Config::extractStaticFlag); printf("extractStaticFlag=`%d'\n",Config::extractStaticFlag);
...@@ -679,6 +678,7 @@ void dumpConfig() ...@@ -679,6 +678,7 @@ void dumpConfig()
printf("htmlStyleSheet=`%s'\n",Config::htmlStyleSheet.data()); printf("htmlStyleSheet=`%s'\n",Config::htmlStyleSheet.data());
printf("htmlAlignMemberFlag=`%d'\n",Config::htmlAlignMemberFlag); printf("htmlAlignMemberFlag=`%d'\n",Config::htmlAlignMemberFlag);
printf("htmlHelpFlag=`%d'\n",Config::htmlHelpFlag); printf("htmlHelpFlag=`%d'\n",Config::htmlHelpFlag);
printf("noIndexFlag=`%d'\n",Config::noIndexFlag);
printf("# configuration options related to the LaTeX output\n"); printf("# configuration options related to the LaTeX output\n");
printf("generateLatex=`%d'\n",Config::generateLatex); printf("generateLatex=`%d'\n",Config::generateLatex);
printf("latexOutputDir=`%s'\n",Config::latexOutputDir.data()); printf("latexOutputDir=`%s'\n",Config::latexOutputDir.data());
...@@ -790,7 +790,6 @@ void Config::init() ...@@ -790,7 +790,6 @@ void Config::init()
Config::projectNumber.resize(0); Config::projectNumber.resize(0);
Config::outputDir.resize(0); Config::outputDir.resize(0);
Config::outputLanguage = "English"; Config::outputLanguage = "English";
Config::noIndexFlag = FALSE;
Config::extractAllFlag = FALSE; Config::extractAllFlag = FALSE;
Config::extractPrivateFlag = FALSE; Config::extractPrivateFlag = FALSE;
Config::extractStaticFlag = FALSE; Config::extractStaticFlag = FALSE;
...@@ -841,6 +840,7 @@ void Config::init() ...@@ -841,6 +840,7 @@ void Config::init()
Config::htmlStyleSheet.resize(0); Config::htmlStyleSheet.resize(0);
Config::htmlAlignMemberFlag = TRUE; Config::htmlAlignMemberFlag = TRUE;
Config::htmlHelpFlag = FALSE; Config::htmlHelpFlag = FALSE;
Config::noIndexFlag = FALSE;
Config::generateLatex = TRUE; Config::generateLatex = TRUE;
Config::latexOutputDir = "latex"; Config::latexOutputDir = "latex";
Config::compactLatexFlag = FALSE; Config::compactLatexFlag = FALSE;
...@@ -1006,17 +1006,6 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1006,17 +1006,6 @@ void writeTemplateConfig(QFile *f,bool sl)
writeStringValue(t,Config::outputLanguage); writeStringValue(t,Config::outputLanguage);
t << "\n"; t << "\n";
if (!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 << "# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n"; t << "# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n";
...@@ -1608,6 +1597,17 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1608,6 +1597,17 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::htmlHelpFlag); writeBoolValue(t,Config::htmlHelpFlag);
t << "\n"; t << "\n";
if (!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";
} }
......
...@@ -101,7 +101,11 @@ class Definition ...@@ -101,7 +101,11 @@ class Definition
void writeSourceRefs(OutputList &ol,const char *scopeName); void writeSourceRefs(OutputList &ol,const char *scopeName);
void addSourceReference(MemberDef *d); 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 todoId() const { return m_todoId; }
int testId() const { return m_testId; } int testId() const { return m_testId; }
......
...@@ -881,7 +881,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -881,7 +881,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
outDoc->writeString(c); outDoc->writeString(c);
} }
<DocScan>"\\postheader"/{BN} <DocScan>"\\postheader"/{BN}
<DocScan>"\\functionindex"/{BN} { writeMemberList(*outDoc); } <DocScan>"\\functionindex"/{BN} { writeMemberList(*outDoc,FALSE); }
<DocScan>"\\classhierarchy"/{BN} { writeClassHierarchy(*outDoc); } <DocScan>"\\classhierarchy"/{BN} { writeClassHierarchy(*outDoc); }
<DocScan>"\\annotatedclasslist"/{BN} { writeAnnotatedClassList(*outDoc); } <DocScan>"\\annotatedclasslist"/{BN} { writeAnnotatedClassList(*outDoc); }
<DocScan>"\\headerfilelist"/{BN} { /*TODO: fix this writeHeaderFileList(*outDoc); */ } <DocScan>"\\headerfilelist"/{BN} { /*TODO: fix this writeHeaderFileList(*outDoc); */ }
...@@ -1636,7 +1636,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -1636,7 +1636,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
BEGIN( DocCodeBlock ); BEGIN( DocCodeBlock );
} }
<DocScan>{CMD}"endcode"/[^a-z_A-Z0-9] { <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."); "in the documentation.");
} }
...@@ -1675,12 +1675,6 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -1675,12 +1675,6 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
outDoc->endCodeFragment(); outDoc->endCodeFragment();
BEGIN( DocScan ); 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}("e"|"em"|"a"){BN}+ { BEGIN( DocEmphasis ); }
<DocScan>{CMD}"b"{BN}+ { BEGIN( DocBold ); } <DocScan>{CMD}"b"{BN}+ { BEGIN( DocBold ); }
<DocScan>{CMD}("c"|"p"){BN}+ { BEGIN( DocCode ); } <DocScan>{CMD}("c"|"p"){BN}+ { BEGIN( DocCode ); }
...@@ -1781,17 +1775,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") ...@@ -1781,17 +1775,8 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
/*restoreOutputListState();*/ /*restoreOutputListState();*/
outDoc->popGeneratorState(); outDoc->popGeneratorState();
} }
<DocScan>"<"{PRE}{ATTR}">" { <DocScan>"<"{PRE}{ATTR}">" { outDoc->startPreFragment(); }
outDoc->startCodeFragment(); <DocScan>"</"{PRE}{ATTR}">" { outDoc->endPreFragment(); }
codeBlock.resize(0);
BEGIN( DocCodeBlock );
}
<DocScan>"</"{PRE}{ATTR}">" {
warn(yyFileName,yyLineNr,
"Warning: </PRE> without <PRE> or \\code"
"in the documentation."
);
}
<DocScan>"<"{SUB}{ATTR}">" { outDoc->startSubscript(); } <DocScan>"<"{SUB}{ATTR}">" { outDoc->startSubscript(); }
<DocScan>"</"{SUB}{ATTR}">" { outDoc->endSubscript(); } <DocScan>"</"{SUB}{ATTR}">" { outDoc->endSubscript(); }
<DocScan>"<"{SUP}{ATTR}">" { outDoc->startSuperscript(); } <DocScan>"<"{SUP}{ATTR}">" { outDoc->startSuperscript(); }
...@@ -2112,6 +2097,7 @@ void parseDocument(OutputList &ol,const QCString &docString) ...@@ -2112,6 +2097,7 @@ void parseDocument(OutputList &ol,const QCString &docString)
includeFileOffset=0; includeFileOffset=0;
includeFileLength=0; includeFileLength=0;
currentListIndent.clear(); currentListIndent.clear();
listIndentStack.clear();
if (!docString) return; if (!docString) return;
linkRef = ""; linkRef = "";
linkText = ""; linkText = "";
......
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
#include "rtfgen.h" #include "rtfgen.h"
#include "xml.h" #include "xml.h"
#include "reflist.h" #include "reflist.h"
#include "page.h"
#if defined(_MSC_VER) || defined(__BORLANDC__) #if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen #define popen _popen
...@@ -64,8 +65,8 @@ ...@@ -64,8 +65,8 @@
// lists // lists
ClassList classList; // all documented classes ClassList classList; // all documented classes
NamespaceList namespaceList; // all namespaces NamespaceList namespaceList; // all namespaces
PageList exampleList; // all example files //PageList *exampleList = new PageList; // all example files
PageList pageList; // all related documentation pages //PageList *pageList = new PageList; // all related documentation pages
MemberNameList memberNameList; // class member + related functions MemberNameList memberNameList; // class member + related functions
MemberNameList functionNameList; // all unrelated functions MemberNameList functionNameList; // all unrelated functions
FileNameList inputNameList; // all input files FileNameList inputNameList; // all input files
...@@ -74,13 +75,13 @@ GroupList groupList; // all groups ...@@ -74,13 +75,13 @@ GroupList groupList; // all groups
FormulaList formulaList; // all formulas FormulaList formulaList; // all formulas
// dictionaries // dictionaries
PageDict pageDict(1009); // all doc pages PageSDict *pageSDict = new PageSDict(1009); // all doc pages
PageDict exampleDict(1009); // all examples PageSDict *exampleSDict = new PageSDict(1009); // all examples
ClassDict classDict(1009); // all documented classes ClassDict classDict(1009); // all documented classes
NamespaceDict namespaceDict(257); // all documented namespaces NamespaceDict namespaceDict(257); // all documented namespaces
MemberNameDict memberNameDict(10007); // all class member names MemberNameDict memberNameDict(10007); // all class member names
MemberNameDict functionNameDict(10007); // all functions MemberNameDict functionNameDict(10007); // all functions
StringDict substituteDict(1009); // class name substitutes //StringDict substituteDict(1009); // class name substitutes
SectionDict sectionDict(257); // all page sections SectionDict sectionDict(257); // all page sections
StringDict excludeNameDict(1009); // sections StringDict excludeNameDict(1009); // sections
FileNameDict *inputNameDict; // sections FileNameDict *inputNameDict; // sections
...@@ -106,21 +107,19 @@ void clearAll() ...@@ -106,21 +107,19 @@ void clearAll()
{ {
classList.clear(); classList.clear();
namespaceList.clear(); namespaceList.clear();
exampleList.clear(); pageSDict->clear();
pageList.clear(); exampleSDict->clear();
memberNameList.clear(); memberNameList.clear();
functionNameList.clear(); functionNameList.clear();
inputNameList.clear(); inputNameList.clear();
inputFiles.clear(); inputFiles.clear();
groupList.clear(); groupList.clear();
formulaList.clear(); formulaList.clear();
pageDict.clear();
exampleDict.clear();
classDict.clear(); classDict.clear();
namespaceDict.clear(); namespaceDict.clear();
memberNameDict.clear(); memberNameDict.clear();
functionNameDict.clear(); functionNameDict.clear();
substituteDict.clear(); //substituteDict.clear();
sectionDict.clear(); sectionDict.clear();
inputNameDict->clear(); inputNameDict->clear();
excludeNameDict.clear(); excludeNameDict.clear();
...@@ -180,7 +179,7 @@ static void addRelatedPage(const char *name,const QCString &ptitle, ...@@ -180,7 +179,7 @@ static void addRelatedPage(const char *name,const QCString &ptitle,
) )
{ {
PageInfo *pi=0; PageInfo *pi=0;
if ((pi=pageDict[name])) if ((pi=pageSDict->find(name)))
{ {
//warn("Warning: Page %s was already documented. Ignoring documentation " //warn("Warning: Page %s was already documented. Ignoring documentation "
// "at line %d of %s\n",root->name.data(),root->startLine, // "at line %d of %s\n",root->name.data(),root->startLine,
...@@ -208,8 +207,8 @@ static void addRelatedPage(const char *name,const QCString &ptitle, ...@@ -208,8 +207,8 @@ static void addRelatedPage(const char *name,const QCString &ptitle,
pageName=pi->name.lower(); pageName=pi->name.lower();
setFileNameForSections(anchors,pageName); setFileNameForSections(anchors,pageName);
pageList.append(pi); pageSDict->append(baseName,pi);
pageDict.insert(baseName,pi);
if (!pi->title.isEmpty()) if (!pi->title.isEmpty())
{ {
//outputList->writeTitle(pi->name,pi->title); //outputList->writeTitle(pi->name,pi->title);
...@@ -2065,7 +2064,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2065,7 +2064,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
// look in the outer scope for a match // look in the outer scope for a match
{ {
Debug::print( 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(), baseClassName.data(),
root->name.data(), root->name.data(),
(bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"), (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
...@@ -2126,9 +2125,27 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2126,9 +2125,27 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
root->name!=fName; 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 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(); NamespaceList *nl = nd->getUsedNamespaces();
QCString fName = nd->name()+"::"+baseClassName; QCString fName = nd->name()+"::"+baseClassName;
found = (baseClass=getResolvedClass(fName))!=0 && root->name!=fName; found = (baseClass=getResolvedClass(fName))!=0 && root->name!=fName;
...@@ -2143,6 +2160,41 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2143,6 +2160,41 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
root->name!=fName; 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) if (found)
...@@ -2334,11 +2386,11 @@ static void addTodoTestReferences() ...@@ -2334,11 +2386,11 @@ static void addTodoTestReferences()
addRefItem(gd->todoId(),gd->testId(),"group",gd->getOutputFileBase(),gd->name()); addRefItem(gd->todoId(),gd->testId(),"group",gd->getOutputFileBase(),gd->name());
gd=groupList.next(); gd=groupList.next();
} }
PageInfo *pi=pageList.first(); PageSDictIterator pdi(*pageSDict);
while (pi) PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
addRefItem(pi->todoId,pi->testId,"page",pi->name,pi->title); addRefItem(pi->todoId,pi->testId,"page",pi->name,pi->title);
pi=pageList.next();
} }
MemberNameListIterator mnli(memberNameList); MemberNameListIterator mnli(memberNameList);
MemberName *mn=0; MemberName *mn=0;
...@@ -4190,7 +4242,7 @@ static void generateClassDocs() ...@@ -4190,7 +4242,7 @@ static void generateClassDocs()
msg("Generating member index...\n"); msg("Generating member index...\n");
writeMemberIndex(*outputList); writeMemberIndex(*outputList);
if (exampleList.count()>0) if (exampleSDict->count()>0)
{ {
msg("Generating example index...\n"); msg("Generating example index...\n");
} }
...@@ -4544,8 +4596,9 @@ static void resolveUserReferences() ...@@ -4544,8 +4596,9 @@ static void resolveUserReferences()
static void generatePageDocs() static void generatePageDocs()
{ {
PageInfo *pi=pageList.first(); PageSDictIterator pdi(*pageSDict);
while (pi) PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
msg("Generating docs for page %s...\n",pi->name.data()); msg("Generating docs for page %s...\n",pi->name.data());
outputList->disable(OutputGenerator::Man); outputList->disable(OutputGenerator::Man);
...@@ -4567,7 +4620,6 @@ static void generatePageDocs() ...@@ -4567,7 +4620,6 @@ static void generatePageDocs()
outputList->endTextBlock(); outputList->endTextBlock();
endFile(*outputList); endFile(*outputList);
outputList->enable(OutputGenerator::Man); outputList->enable(OutputGenerator::Man);
pi=pageList.next();
} }
} }
...@@ -4580,7 +4632,7 @@ static void buildExampleList(Entry *root) ...@@ -4580,7 +4632,7 @@ static void buildExampleList(Entry *root)
{ {
if (!root->name.isEmpty()) if (!root->name.isEmpty())
{ {
if (exampleDict[root->name]) if (exampleSDict->find(root->name))
{ {
warn(root->fileName,root->startLine, warn(root->fileName,root->startLine,
"Warning: Example %s was already documented. Ignoring " "Warning: Example %s was already documented. Ignoring "
...@@ -4595,8 +4647,7 @@ static void buildExampleList(Entry *root) ...@@ -4595,8 +4647,7 @@ static void buildExampleList(Entry *root)
setFileNameForSections(root->anchors, setFileNameForSections(root->anchors,
convertFileName(pi->name)+"-example" convertFileName(pi->name)+"-example"
); );
exampleList.inSort(pi); exampleSDict->inSort(root->name,pi);
exampleDict.insert(root->name,pi);
} }
} }
} }
...@@ -4621,8 +4672,9 @@ static void buildExampleList(Entry *root) ...@@ -4621,8 +4672,9 @@ static void buildExampleList(Entry *root)
static void generateExampleDocs() static void generateExampleDocs()
{ {
outputList->disable(OutputGenerator::Man); outputList->disable(OutputGenerator::Man);
PageInfo *pi=exampleList.first(); PageSDictIterator pdi(*exampleSDict);
while (pi) PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
msg("Generating docs for example %s...\n",pi->name.data()); msg("Generating docs for example %s...\n",pi->name.data());
QCString n=convertFileName(pi->name)+"-example"; QCString n=convertFileName(pi->name)+"-example";
...@@ -4632,7 +4684,6 @@ static void generateExampleDocs() ...@@ -4632,7 +4684,6 @@ static void generateExampleDocs()
endTitle(*outputList,n,0); endTitle(*outputList,n,0);
parseExample(*outputList,pi->doc+"\n\\include "+pi->name,pi->name); parseExample(*outputList,pi->doc+"\n\\include "+pi->name,pi->name);
endFile(*outputList); endFile(*outputList);
pi=exampleList.next();
} }
outputList->enable(OutputGenerator::Man); outputList->enable(OutputGenerator::Man);
} }
......
...@@ -33,34 +33,6 @@ ...@@ -33,34 +33,6 @@
#include "section.h" #include "section.h"
#include "membergroup.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 class BufStr : public QCString
{ {
public: public:
...@@ -87,35 +59,37 @@ class BufStr : public QCString ...@@ -87,35 +59,37 @@ class BufStr : public QCString
const int spareRoom; // 10Kb extra room to avoid frequent resizing 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 QList<QCString> StringList;
typedef QDict<FileDef> FileDict; typedef QDict<FileDef> FileDict;
typedef QDict<QCString> StringDict; typedef QDict<QCString> StringDict;
typedef QDict<PageInfo> PageDict;
typedef QDict<GroupDef> GroupDict; typedef QDict<GroupDef> GroupDict;
extern const char * getOverloadDocs();
extern ClassList classList; extern ClassList classList;
extern ClassDict classDict; extern ClassDict classDict;
extern QStrList tagfileList; extern QStrList tagfileList;
extern PageList exampleList;
extern PageDict exampleDict;
extern PageList pageList;
extern PageDict pageDict;
extern MemberNameList memberNameList; extern MemberNameList memberNameList;
extern MemberNameList functionNameList; extern MemberNameList functionNameList;
extern MemberNameDict memberNameDict; extern MemberNameDict memberNameDict;
extern MemberNameDict functionNameDict; extern MemberNameDict functionNameDict;
extern StringDict substituteDict; //extern StringDict substituteDict;
extern FileList fileList; extern FileList fileList;
extern FileDict fileDict; extern FileDict fileDict;
extern ClassDef unrelatedClass; extern ClassDef unrelatedClass;
extern QTextStream tagFile; extern QTextStream tagFile;
extern SectionDict sectionDict; extern SectionDict sectionDict;
extern FileNameList inputNameList; extern FileNameList inputNameList;
extern FileNameDict *includeNameDict;
extern FileNameDict *exampleNameDict;
extern FileNameDict *inputNameDict;
extern FileNameDict *imageNameDict;
extern StringDict typedefDict; extern StringDict typedefDict;
extern GroupList groupList; extern GroupList groupList;
extern GroupDict groupDict; extern GroupDict groupDict;
...@@ -124,7 +98,6 @@ extern NamespaceDict namespaceDict; ...@@ -124,7 +98,6 @@ extern NamespaceDict namespaceDict;
extern FormulaList formulaList; extern FormulaList formulaList;
extern FormulaDict formulaDict; extern FormulaDict formulaDict;
extern FormulaDict formulaNameDict; extern FormulaDict formulaNameDict;
extern PageInfo *mainPage;
extern StringDict tagDestinationDict; extern StringDict tagDestinationDict;
extern QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading extern QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading
extern QIntDict<QCString> memberDocDict; // dictionary of the member groups heading extern QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
...@@ -143,4 +116,6 @@ extern int documentedNamespaceMembers; ...@@ -143,4 +116,6 @@ extern int documentedNamespaceMembers;
extern int documentedIncludeFiles; extern int documentedIncludeFiles;
extern QCString spaces; extern QCString spaces;
extern const char * getOverloadDocs();
#endif #endif
...@@ -26,7 +26,7 @@ HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \ ...@@ -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_nl.h translator_se.h translator_cz.h translator_fr.h \
translator_it.h formula.h debug.h membergroup.h htmlhelp.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 \ 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 \ SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \
memberdef.cpp membername.cpp index.cpp memberlist.cpp \ memberdef.cpp membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \ entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......
...@@ -575,7 +575,7 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d, ...@@ -575,7 +575,7 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d,
t << ":\n<p><center><img src=\"" t << ":\n<p><center><img src=\""
<< fileName << ".gif\" usemap=\"#" << name << "_map\"" << fileName << ".gif\" usemap=\"#" << name << "_map\""
<< " border=\"0\"></center>" << endl << " border=\"0\"></center>" << endl
<< "<map name=\"" << name << "_map\"><p>" << endl; << "<map name=\"" << name << "_map\">" << endl;
d.writeImageMap(t,dir,fileName); d.writeImageMap(t,dir,fileName);
} }
......
...@@ -124,6 +124,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -124,6 +124,8 @@ class HtmlGenerator : public OutputGenerator
// to prevent an extra // to prevent an extra
// blank line // blank line
// (with netscape) // (with netscape)
void startPreFragment() { t << "<pre>"; }
void endPreFragment() { t << "</pre>"; }
void startCodeLine() { col=0; } void startCodeLine() { col=0; }
void endCodeLine() { codify("\n"); } void endCodeLine() { codify("\n"); }
void writeBoldString(const char *text) void writeBoldString(const char *text)
......
This diff is collapsed.
...@@ -52,7 +52,7 @@ void writeSourceIndex(OutputList &ol); ...@@ -52,7 +52,7 @@ void writeSourceIndex(OutputList &ol);
void writeAnnotatedIndex(OutputList &ol); void writeAnnotatedIndex(OutputList &ol);
void writeAnnotatedClassList(OutputList &ol); void writeAnnotatedClassList(OutputList &ol);
void writeMemberIndex(OutputList &ol); void writeMemberIndex(OutputList &ol);
void writeMemberList(OutputList &ol); void writeMemberList(OutputList &ol,bool useSections);
void writeHeaderIndex(OutputList &ol); void writeHeaderIndex(OutputList &ol);
void writeHeaderFileList(OutputList &ol); void writeHeaderFileList(OutputList &ol);
void writeExampleIndex(OutputList &ol); void writeExampleIndex(OutputList &ol);
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "language.h" #include "language.h"
#include "version.h" #include "version.h"
#include "dot.h" #include "dot.h"
#include "page.h"
static QCString filterTitle(const char *s) static QCString filterTitle(const char *s)
{ {
...@@ -204,6 +205,7 @@ static void writeDefaultHeaderPart1(QTextStream &t) ...@@ -204,6 +205,7 @@ static void writeDefaultHeaderPart1(QTextStream &t)
"\\usepackage{fancyhdr}\n" "\\usepackage{fancyhdr}\n"
"\\usepackage{graphicx}\n" "\\usepackage{graphicx}\n"
"\\usepackage{float}\n" "\\usepackage{float}\n"
"\\usepackage{alltt}\n"
"\\usepackage{doxygen}\n"; "\\usepackage{doxygen}\n";
if (Config::pdfHyperFlag) if (Config::pdfHyperFlag)
{ {
...@@ -703,24 +705,24 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -703,24 +705,24 @@ void LatexGenerator::endIndexSection(IndexSections is)
case isExampleDocumentation: case isExampleDocumentation:
{ {
t << "}\n"; t << "}\n";
PageInfo *pi=exampleList.first(); PageSDictIterator pdi(*exampleSDict);
PageInfo *pi=pdi.toFirst();
if (pi) if (pi)
{ {
t << "\\input{" << convertFileName(pi->name) << "-example}\n"; 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"; if (Config::compactLatexFlag) t << "\\input" ; else t << "\\include";
t << "{" << convertFileName(pi->name) << "-example}\n"; t << "{" << convertFileName(pi->name) << "-example}\n";
pi=exampleList.next();
} }
} }
break; break;
case isPageDocumentation: case isPageDocumentation:
{ {
t << "}\n"; t << "}\n";
PageInfo *pi=pageList.first(); PageSDictIterator pdi(*pageSDict);
PageInfo *pi=pdi.toFirst();
if (pi) if (pi)
{ {
QCString pageName; QCString pageName;
...@@ -729,9 +731,8 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -729,9 +731,8 @@ void LatexGenerator::endIndexSection(IndexSections is)
else else
pageName=pi->name.lower(); pageName=pi->name.lower();
t << "\\input{" << pageName << "}\n"; t << "\\input{" << pageName << "}\n";
pi=pageList.next();
} }
while (pi) for (++pdi;(pi=pdi.current());++pdi)
{ {
if (Config::compactLatexFlag) t << "\\input" ; else t << "\\include"; if (Config::compactLatexFlag) t << "\\input" ; else t << "\\include";
QCString pageName; QCString pageName;
...@@ -740,7 +741,6 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -740,7 +741,6 @@ void LatexGenerator::endIndexSection(IndexSections is)
else else
pageName=pi->name.lower(); pageName=pi->name.lower();
t << "{" << pageName << "}\n"; t << "{" << pageName << "}\n";
pi=pageList.next();
} }
} }
break; break;
...@@ -1071,14 +1071,14 @@ void LatexGenerator::addToIndex(const char *s1,const char *s2) ...@@ -1071,14 +1071,14 @@ void LatexGenerator::addToIndex(const char *s1,const char *s2)
void LatexGenerator::writeSection(const char *lab,const char *title,bool sub) 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) if (Config::pdfHyperFlag)
{ {
t << "\\hypertarget{" << lab << "}{}"; 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, void LatexGenerator::writeSectionRef(const char *,const char *lab,
......
...@@ -110,6 +110,8 @@ class LatexGenerator : public OutputGenerator ...@@ -110,6 +110,8 @@ class LatexGenerator : public OutputGenerator
void writeAnchor(const char *fileName,const char *name); void writeAnchor(const char *fileName,const char *name);
void startCodeFragment() { t << "\\small\\begin{verbatim}"; } void startCodeFragment() { t << "\\small\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; } 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 startCodeLine() { col=0; }
void endCodeLine() { t << endl; } void endCodeLine() { t << endl; }
void writeBoldString(const char *text) void writeBoldString(const char *text)
......
...@@ -106,6 +106,8 @@ class ManGenerator : public OutputGenerator ...@@ -106,6 +106,8 @@ class ManGenerator : public OutputGenerator
void writeAnchor(const char *,const char *) {} void writeAnchor(const char *,const char *) {}
void startCodeFragment(); void startCodeFragment();
void endCodeFragment(); void endCodeFragment();
void startPreFragment() { startCodeFragment(); }
void endPreFragment() { endCodeFragment(); }
void startCodeLine() {} void startCodeLine() {}
void endCodeLine() { t << endl; col=0; } void endCodeLine() { t << endl; col=0; }
void writeBoldString(const char *text) void writeBoldString(const char *text)
......
...@@ -234,7 +234,7 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -234,7 +234,7 @@ MemberDef::MemberDef(const char *df,int dl,
const char *t,const char *na,const char *a,const char *e, const char *t,const char *na,const char *a,const char *e,
Protection p,Specifier v,bool s,bool r,MemberType mt, Protection p,Specifier v,bool s,bool r,MemberType mt,
const ArgumentList *tal,const ArgumentList *al 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); //printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl);
classDef=0; classDef=0;
...@@ -255,8 +255,8 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -255,8 +255,8 @@ MemberDef::MemberDef(const char *df,int dl,
scopeTAL=0; scopeTAL=0;
membTAL=0; membTAL=0;
initLines=0; initLines=0;
type=substituteClassNames(t); type=t;
args=substituteClassNames(a); args=a;
if (type.isEmpty()) decl=name()+args; else decl=type+" "+name()+args; if (type.isEmpty()) decl=name()+args; else decl=type+" "+name()+args;
declLine=0; declLine=0;
memberGroup=0; memberGroup=0;
...@@ -1025,6 +1025,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1025,6 +1025,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.startBold(); ol.startBold();
parseText(ol,theTranslator->trInitialValue()); parseText(ol,theTranslator->trInitialValue());
ol.endBold(); ol.endBold();
initParseCodeContext();
ol.startCodeFragment(); ol.startCodeFragment();
parseCode(ol,scopeName,init,FALSE,0); parseCode(ol,scopeName,init,FALSE,0);
ol.endCodeFragment(); ol.endCodeFragment();
...@@ -1400,7 +1401,7 @@ void MemberDef::generateXML(QTextStream &t,Definition *def) ...@@ -1400,7 +1401,7 @@ void MemberDef::generateXML(QTextStream &t,Definition *def)
scopeName=getNamespaceDef()->name(); scopeName=getNamespaceDef()->name();
t << " <"; 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) switch (mtype)
{ {
case Define: t << "definedef"; xmlType=define_t; break; case Define: t << "definedef"; xmlType=define_t; break;
......
...@@ -113,6 +113,8 @@ class OutputGenerator ...@@ -113,6 +113,8 @@ class OutputGenerator
virtual void writeAnchor(const char *fileName,const char *name) = 0; virtual void writeAnchor(const char *fileName,const char *name) = 0;
virtual void startCodeFragment() = 0; virtual void startCodeFragment() = 0;
virtual void endCodeFragment() = 0; virtual void endCodeFragment() = 0;
virtual void startPreFragment() = 0;
virtual void endPreFragment() = 0;
virtual void startCodeLine() = 0; virtual void startCodeLine() = 0;
virtual void endCodeLine() = 0; virtual void endCodeLine() = 0;
virtual void writeBoldString(const char *text) = 0; virtual void writeBoldString(const char *text) = 0;
......
...@@ -260,7 +260,7 @@ FORALL1(int a1,a1) ...@@ -260,7 +260,7 @@ FORALL1(int a1,a1)
FORALL1(DotClassGraph &a1,a1) FORALL1(DotClassGraph &a1,a1)
FORALL1(DotInclDepGraph &a1,a1) FORALL1(DotInclDepGraph &a1,a1)
FORALL1(DotGfxHierarchyTable &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) FORALL1(bool a1,a1)
FORALL2(bool a1,int a2,a1,a2) FORALL2(bool a1,int a2,a1,a2)
FORALL2(bool a1,bool a2,a1,a2) FORALL2(bool a1,bool a2,a1,a2)
......
...@@ -186,6 +186,10 @@ class OutputList ...@@ -186,6 +186,10 @@ class OutputList
{ forall(&OutputGenerator::startCodeFragment); } { forall(&OutputGenerator::startCodeFragment); }
void endCodeFragment() void endCodeFragment()
{ forall(&OutputGenerator::endCodeFragment); } { forall(&OutputGenerator::endCodeFragment); }
void startPreFragment()
{ forall(&OutputGenerator::startPreFragment); }
void endPreFragment()
{ forall(&OutputGenerator::endPreFragment); }
void startCodeLine() void startCodeLine()
{ forall(&OutputGenerator::startCodeLine); } { forall(&OutputGenerator::startCodeLine); }
void endCodeLine() void endCodeLine()
...@@ -395,7 +399,7 @@ class OutputList ...@@ -395,7 +399,7 @@ class OutputList
FORALLPROTO1(DotClassGraph &); FORALLPROTO1(DotClassGraph &);
FORALLPROTO1(DotInclDepGraph &); FORALLPROTO1(DotInclDepGraph &);
FORALLPROTO1(DotGfxHierarchyTable &); FORALLPROTO1(DotGfxHierarchyTable &);
#if defined(HAS_BOOL_TYPE) #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE)
FORALLPROTO1(bool); FORALLPROTO1(bool);
FORALLPROTO2(bool,int); FORALLPROTO2(bool,int);
FORALLPROTO2(bool,bool); FORALLPROTO2(bool,bool);
......
/******************************************************************************
*
*
*
* 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 ...@@ -502,7 +502,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
} }
else else
{ {
resExpr+=substArg; resExpr+=" "+substArg+" ";
} }
} }
} }
...@@ -592,7 +592,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos) ...@@ -592,7 +592,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
{ {
// substitute the definition of the macro // substitute the definition of the macro
//printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data()); //printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
expMacro=def->definition.stripWhiteSpace(); expMacro=" "+def->definition.stripWhiteSpace()+" ";
replaced=TRUE; replaced=TRUE;
len=l; len=l;
//printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data()); //printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data());
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "language.h" #include "language.h"
#include "dot.h" #include "dot.h"
#include "version.h" #include "version.h"
#include "page.h"
//#define DBG_RTF(x) x; //#define DBG_RTF(x) x;
#define DBG_RTF(x) #define DBG_RTF(x)
...@@ -935,31 +936,31 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -935,31 +936,31 @@ void RTFGenerator::endIndexSection(IndexSections is)
case isExampleDocumentation: case isExampleDocumentation:
{ {
//t << "}\n"; //t << "}\n";
PageInfo *pi=exampleList.first();
t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl; t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl;
PageSDictIterator pdi(*exampleSDict);
PageInfo *pi=pdi.toFirst();
if (pi) if (pi)
{ {
t << "\\par " << Rtf_Style["Reset"] << endl; t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << convertFileName(pi->name); t << convertFileName(pi->name);
t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
pi=exampleList.next();
} }
while (pi) for (++pdi;(pi=pdi.current());++pdi)
{ {
t << "\\par " << Rtf_Style["Reset"] << endl; t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection(); beginRTFSection();
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << convertFileName(pi->name); t << convertFileName(pi->name);
t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
pi=exampleList.next();
} }
} }
break; break;
case isPageDocumentation: case isPageDocumentation:
{ {
t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl; t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl;
PageInfo *pi=pageList.first(); PageSDictIterator pdi(*pageSDict);
PageInfo *pi=pdi.toFirst();
if (pi) if (pi)
{ {
QCString pageName; QCString pageName;
...@@ -971,9 +972,8 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -971,9 +972,8 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << pageName; t << pageName;
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
pi=pageList.next();
} }
while (pi) for (++pdi;(pi=pdi.current());++pdi)
{ {
QCString pageName; QCString pageName;
if (Config::caseSensitiveNames) if (Config::caseSensitiveNames)
...@@ -985,7 +985,6 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -985,7 +985,6 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << pageName; t << pageName;
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
pi=pageList.next();
} }
} }
break; break;
......
...@@ -105,6 +105,8 @@ class RTFGenerator : public OutputGenerator ...@@ -105,6 +105,8 @@ class RTFGenerator : public OutputGenerator
void writeAnchor(const char *fileName,const char *name); void writeAnchor(const char *fileName,const char *name);
void startCodeFragment(); void startCodeFragment();
void endCodeFragment(); void endCodeFragment();
void startPreFragment() { startCodeFragment(); }
void endPreFragment() { endCodeFragment(); }
void startCodeLine() { col=0; } void startCodeLine() { col=0; }
void endCodeLine() { lineBreak(); } void endCodeLine() { lineBreak(); }
void writeBoldString(const char *text) void writeBoldString(const char *text)
......
/******************************************************************************
*
*
*
*
* 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
...@@ -151,7 +151,7 @@ class TranslatorDutch : public Translator ...@@ -151,7 +151,7 @@ class TranslatorDutch : public Translator
QCString trModuleDocumentation() QCString trModuleDocumentation()
{ return "Module Documentatie"; } { return "Module Documentatie"; }
QCString trClassDocumentation() QCString trClassDocumentation()
{ return "Klasse Documentatie"; } { return "Klassen Documentatie"; }
QCString trFileDocumentation() QCString trFileDocumentation()
{ return "File Documentatie"; } { return "File Documentatie"; }
QCString trExampleDocumentation() QCString trExampleDocumentation()
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include "version.h" #include "version.h"
#include "groupdef.h" #include "groupdef.h"
#include "xml.h" #include "xml.h"
#include "page.h"
#ifndef _WIN32 #ifndef _WIN32
#include <unistd.h> #include <unistd.h>
...@@ -797,14 +798,14 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext) ...@@ -797,14 +798,14 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
parseText(ol,theTranslator->trFileMembers()); parseText(ol,theTranslator->trFileMembers());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (pageList.count()>0) if (pageSDict->count()>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"pages.html"); ol.startQuickIndexItem(extLink,"pages.html");
parseText(ol,theTranslator->trRelatedPages()); parseText(ol,theTranslator->trRelatedPages());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (exampleList.count()>0) if (exampleSDict->count()>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,"examples.html"); ol.startQuickIndexItem(extLink,"examples.html");
...@@ -2109,13 +2110,13 @@ bool generateLink(OutputList &ol,const char *clName, ...@@ -2109,13 +2110,13 @@ bool generateLink(OutputList &ol,const char *clName,
ol.docify(lt); ol.docify(lt);
return FALSE; 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); ol.writeObjectLink(0,pi->name,0,lt);
writePageRef(ol,pi->name,0); writePageRef(ol,pi->name,0);
return TRUE; 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); ol.writeObjectLink(0,convertFileName(pi->name)+"-example",0,lt);
writePageRef(ol,convertFileName(pi->name)+"-example",0); writePageRef(ol,convertFileName(pi->name)+"-example",0);
...@@ -2162,6 +2163,7 @@ void generateFileRef(OutputList &ol,const char *name,const char *text) ...@@ -2162,6 +2163,7 @@ void generateFileRef(OutputList &ol,const char *name,const char *text)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
#if 0
QCString substituteClassNames(const QCString &s) QCString substituteClassNames(const QCString &s)
{ {
int i=0,l,p; int i=0,l,p;
...@@ -2185,6 +2187,7 @@ QCString substituteClassNames(const QCString &s) ...@@ -2185,6 +2187,7 @@ QCString substituteClassNames(const QCString &s)
result+=s.mid(i,s.length()-i); result+=s.mid(i,s.length()-i);
return result; return result;
} }
#endif
//---------------------------------------------------------------------- //----------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment