summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2000-08-13 17:49:57 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2000-08-13 17:49:57 (GMT)
commit5ce25000172e185e0ca5b9f20538f80cbbfe0b0e (patch)
tree69018221b85af2e6f7d24d25d207dd6fdc8795ad /src
parentc4ef46195917656ebebed63e3fab5c135d9905a2 (diff)
downloadDoxygen-5ce25000172e185e0ca5b9f20538f80cbbfe0b0e.zip
Doxygen-5ce25000172e185e0ca5b9f20538f80cbbfe0b0e.tar.gz
Doxygen-5ce25000172e185e0ca5b9f20538f80cbbfe0b0e.tar.bz2
Release-1.2.1
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp1
-rw-r--r--src/code.l9
-rw-r--r--src/config.h4
-rw-r--r--src/config.l34
-rw-r--r--src/definition.h6
-rw-r--r--src/doc.l24
-rw-r--r--src/doxygen.cpp105
-rw-r--r--src/doxygen.h55
-rw-r--r--src/doxygen.pro.in2
-rw-r--r--src/htmlgen.cpp2
-rw-r--r--src/htmlgen.h2
-rw-r--r--src/index.cpp217
-rw-r--r--src/index.h2
-rw-r--r--src/latexgen.cpp24
-rw-r--r--src/latexgen.h2
-rw-r--r--src/mangen.h2
-rw-r--r--src/memberdef.cpp9
-rw-r--r--src/outputgen.h2
-rw-r--r--src/outputlist.cpp2
-rw-r--r--src/outputlist.h6
-rw-r--r--src/page.h58
-rw-r--r--src/pre.l4
-rw-r--r--src/rtfgen.cpp15
-rw-r--r--src/rtfgen.h2
-rw-r--r--src/sortdict.h173
-rw-r--r--src/translator_nl.h2
-rw-r--r--src/util.cpp11
27 files changed, 566 insertions, 209 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index bd7ee04..be5f1c2 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1635,6 +1635,7 @@ void ClassDef::determineImplUsageRelation()
}
QCString templSpec;
if (te>ts) templSpec = type.mid(ts,te-ts);
+ // TODO: also check using Nx::Cx cases here!
ClassDef *cd=getResolvedClass(name()+"::"+type.mid(i,l));
if (cd==0) cd=getResolvedClass(type.mid(i,l)); // TODO: also try inbetween scopes!
//printf("Search for class %s result=%p\n",type.mid(i,l).data(),cd);
diff --git a/src/code.l b/src/code.l
index 9edf6e2..7825142 100644
--- a/src/code.l
+++ b/src/code.l
@@ -298,6 +298,7 @@ static void addVariable()
g_codeVarList.append(new CodeVarDef(g_cvd));
}
}
+ //printf("g_codeVarList.count()=%d\n",g_codeVarList.count());
}
}
@@ -328,6 +329,7 @@ static void addParameter()
g_codeParmList.append(new CodeVarDef(g_cvd));
}
}
+ //printf("g_codeParmList.count()=%d\n",g_codeParmList.count());
}
}
@@ -747,7 +749,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<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; }
diff --git a/src/doc.l b/src/doc.l
index 4aa17c8..935b531 100644
--- a/src/doc.l
+++ b/src/doc.l
@@ -881,7 +881,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
outDoc->writeString(c);
}
<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("&nbsp;|&nbsp;");
+ }
+ 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() {}
+};
+
diff --git a/src/pre.l b/src/pre.l
index cf4df3b..f08aaa9 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -502,7 +502,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
}
else
{
- resExpr+=substArg;
+ resExpr+=" "+substArg+" ";
}
}
}
@@ -592,7 +592,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
{
// substitute the definition of the macro
//printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
- expMacro=def->definition.stripWhiteSpace();
+ expMacro=" "+def->definition.stripWhiteSpace()+" ";
replaced=TRUE;
len=l;
//printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data());
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index 29db892..8fef647 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -32,6 +32,7 @@
#include "language.h"
#include "dot.h"
#include "version.h"
+#include "page.h"
//#define DBG_RTF(x) x;
#define DBG_RTF(x)
@@ -935,31 +936,31 @@ void RTFGenerator::endIndexSection(IndexSections is)
case isExampleDocumentation:
{
//t << "}\n";
- PageInfo *pi=exampleList.first();
t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl;
+ PageSDictIterator pdi(*exampleSDict);
+ PageInfo *pi=pdi.toFirst();
if (pi)
{
t << "\\par " << Rtf_Style["Reset"] << endl;
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << convertFileName(pi->name);
t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- pi=exampleList.next();
}
- while (pi)
+ for (++pdi;(pi=pdi.current());++pdi)
{
t << "\\par " << Rtf_Style["Reset"] << endl;
beginRTFSection();
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << convertFileName(pi->name);
t << "-example.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- pi=exampleList.next();
}
}
break;
case isPageDocumentation:
{
t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl;
- PageInfo *pi=pageList.first();
+ PageSDictIterator pdi(*pageSDict);
+ PageInfo *pi=pdi.toFirst();
if (pi)
{
QCString pageName;
@@ -971,9 +972,8 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << pageName;
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- pi=pageList.next();
}
- while (pi)
+ for (++pdi;(pi=pdi.current());++pdi)
{
QCString pageName;
if (Config::caseSensitiveNames)
@@ -985,7 +985,6 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
t << pageName;
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- pi=pageList.next();
}
}
break;
diff --git a/src/rtfgen.h b/src/rtfgen.h
index d52352a..de873a2 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -105,6 +105,8 @@ class RTFGenerator : public OutputGenerator
void writeAnchor(const char *fileName,const char *name);
void startCodeFragment();
void endCodeFragment();
+ void startPreFragment() { startCodeFragment(); }
+ void endPreFragment() { endCodeFragment(); }
void startCodeLine() { col=0; }
void endCodeLine() { lineBreak(); }
void writeBoldString(const char *text)
diff --git a/src/sortdict.h b/src/sortdict.h
new file mode 100644
index 0000000..471a447
--- /dev/null
+++ b/src/sortdict.h
@@ -0,0 +1,173 @@
+/******************************************************************************
+ *
+ *
+ *
+ *
+ * Copyright (C) 1997-2000 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#ifndef _SORTDICT_H
+#define _SORTDICT_H
+
+#include "qtbc.h"
+#include <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
//----------------------------------------------------------------------