Commit 3c05bde5 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.11-20011014

parent bbd28a0f
DOXYGEN Version 1.2.11.1 DOXYGEN Version 1.2.11-20011014
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (07 October 2001) Dimitri van Heesch (14 October 2001)
DOXYGEN Version 1.2.11.1 DOXYGEN Version 1.2.11_20011014
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (07 October 2001) Dimitri van Heesch (dimitri@stack.nl) (14 October 2001)
1.2.11.1 1.2.11-20011014
...@@ -783,6 +783,7 @@ void CodeLineHandler::endLineNumber() ...@@ -783,6 +783,7 @@ void CodeLineHandler::endLineNumber()
printf("end linenumber\n"); printf("end linenumber\n");
m_parent->setDelegate(0); m_parent->setDelegate(0);
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// ProgramListingHandler // ProgramListingHandler
//---------------------------------------------------------------------- //----------------------------------------------------------------------
......
...@@ -119,6 +119,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -119,6 +119,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_hide_scope_names HIDE_SCOPE_NAMES <li> \refitem cfg_hide_scope_names HIDE_SCOPE_NAMES
<li> \refitem cfg_hide_undoc_classes HIDE_UNDOC_CLASSES <li> \refitem cfg_hide_undoc_classes HIDE_UNDOC_CLASSES
<li> \refitem cfg_hide_undoc_members HIDE_UNDOC_MEMBERS <li> \refitem cfg_hide_undoc_members HIDE_UNDOC_MEMBERS
<li> \refitem cfg_hide_undoc_relations HIDE_UNDOC_RELATIONS
<li> \refitem cfg_html_align_members HTML_ALIGN_MEMBERS <li> \refitem cfg_html_align_members HTML_ALIGN_MEMBERS
<li> \refitem cfg_html_footer HTML_FOOTER <li> \refitem cfg_html_footer HTML_FOOTER
<li> \refitem cfg_html_header HTML_HEADER <li> \refitem cfg_html_header HTML_HEADER
...@@ -318,13 +319,6 @@ followed by the descriptions of the tags grouped by category. ...@@ -318,13 +319,6 @@ followed by the descriptions of the tags grouped by category.
to \c NO (the default) then the documentation will be excluded. to \c NO (the default) then the documentation will be excluded.
Set it to \c YES to include the internal documentation. Set it to \c YES to include the internal documentation.
\anchor cfg_class_diagrams
<dt>\c CLASS_DIAGRAMS <dd>
\addindex CLASS_DIAGRAMS
If the \c CLASS_DIAGRAMS tag is set to \c YES (the default) doxygen will
generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or
super classes. Setting the tag to \c NO turns the diagrams off.
\anchor cfg_source_browser \anchor cfg_source_browser
<dt>\c SOURCE_BROWSER <dd> <dt>\c SOURCE_BROWSER <dd>
\addindex SOURCE_BROWSER \addindex SOURCE_BROWSER
...@@ -1133,9 +1127,19 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre> ...@@ -1133,9 +1127,19 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
</dl> </dl>
\subsection config_dot Dot options \subsection config_dot Dot options
\anchor cfg_have_dot \anchor cfg_class_diagrams
<dl> <dl>
<dt>\c CLASS_DIAGRAMS <dd>
\addindex CLASS_DIAGRAMS
If the \c CLASS_DIAGRAMS tag is set to \c YES (the default) doxygen will
generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or
super classes. Setting the tag to \c NO turns the diagrams off.
Note that this option is superceded by the HAVE_DOT option below.
This is only a fallback. It is recommended to install and use dot,
since it yield more powerful graphs.
\anchor cfg_have_dot
<dt>\c HAVE_DOT <dd> <dt>\c HAVE_DOT <dd>
\addindex HAVE_DOT \addindex HAVE_DOT
If you set the \c HAVE_DOT tag to \c YES then doxygen will assume the dot tool is If you set the \c HAVE_DOT tag to \c YES then doxygen will assume the dot tool is
...@@ -1166,6 +1170,13 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre> ...@@ -1166,6 +1170,13 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
If the \c TEMPLATE_RELATIONS and \c HAVE_DOT tags are set to \c YES then If the \c TEMPLATE_RELATIONS and \c HAVE_DOT tags are set to \c YES then
doxygen will show the relations between templates and their instances. doxygen will show the relations between templates and their instances.
\anchor cfg_hide_undoc_relations
<dt>\c HIDE_UNDOC_RELATIONS <dd>
\addindex HIDE_UNDOC_RELATIONS
If set to YES, the inheritance and collaboration graphs will hide
inheritance and usage relations if the target is undocumented
or is not a class.
\anchor cfg_include_graph \anchor cfg_include_graph
<dt>\c INCLUDE_GRAPH <dd> <dt>\c INCLUDE_GRAPH <dd>
\addindex INCLUDE_GRAPH \addindex INCLUDE_GRAPH
......
Name: doxygen Name: doxygen
Version: 1.2.11.1 Version: 1.2.11_20011014
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 4 Release: 4
Source: doxygen-%{version}.src.tar.gz Source: doxygen-%{version}.src.tar.gz
......
...@@ -2354,3 +2354,26 @@ QCString ClassDef::className() const ...@@ -2354,3 +2354,26 @@ QCString ClassDef::className() const
} }
return className; return className;
}; };
void ClassDef::addListReferences()
{
addRefItem(todoId(),testId(),bugId(),
theTranslator->trClass(TRUE,TRUE),
getOutputFileBase(),name()
);
MemberGroupListIterator mgli(*m_memberGroupList);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
mg->addListReferences(this);
}
constructors.addListReferences(this);
typedefMembers.addListReferences(this);
enumMembers.addListReferences(this);
enumValMembers.addListReferences(this);
functionMembers.addListReferences(this);
relatedMembers.addListReferences(this);
variableMembers.addListReferences(this);
propertyMembers.addListReferences(this);
}
...@@ -272,6 +272,7 @@ class ClassDef : public Definition ...@@ -272,6 +272,7 @@ class ClassDef : public Definition
void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec); void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
void setClassIsArtificial() { m_artificial = TRUE; } void setClassIsArtificial() { m_artificial = TRUE; }
void setIsStatic(bool b) { m_isStatic=b; } void setIsStatic(bool b) { m_isStatic=b; }
void addListReferences();
/*! Creates a new compound definition. /*! Creates a new compound definition.
* \param outerScope class, file or namespace in which this class is * \param outerScope class, file or namespace in which this class is
......
...@@ -1091,11 +1091,6 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1091,11 +1091,6 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
int s=0;while (!isId(yytext[s])) s++; int s=0;while (!isId(yytext[s])) s++;
int e=yyleng-1;while (!isId(yytext[e])) e--; int e=yyleng-1;while (!isId(yytext[e])) e--;
QCString varname = ((QCString)yytext).mid(s,e-s+1); QCString varname = ((QCString)yytext).mid(s,e-s+1);
//QCString text=yytext;
//QCString tmp=varname.copy();
//g_code->codify(text.left(s+1));
//generateClassLink(*g_code,tmp.data());
//g_code->codify(text.right(yyleng-e-1));
addType(); addType();
g_name=varname; g_name=varname;
} }
......
...@@ -1306,13 +1306,6 @@ void Config::create() ...@@ -1306,13 +1306,6 @@ void Config::create()
"Set it to YES to include the internal documentation. \n", "Set it to YES to include the internal documentation. \n",
FALSE FALSE
); );
cb = addBool(
"CLASS_DIAGRAMS",
"If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n"
"generate a class diagram (in Html and LaTeX) for classes with base or \n"
"super classes. Setting the tag to NO turns the diagrams off. \n",
TRUE
);
cb = addBool( cb = addBool(
"SOURCE_BROWSER", "SOURCE_BROWSER",
"If the SOURCE_BROWSER tag is set to YES then a list of source files will \n" "If the SOURCE_BROWSER tag is set to YES then a list of source files will \n"
...@@ -1717,8 +1710,10 @@ void Config::create() ...@@ -1717,8 +1710,10 @@ void Config::create()
"If the GENERATE_TREEVIEW tag is set to YES, a side panel will be\n" "If the GENERATE_TREEVIEW tag is set to YES, a side panel will be\n"
"generated containing a tree-like index structure (just like the one that \n" "generated containing a tree-like index structure (just like the one that \n"
"is generated for HTML Help). For this to work a browser that supports \n" "is generated for HTML Help). For this to work a browser that supports \n"
"JavaScript and frames is required (for instance Netscape 4.0+ \n" "JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, \n"
"or Internet explorer 4.0+). ", "or Internet explorer 4.0+). Note that for large projects the tree generation \n"
"can take a very long time. In such cases it is better to disable this feature. \n"
"Windows users are probably better off using the HTML help feature. \n",
FALSE FALSE
); );
cb->addDependency("GENERATE_HTML"); cb->addDependency("GENERATE_HTML");
...@@ -2020,6 +2015,15 @@ void Config::create() ...@@ -2020,6 +2015,15 @@ void Config::create()
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
addInfo( "Dot","Configuration options related to the dot tool "); addInfo( "Dot","Configuration options related to the dot tool ");
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
cb = addBool(
"CLASS_DIAGRAMS",
"If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n"
"generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or \n"
"super classes. Setting the tag to NO turns the diagrams off. Note that this \n"
"option is superceded by the HAVE_DOT option below. This is only a fallback. It is \n"
"recommended to install and use dot, since it yield more powerful graphs. \n",
TRUE
);
cb = addBool( cb = addBool(
"HAVE_DOT", "HAVE_DOT",
"If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \n" "If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \n"
...@@ -2053,6 +2057,14 @@ void Config::create() ...@@ -2053,6 +2057,14 @@ void Config::create()
TRUE TRUE
); );
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool(
"HIDE_UNDOC_RELATIONS",
"If set to YES, the inheritance and collaboration graphs will hide \n"
"inheritance and usage relations if the target is undocumented \n"
"or is not a class. \n",
TRUE
);
cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"INCLUDE_GRAPH", "INCLUDE_GRAPH",
"If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n" "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n"
......
...@@ -2223,7 +2223,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -2223,7 +2223,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocScan>{CMD}("\\"|"@"|"<"|">"|"&"|"$"|"#"|"%") { <DocScan>{CMD}("\\"|"@"|"<"|">"|"&"|"$"|"#"|"%") {
outDoc->docify(&yytext[1]); outDoc->docify(&yytext[1]);
} }
<DocScan,DocEmphasis,DocBold,DocCode>"%"[a-zA-Z_0-9\-]+ { <DocScan,DocEmphasis,DocBold,DocCode>"%"[a-z_A-Z][a-z_A-Z0-9:\-]* {
outDoc->docify(yytext+1); outDoc->docify(yytext+1);
} }
<DocEmphasis>{FILEMASK} { <DocEmphasis>{FILEMASK} {
......
...@@ -1530,6 +1530,7 @@ void generateGraphLegend(const char *path) ...@@ -1530,6 +1530,7 @@ void generateGraphLegend(const char *path)
return; return;
} }
QTextStream dotText(&dotFile); QTextStream dotText(&dotFile);
#if 0
dotText << "digraph inheritance\n"; dotText << "digraph inheritance\n";
dotText << "{\n"; dotText << "{\n";
dotText << " Node7 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n"; dotText << " Node7 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
...@@ -1546,6 +1547,27 @@ void generateGraphLegend(const char *path) ...@@ -1546,6 +1547,27 @@ void generateGraphLegend(const char *path)
dotText << " Node14 -> Node7 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n"; dotText << " Node14 -> Node7 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n";
dotText << " Node14 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_used.html\"];\n"; dotText << " Node14 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_used.html\"];\n";
dotText << "}\n"; dotText << "}\n";
#endif
dotText << "digraph inheritance\n";
dotText << "{\n";
dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",style=\"filled\" fontcolor=\"white\"];\n";
dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classPublicBase.html\"];\n";
dotText << " Node11 -> Node10 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node11 [shape=\"box\",label=\"Truncated\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"red\",URL=\"$classTruncated.html\"];\n";
dotText << " Node13 -> Node9 [dir=back,color=\"darkgreen\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classProtectedBase.html\"];\n";
dotText << " Node14 -> Node9 [dir=back,color=\"firebrick4\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classPrivateBase.html\"];\n";
dotText << " Node15 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node15 [shape=\"box\",label=\"Undocumented\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"grey75\"];\n";
dotText << " Node16 -> Node9 [dir=back,color=\"midnightblue\",fontsize=10,style=\"solid\",fontname=\"doxfont\"];\n";
dotText << " Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classTempl.html\"];\n";
dotText << " Node17 -> Node16 [dir=back,color=\"orange\",fontsize=10,style=\"dashed\",label=\"< int >\",fontname=\"doxfont\"];\n";
dotText << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classTempl.html\"];\n";
dotText << " Node18 -> Node9 [dir=back,color=\"darkorchid3\",fontsize=10,style=\"dashed\",label=\"m_usedClass\",fontname=\"doxfont\"];\n";
dotText << " Node18 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$classUsed.html\"];\n";
dotText << "}\n";
dotFile.close(); dotFile.close();
QDir d(path); QDir d(path);
......
This diff is collapsed.
...@@ -67,13 +67,10 @@ class Doxygen ...@@ -67,13 +67,10 @@ class Doxygen
static FileNameDict *includeNameDict; static FileNameDict *includeNameDict;
static FileNameDict *exampleNameDict; static FileNameDict *exampleNameDict;
static FileNameDict *inputNameDict; static FileNameDict *inputNameDict;
static FileNameList inputNameList;
static FileNameDict *imageNameDict; static FileNameDict *imageNameDict;
static FileNameDict *dotFileNameDict; static FileNameDict *dotFileNameDict;
static QStrList tagfileList; static QStrList tagfileList;
//static MemberNameList memberNameList;
//static MemberNameList functionNameList;
//static MemberNameDict memberNameDict;
//static MemberNameDict functionNameDict;
static MemberNameSDict memberNameSDict; static MemberNameSDict memberNameSDict;
static MemberNameSDict functionNameSDict; static MemberNameSDict functionNameSDict;
static FileList fileList; static FileList fileList;
...@@ -81,12 +78,9 @@ class Doxygen ...@@ -81,12 +78,9 @@ class Doxygen
static ClassDef unrelatedClass; static ClassDef unrelatedClass;
static QTextStream tagFile; static QTextStream tagFile;
static SectionDict sectionDict; static SectionDict sectionDict;
static FileNameList inputNameList;
static StringDict namespaceAliasDict; static StringDict namespaceAliasDict;
static GroupList groupList; //static GroupList groupList;
static GroupDict groupDict; static GroupSDict groupSDict;
//static NamespaceList namespaceList;
//static NamespaceDict namespaceDict;
static NamespaceSDict namespaceSDict; static NamespaceSDict namespaceSDict;
static FormulaList formulaList; static FormulaList formulaList;
static FormulaDict formulaDict; static FormulaDict formulaDict;
......
...@@ -654,3 +654,24 @@ bool FileDef::generateSourceFile() const ...@@ -654,3 +654,24 @@ bool FileDef::generateSourceFile() const
extension!=".doc" && extension!=".txt" && extension!=".dox"; extension!=".doc" && extension!=".txt" && extension!=".dox";
} }
void FileDef::addListReferences()
{
addRefItem(todoId(),testId(),bugId(),
theTranslator->trFile(TRUE,TRUE),
getOutputFileBase(),name()
);
MemberGroupListIterator mgli(*memberGroupList);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
mg->addListReferences(this);
}
docDefineMembers.addListReferences(this);
docProtoMembers.addListReferences(this);
docTypedefMembers.addListReferences(this);
docEnumMembers.addListReferences(this);
docFuncMembers.addListReferences(this);
docVarMembers.addListReferences(this);
}
...@@ -146,6 +146,8 @@ class FileDef : public Definition ...@@ -146,6 +146,8 @@ class FileDef : public Definition
void addMembersToMemberGroup(); void addMembersToMemberGroup();
void distributeMemberGroupDocumentation(); void distributeMemberGroupDocumentation();
void addListReferences();
//void generateXML(QTextStream &t); //void generateXML(QTextStream &t);
//void generateXMLSection(QTextStream &t,MemberList *ml,const char *type); //void generateXMLSection(QTextStream &t,MemberList *ml,const char *type);
......
...@@ -62,7 +62,6 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) : ...@@ -62,7 +62,6 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) :
docProtoMembers.setInGroup(TRUE); docProtoMembers.setInGroup(TRUE);
docTypedefMembers.setInGroup(TRUE); docTypedefMembers.setInGroup(TRUE);
docEnumMembers.setInGroup(TRUE); docEnumMembers.setInGroup(TRUE);
docEnumValMembers.setInGroup(TRUE);
docFuncMembers.setInGroup(TRUE); docFuncMembers.setInGroup(TRUE);
docVarMembers.setInGroup(TRUE); docVarMembers.setInGroup(TRUE);
...@@ -290,8 +289,6 @@ void GroupDef::removeMember(MemberDef *md) ...@@ -290,8 +289,6 @@ void GroupDef::removeMember(MemberDef *md)
docEnumMembers.remove(md); docEnumMembers.remove(md);
break; break;
case MemberDef::EnumValue: case MemberDef::EnumValue:
decEnumValMembers.remove(md);
docEnumValMembers.remove(md);
break; break;
case MemberDef::Prototype: case MemberDef::Prototype:
decProtoMembers.remove(md); decProtoMembers.remove(md);
...@@ -527,7 +524,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -527,7 +524,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
} }
} }
PageInfo *pi=0; PageInfo *pi=0;
PageSDictIterator pdi(*pageDict); PageSDict::Iterator pdi(*pageDict);
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
if (!pi->isReference()) if (!pi->isReference())
...@@ -590,7 +587,7 @@ void addClassToGroups(Entry *root,ClassDef *cd) ...@@ -590,7 +587,7 @@ void addClassToGroups(Entry *root,ClassDef *cd)
for (;(g=gli.current());++gli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{ {
gd->addClass(cd); gd->addClass(cd);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data()); //printf("Compound %s: in group %s\n",cd->name().data(),s->data());
...@@ -607,7 +604,7 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd) ...@@ -607,7 +604,7 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
{ {
GroupDef *gd=0; GroupDef *gd=0;
//printf("group `%s'\n",s->data()); //printf("group `%s'\n",s->data());
if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{ {
gd->addNamespace(nd); gd->addNamespace(nd);
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data()); //printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
...@@ -622,7 +619,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup) ...@@ -622,7 +619,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
for (;(g=gli.current());++gli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]) && if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]) &&
!gd->containsGroup(subGroup) ) !gd->containsGroup(subGroup) )
{ {
gd->addGroup(subGroup); gd->addGroup(subGroup);
...@@ -645,7 +642,7 @@ void addMemberToGroups(Entry *root,MemberDef *md) ...@@ -645,7 +642,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!g->groupname.isEmpty() && if (!g->groupname.isEmpty() &&
(gd=Doxygen::groupDict[g->groupname]) && (gd=Doxygen::groupSDict[g->groupname]) &&
g->pri >= pri) g->pri >= pri)
{ {
if( fgd && g->pri == pri ) { if( fgd && g->pri == pri ) {
...@@ -724,7 +721,7 @@ void addExampleToGroups(Entry *root,PageInfo *eg) ...@@ -724,7 +721,7 @@ void addExampleToGroups(Entry *root,PageInfo *eg)
for (;(g=gli.current());++gli) for (;(g=gli.current());++gli)
{ {
GroupDef *gd=0; GroupDef *gd=0;
if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname])) if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{ {
gd->addExample(eg); gd->addExample(eg);
//printf("Example %s: in group %s\n",eg->name().data(),s->data()); //printf("Example %s: in group %s\n",eg->name().data(),s->data());
...@@ -736,3 +733,25 @@ QCString GroupDef::getOutputFileBase() const ...@@ -736,3 +733,25 @@ QCString GroupDef::getOutputFileBase() const
{ {
return convertNameToFile(fileName); return convertNameToFile(fileName);
} }
void GroupDef::addListReferences()
{
addRefItem(todoId(),testId(),bugId(),
theTranslator->trGroup(TRUE,TRUE),
getOutputFileBase(),name()
);
MemberGroupListIterator mgli(*memberGroupList);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
mg->addListReferences(this);
}
docDefineMembers.addListReferences(this);
docProtoMembers.addListReferences(this);
docTypedefMembers.addListReferences(this);
docEnumMembers.addListReferences(this);
docFuncMembers.addListReferences(this);
docVarMembers.addListReferences(this);
}
...@@ -19,8 +19,7 @@ ...@@ -19,8 +19,7 @@
#define GROUPDEF_H #define GROUPDEF_H
#include "qtbc.h" #include "qtbc.h"
#include <qlist.h> #include "sortdict.h"
#include <qdict.h>
#include "definition.h" #include "definition.h"
#include "memberlist.h" #include "memberlist.h"
#include "memberdef.h" #include "memberdef.h"
...@@ -76,6 +75,8 @@ class GroupDef : public Definition ...@@ -76,6 +75,8 @@ class GroupDef : public Definition
void addMembersToMemberGroup(); void addMembersToMemberGroup();
void distributeMemberGroupDocumentation(); void distributeMemberGroupDocumentation();
void addListReferences();
bool visited; // number of times accessed for output - KPW bool visited; // number of times accessed for output - KPW
friend void writeGroupTreeNode(OutputList&, GroupDef*,bool); friend void writeGroupTreeNode(OutputList&, GroupDef*,bool);
...@@ -91,8 +92,8 @@ class GroupDef : public Definition ...@@ -91,8 +92,8 @@ class GroupDef : public Definition
FileList *fileList; // list of files in the group FileList *fileList; // list of files in the group
ClassSDict *classSDict; // list of classes in the group ClassSDict *classSDict; // list of classes in the group
NamespaceList *namespaceList; // list of namespaces in the group NamespaceList *namespaceList; // list of namespaces in the group
GroupList *groupList; // list of sub groups. GroupList *groupList; // list of sub groups.
GroupList *parentGroupList; // list of parent groups. GroupList *parentGroupList; // list of parent groups.
PageSDict *pageDict; // list of pages in the group PageSDict *pageDict; // list of pages in the group
PageSDict *exampleDict; // list of examples in the group PageSDict *exampleDict; // list of examples in the group
...@@ -113,7 +114,6 @@ class GroupDef : public Definition ...@@ -113,7 +114,6 @@ class GroupDef : public Definition
MemberList docProtoMembers; MemberList docProtoMembers;
MemberList docTypedefMembers; MemberList docTypedefMembers;
MemberList docEnumMembers; MemberList docEnumMembers;
MemberList docEnumValMembers;
MemberList docFuncMembers; MemberList docFuncMembers;
MemberList docVarMembers; MemberList docVarMembers;
...@@ -122,14 +122,15 @@ class GroupDef : public Definition ...@@ -122,14 +122,15 @@ class GroupDef : public Definition
MemberGroupDict *memberGroupDict; MemberGroupDict *memberGroupDict;
}; };
class GroupList : public QList<GroupDef> class GroupSDict : public SDict<GroupDef>
{ {
public:
GroupSDict(uint size) : SDict<GroupDef>(size) {}
virtual ~GroupSDict() {}
}; };
class GroupListIterator : public QListIterator<GroupDef> class GroupList : public QList<GroupDef>
{ {
public:
GroupListIterator(const GroupList &l) : QListIterator<GroupDef>(l) {}
}; };
void addClassToGroups(Entry *root,ClassDef *cd); void addClassToGroups(Entry *root,ClassDef *cd);
......
...@@ -350,10 +350,12 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level) ...@@ -350,10 +350,12 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
{ {
// UGLY HACK! // UGLY HACK!
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex); ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
if (level<6) ol.startIndexList(); if (level<6) ol.startIndexList();
ol.enableAll(); ol.enableAll();
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList(); ol.startItemList();
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -408,10 +410,12 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level) ...@@ -408,10 +410,12 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
{ {
// UGLY HACK! // UGLY HACK!
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex); ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
if (level<6) ol.endIndexList(); if (level<6) ol.endIndexList();
ol.enableAll(); ol.enableAll();
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList(); ol.endItemList();
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -571,10 +575,12 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started) ...@@ -571,10 +575,12 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started)
{ {
// UGLY HACK! // UGLY HACK!
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex); ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man);
ol.startIndexList(); ol.startIndexList();
ol.enableAll(); ol.enableAll();
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList(); ol.startItemList();
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -651,10 +657,12 @@ void writeClassHierarchy(OutputList &ol) ...@@ -651,10 +657,12 @@ void writeClassHierarchy(OutputList &ol)
{ {
// UGLY HACK! // UGLY HACK!
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex); ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man);
ol.endIndexList(); ol.endIndexList();
ol.enableAll(); ol.enableAll();
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList(); ol.endItemList();
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -2025,7 +2033,7 @@ void writeExampleIndex(OutputList &ol) ...@@ -2025,7 +2033,7 @@ void writeExampleIndex(OutputList &ol)
//ol.newParagraph(); //ol.newParagraph();
ol.endTextBlock(); ol.endTextBlock();
ol.startItemList(); ol.startItemList();
PageSDictIterator pdi(*Doxygen::exampleSDict); PageSDict::Iterator pdi(*Doxygen::exampleSDict);
PageInfo *pi=0; PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
...@@ -2063,7 +2071,7 @@ void writeExampleIndex(OutputList &ol) ...@@ -2063,7 +2071,7 @@ void writeExampleIndex(OutputList &ol)
void countRelatedPages(int &docPages,int &indexPages) void countRelatedPages(int &docPages,int &indexPages)
{ {
docPages=indexPages=0; docPages=indexPages=0;
PageSDictIterator pdi(*Doxygen::pageSDict); PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=0; PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
...@@ -2129,7 +2137,7 @@ void writePageIndex(OutputList &ol) ...@@ -2129,7 +2137,7 @@ void writePageIndex(OutputList &ol)
//ol.newParagraph(); //ol.newParagraph();
ol.endTextBlock(); ol.endTextBlock();
ol.startItemList(); ol.startItemList();
PageSDictIterator pdi(*Doxygen::pageSDict); PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=0; PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
{ {
...@@ -2180,9 +2188,9 @@ void writePageIndex(OutputList &ol) ...@@ -2180,9 +2188,9 @@ void writePageIndex(OutputList &ol)
int countGroups() int countGroups()
{ {
int count=0; int count=0;
GroupListIterator gli(Doxygen::groupList); GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd; GroupDef *gd;
for (;(gd=gli.current());++gli) for (gli.toFirst();(gd=gli.current());++gli)
{ {
if (!gd->isReference()) if (!gd->isReference())
{ {
...@@ -2237,8 +2245,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) ...@@ -2237,8 +2245,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
ftvHelp = FTVHelp::getInstance(); ftvHelp = FTVHelp::getInstance();
} }
GroupDef *subgd = 0;
GroupListIterator gli(*gd->groupList);
if (!gd->visited && (!gd->isASubGroup() || subLevel)) if (!gd->visited && (!gd->isASubGroup() || subLevel))
{ {
//printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers()); //printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers());
...@@ -2251,7 +2257,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) ...@@ -2251,7 +2257,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
numSubItems += gd->docDefineMembers.count(); numSubItems += gd->docDefineMembers.count();
numSubItems += gd->docTypedefMembers.count(); numSubItems += gd->docTypedefMembers.count();
numSubItems += gd->docEnumMembers.count(); numSubItems += gd->docEnumMembers.count();
numSubItems += gd->docEnumValMembers.count();
numSubItems += gd->docFuncMembers.count(); numSubItems += gd->docFuncMembers.count();
numSubItems += gd->docVarMembers.count(); numSubItems += gd->docVarMembers.count();
numSubItems += gd->docProtoMembers.count(); numSubItems += gd->docProtoMembers.count();
...@@ -2293,7 +2298,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) ...@@ -2293,7 +2298,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
//ol.writeEndAnnoItem(gd->getOutputFileBase()); //ol.writeEndAnnoItem(gd->getOutputFileBase());
// write pages // write pages
PageSDictIterator pli(*gd->pageDict); PageSDict::Iterator pli(*gd->pageDict);
PageInfo *pi = 0; PageInfo *pi = 0;
for (pli.toFirst();(pi=pli.current());++pli) for (pli.toFirst();(pi=pli.current());++pli)
{ {
...@@ -2316,6 +2321,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) ...@@ -2316,6 +2321,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
if (hasSubGroups) if (hasSubGroups)
{ {
ol.startItemList(); ol.startItemList();
QListIterator<GroupDef> gli(*gd->groupList);
GroupDef *subgd = 0;
for (gli.toLast();(subgd=gli.current());--gli) for (gli.toLast();(subgd=gli.current());--gli)
{ {
writeGroupTreeNode(ol,subgd,TRUE); writeGroupTreeNode(ol,subgd,TRUE);
...@@ -2338,7 +2345,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) ...@@ -2338,7 +2345,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
MemInfo(&gd->docDefineMembers, theTranslator->trDefines()), MemInfo(&gd->docDefineMembers, theTranslator->trDefines()),
MemInfo(&gd->docTypedefMembers, theTranslator->trTypedefs()), MemInfo(&gd->docTypedefMembers, theTranslator->trTypedefs()),
MemInfo(&gd->docEnumMembers, theTranslator->trEnumerations()), MemInfo(&gd->docEnumMembers, theTranslator->trEnumerations()),
MemInfo(&gd->docEnumValMembers, theTranslator->trEnumerationValues()),
MemInfo(&gd->docFuncMembers, theTranslator->trFunctions()), MemInfo(&gd->docFuncMembers, theTranslator->trFunctions()),
MemInfo(&gd->docVarMembers, theTranslator->trVariables()), MemInfo(&gd->docVarMembers, theTranslator->trVariables()),
MemInfo(&gd->docProtoMembers, theTranslator->trFuncProtos()), MemInfo(&gd->docProtoMembers, theTranslator->trFuncProtos()),
...@@ -2491,7 +2497,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) ...@@ -2491,7 +2497,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
ftvHelp->incContentsDepth(); ftvHelp->incContentsDepth();
} }
PageSDictIterator eli(*(gd->exampleDict)); PageSDict::Iterator eli(*(gd->exampleDict));
PageInfo *pi=eli.toFirst(); PageInfo *pi=eli.toFirst();
while (pi) while (pi)
{ {
...@@ -2521,9 +2527,9 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) ...@@ -2521,9 +2527,9 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
void writeGroupHierarchy(OutputList &ol) void writeGroupHierarchy(OutputList &ol)
{ {
ol.startItemList(); ol.startItemList();
GroupListIterator gli(Doxygen::groupList); GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd; GroupDef *gd;
for (;(gd=gli.current());++gli) for (gli.toFirst();(gd=gli.current());++gli)
{ {
writeGroupTreeNode(ol,gd,FALSE); writeGroupTreeNode(ol,gd,FALSE);
} }
......
...@@ -504,9 +504,10 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -504,9 +504,10 @@ void LatexGenerator::startIndexSection(IndexSections is)
break; break;
case isModuleDocumentation: case isModuleDocumentation:
{ {
GroupDef *gd=Doxygen::groupList.first(); GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
bool found=FALSE; bool found=FALSE;
while (gd && !found) for (gli.toFirst();(gd=gli.current()) && !found;++gli)
{ {
if (!gd->isReference()) if (!gd->isReference())
{ {
...@@ -514,7 +515,6 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -514,7 +515,6 @@ void LatexGenerator::startIndexSection(IndexSections is)
t << "{"; //Module Documentation}\n"; t << "{"; //Module Documentation}\n";
found=TRUE; found=TRUE;
} }
gd=Doxygen::groupList.next();
} }
} }
break; break;
...@@ -659,25 +659,24 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -659,25 +659,24 @@ void LatexGenerator::endIndexSection(IndexSections is)
break; break;
case isModuleDocumentation: case isModuleDocumentation:
{ {
GroupDef *gd=Doxygen::groupList.first(); GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
bool found=FALSE; bool found=FALSE;
while (gd && !found) for (gli.toFirst();(gd=gli.current()) && !found;++gli)
{ {
if (!gd->isReference()) if (!gd->isReference())
{ {
t << "}\n\\input{" << gd->getOutputFileBase() << "}\n"; t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
found=TRUE; found=TRUE;
} }
gd=Doxygen::groupList.next();
} }
while (gd) for (;(gd=gli.current());++gli)
{ {
if (!gd->isReference()) if (!gd->isReference())
{ {
if (compactLatex) t << "\\input"; else t << "\\include"; if (compactLatex) t << "\\input"; else t << "\\include";
t << "{" << gd->getOutputFileBase() << "}\n"; t << "{" << gd->getOutputFileBase() << "}\n";
} }
gd=Doxygen::groupList.next();
} }
} }
break; break;
...@@ -759,7 +758,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -759,7 +758,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
case isExampleDocumentation: case isExampleDocumentation:
{ {
t << "}\n"; t << "}\n";
PageSDictIterator pdi(*Doxygen::exampleSDict); PageSDict::Iterator pdi(*Doxygen::exampleSDict);
PageInfo *pi=pdi.toFirst(); PageInfo *pi=pdi.toFirst();
if (pi) if (pi)
{ {
...@@ -775,7 +774,7 @@ void LatexGenerator::endIndexSection(IndexSections is) ...@@ -775,7 +774,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
case isPageDocumentation: case isPageDocumentation:
{ {
t << "}\n"; t << "}\n";
PageSDictIterator pdi(*Doxygen::pageSDict); PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=pdi.toFirst(); PageInfo *pi=pdi.toFirst();
bool first=TRUE; bool first=TRUE;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
......
...@@ -1675,3 +1675,20 @@ void MemberDef::setInitializer(const char *initializer) ...@@ -1675,3 +1675,20 @@ void MemberDef::setInitializer(const char *initializer)
init=init.left(p+1); init=init.left(p+1);
initLines=init.contains('\n'); initLines=init.contains('\n');
} }
void MemberDef::addListReference(Definition *d)
{
visited=TRUE;
QCString memLabel;
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
memLabel=theTranslator->trGlobal(TRUE,TRUE);
}
else
{
memLabel=theTranslator->trMember(TRUE,TRUE);
}
addRefItem(todoId(),testId(),bugId(),memLabel,
d->getOutputFileBase()+":"+anchor(),name(),argsString());
}
...@@ -230,6 +230,7 @@ class MemberDef : public Definition ...@@ -230,6 +230,7 @@ class MemberDef : public Definition
MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs, MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
ArgumentList *actualArgs); ArgumentList *actualArgs);
void setTemplateMaster(MemberDef *mt) { m_templateMaster=mt; } void setTemplateMaster(MemberDef *mt) { m_templateMaster=mt; }
void addListReference(Definition *d);
bool visited; bool visited;
......
...@@ -204,3 +204,8 @@ void MemberGroup::setInGroup(bool b) ...@@ -204,3 +204,8 @@ void MemberGroup::setInGroup(bool b)
{ {
memberList->setInGroup(b); memberList->setInGroup(b);
} }
void MemberGroup::addListReferences(Definition *def)
{
memberList->addListReferences(def);
}
...@@ -65,6 +65,7 @@ class MemberGroup /* : public Definition */ ...@@ -65,6 +65,7 @@ class MemberGroup /* : public Definition */
int numDecMembers() const; int numDecMembers() const;
int numDocMembers() const; int numDocMembers() const;
void setInGroup(bool b); void setInGroup(bool b);
void addListReferences(Definition *d);
private: private:
MemberList *memberList; // list of all members in the group MemberList *memberList; // list of all members in the group
......
...@@ -553,4 +553,25 @@ void MemberList::addMemberGroup(MemberGroup *mg) ...@@ -553,4 +553,25 @@ void MemberList::addMemberGroup(MemberGroup *mg)
memberGroupList->append(mg); memberGroupList->append(mg);
} }
void MemberList::addListReferences(Definition *def)
{
MemberListIterator mli(*this);
MemberDef *md;
for ( ; (md=mli.current()) ; ++mli)
{
if (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)
{
md->addListReference(def);
}
}
if (memberGroupList)
{
MemberGroupListIterator mgli(*memberGroupList);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
mg->addListReferences(def);
}
}
}
...@@ -54,6 +54,7 @@ class MemberList : public QList<MemberDef> ...@@ -54,6 +54,7 @@ class MemberList : public QList<MemberDef>
Definition *container,const char *title); Definition *container,const char *title);
void addMemberGroup(MemberGroup *mg); void addMemberGroup(MemberGroup *mg);
void setInGroup(bool group) { m_inGroup=group; } void setInGroup(bool group) { m_inGroup=group; }
void addListReferences(Definition *def);
private: private:
int m_varCnt,m_funcCnt,m_enumCnt,m_enumValCnt,m_typeCnt; int m_varCnt,m_funcCnt,m_enumCnt,m_enumValCnt,m_typeCnt;
......
...@@ -40,25 +40,6 @@ class MemberNameIterator : public QListIterator<MemberDef> ...@@ -40,25 +40,6 @@ class MemberNameIterator : public QListIterator<MemberDef>
MemberNameIterator( const MemberName &list); MemberNameIterator( const MemberName &list);
}; };
#if 0
class MemberNameList : public QList<MemberName>
{
public:
MemberNameList();
~MemberNameList();
int compareItems(GCI item1,GCI item2);
};
class MemberNameListIterator : public QListIterator<MemberName>
{
public:
MemberNameListIterator( const MemberNameList &list );
};
typedef QDict<MemberName> MemberNameDict;
#endif
class MemberNameSDict : public SDict<MemberName> class MemberNameSDict : public SDict<MemberName>
{ {
public: public:
...@@ -100,34 +81,6 @@ class MemberNameInfoIterator : public QListIterator<MemberInfo> ...@@ -100,34 +81,6 @@ class MemberNameInfoIterator : public QListIterator<MemberInfo>
: QListIterator<MemberInfo>(mnii) {} : QListIterator<MemberInfo>(mnii) {}
}; };
#if 0
class MemberNameInfoList : public QList<MemberNameInfo>
{
public:
~MemberNameInfoList() {}
int compareItems(GCI item1,GCI item2)
{ return stricmp(
((MemberNameInfo *)item1)->memberName(),
((MemberNameInfo *)item2)->memberName()
);
}
};
class MemberNameInfoDict : public QDict<MemberNameInfo>
{
public:
MemberNameInfoDict(int size) : QDict<MemberNameInfo>(size) {}
~MemberNameInfoDict() {}
};
class MemberNameInfoListIterator : public QListIterator<MemberNameInfo>
{
public:
MemberNameInfoListIterator(const MemberNameInfoList &mil) :
QListIterator<MemberNameInfo>(mil) {}
};
#endif
class MemberNameInfoSDict : public SDict<MemberNameInfo> class MemberNameInfoSDict : public SDict<MemberNameInfo>
{ {
......
...@@ -374,4 +374,23 @@ void NamespaceDef::addInnerCompound(Definition *d) ...@@ -374,4 +374,23 @@ void NamespaceDef::addInnerCompound(Definition *d)
m_innerCompounds->append(d->localName(),d); m_innerCompounds->append(d->localName(),d);
} }
void NamespaceDef::addListReferences()
{
addRefItem(todoId(),testId(),bugId(),
theTranslator->trNamespace(TRUE,TRUE),
getOutputFileBase(),name()
);
MemberGroupListIterator mgli(*memberGroupList);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
mg->addListReferences(this);
}
docDefineMembers.addListReferences(this);
docProtoMembers.addListReferences(this);
docTypedefMembers.addListReferences(this);
docEnumMembers.addListReferences(this);
docFuncMembers.addListReferences(this);
docVarMembers.addListReferences(this);
}
...@@ -73,6 +73,7 @@ class NamespaceDef : public Definition ...@@ -73,6 +73,7 @@ class NamespaceDef : public Definition
virtual Definition *findInnerCompound(const char *name); virtual Definition *findInnerCompound(const char *name);
void addInnerCompound(Definition *d); void addInnerCompound(Definition *d);
void addListReferences();
//protected: //protected:
// void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const); // void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
......
...@@ -108,13 +108,3 @@ class PageSDict : public SDict<PageInfo> ...@@ -108,13 +108,3 @@ class PageSDict : public SDict<PageInfo>
} }
}; };
// typedef is to get around Solaris compile problem
typedef SDict<PageInfo>::Iterator _SDictPageInfoIterator;
class PageSDictIterator : public _SDictPageInfoIterator
{
public:
PageSDictIterator(const PageSDict &d) : _SDictPageInfoIterator(d) {}
~PageSDictIterator() {}
};
...@@ -1040,6 +1040,14 @@ BN [ \t\r\n] ...@@ -1040,6 +1040,14 @@ BN [ \t\r\n]
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
BEGIN(CopyLine); BEGIN(CopyLine);
} }
<Start>^{B}*[_A-Z][_A-Z0-9]*"("[^\)\n]*")"/{BN}{1,10}*[:{] { // constructors?
int i;
for (i=yyleng-1;i>=0;i--)
{
unput(yytext[i]);
}
BEGIN(CopyLine);
}
<Start>^{B}*[_A-Z][_A-Z0-9]*"("[^\)\n]*")"{B}*\n { // function like macro <Start>^{B}*[_A-Z][_A-Z0-9]*"("[^\)\n]*")"{B}*\n { // function like macro
static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS"); static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS");
QCString name(yytext); QCString name(yytext);
......
...@@ -969,16 +969,16 @@ void RTFGenerator::startIndexSection(IndexSections is) ...@@ -969,16 +969,16 @@ void RTFGenerator::startIndexSection(IndexSections is)
case isModuleDocumentation: case isModuleDocumentation:
{ {
//Module Documentation //Module Documentation
GroupDef *gd=Doxygen::groupList.first(); GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
bool found=FALSE; bool found=FALSE;
while (gd && !found) for (gli.toFirst();(gd=gli.current()) && !found;++gli)
{ {
if (!gd->isReference()) if (!gd->isReference())
{ {
beginRTFChapter(); beginRTFChapter();
found=TRUE; found=TRUE;
} }
gd=Doxygen::groupList.next();
} }
} }
break; break;
...@@ -1185,9 +1185,10 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -1185,9 +1185,10 @@ void RTFGenerator::endIndexSection(IndexSections is)
break; break;
case isModuleDocumentation: case isModuleDocumentation:
{ {
GroupDef *gd=Doxygen::groupList.first(); GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
t << "{\\tc \\v " << theTranslator->trModuleDocumentation() << "}"<< endl; t << "{\\tc \\v " << theTranslator->trModuleDocumentation() << "}"<< endl;
while (gd) for (gli.toFirst();(gd=gli.current());++gli)
{ {
if (!gd->isReference()) if (!gd->isReference())
{ {
...@@ -1196,7 +1197,6 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -1196,7 +1197,6 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << gd->getOutputFileBase(); t << gd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
} }
gd=Doxygen::groupList.next();
} }
} }
break; break;
...@@ -1301,7 +1301,7 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -1301,7 +1301,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{ {
//t << "}\n"; //t << "}\n";
t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl; t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl;
PageSDictIterator pdi(*Doxygen::exampleSDict); PageSDict::Iterator pdi(*Doxygen::exampleSDict);
PageInfo *pi=pdi.toFirst(); PageInfo *pi=pdi.toFirst();
if (pi) if (pi)
{ {
...@@ -1323,7 +1323,7 @@ void RTFGenerator::endIndexSection(IndexSections is) ...@@ -1323,7 +1323,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
case isPageDocumentation: case isPageDocumentation:
{ {
t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl; t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl;
PageSDictIterator pdi(*Doxygen::pageSDict); PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=pdi.toFirst(); PageInfo *pi=pdi.toFirst();
bool first=TRUE; bool first=TRUE;
for (pdi.toFirst();(pi=pdi.current());++pdi) for (pdi.toFirst();(pi=pdi.current());++pdi)
...@@ -1960,9 +1960,10 @@ void RTFGenerator::endMemberDescription() ...@@ -1960,9 +1960,10 @@ void RTFGenerator::endMemberDescription()
void RTFGenerator::startDescList(SectionTypes) void RTFGenerator::startDescList(SectionTypes)
{ {
DBG_RTF(t << "{\\comment (startDescList)}" << endl) DBG_RTF(t << "{\\comment (startDescList)}" << endl)
t << "{"; t << "{"; // ends at endDescList
newParagraph(); t << "{"; // ends at endDescTitle
startBold(); startBold();
newParagraph();
} }
void RTFGenerator::endDescTitle() void RTFGenerator::endDescTitle()
...@@ -1978,25 +1979,23 @@ void RTFGenerator::endDescTitle() ...@@ -1978,25 +1979,23 @@ void RTFGenerator::endDescTitle()
void RTFGenerator::writeDescItem() void RTFGenerator::writeDescItem()
{ {
DBG_RTF(t << "{\\comment (writeDescItem) }" << endl) DBG_RTF(t << "{\\comment (writeDescItem) }" << endl)
// incrementIndentLevel();
//t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
} }
void RTFGenerator::endDescList() void RTFGenerator::endDescList()
{ {
DBG_RTF(t << "{\\comment (endDescList)}" << endl) DBG_RTF(t << "{\\comment (endDescList)}" << endl)
newParagraph(); newParagraph();
//t << "}";
decrementIndentLevel(); decrementIndentLevel();
m_omitParagraph = TRUE; m_omitParagraph = TRUE;
//t << Rtf_Style_Reset << styleStack.top() << endl; t << "}";
t << Rtf_Style_Reset << endl;
} }
void RTFGenerator::startParamList(ParamListTypes) void RTFGenerator::startParamList(ParamListTypes)
{ {
DBG_RTF(t << "{\\comment (startParamList)}" << endl) DBG_RTF(t << "{\\comment (startParamList)}" << endl)
t << "{"; t << "{"; // ends at endParamList
t << "{"; // ends at endDescTitle
startBold();
newParagraph(); newParagraph();
} }
...@@ -2004,10 +2003,9 @@ void RTFGenerator::endParamList() ...@@ -2004,10 +2003,9 @@ void RTFGenerator::endParamList()
{ {
DBG_RTF(t << "{\\comment (endParamList)}" << endl) DBG_RTF(t << "{\\comment (endParamList)}" << endl)
newParagraph(); newParagraph();
t << "}";
decrementIndentLevel(); decrementIndentLevel();
m_omitParagraph = TRUE; m_omitParagraph = TRUE;
//t << Rtf_Style_Reset << styleStack.top() << endl; t << "}";
} }
...@@ -2295,7 +2293,7 @@ void RTFGenerator::endDotFile(bool) ...@@ -2295,7 +2293,7 @@ void RTFGenerator::endDotFile(bool)
void RTFGenerator::startDescTable() void RTFGenerator::startDescTable()
{ {
DBG_RTF(t << "{\\comment (startDescTable) }" << endl) DBG_RTF(t << "{\\comment (startDescTable) }" << endl)
t << "{" << endl; //t << "{" << endl;
//incrementIndentLevel(); //incrementIndentLevel();
//t << Rtf_Style_Reset << Rtf_CList_DepthStyle(); //t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
} }
...@@ -2304,7 +2302,7 @@ void RTFGenerator::endDescTable() ...@@ -2304,7 +2302,7 @@ void RTFGenerator::endDescTable()
{ {
//decrementIndentLevel(); //decrementIndentLevel();
DBG_RTF(t << "{\\comment (endDescTable)}" << endl) DBG_RTF(t << "{\\comment (endDescTable)}" << endl)
t << "}" << endl; //t << "}" << endl;
//t << Rtf_Style_Reset << styleStack.top(); //t << Rtf_Style_Reset << styleStack.top();
} }
...@@ -2327,12 +2325,14 @@ void RTFGenerator::endDescTableTitle() ...@@ -2327,12 +2325,14 @@ void RTFGenerator::endDescTableTitle()
void RTFGenerator::startDescTableData() void RTFGenerator::startDescTableData()
{ {
DBG_RTF(t << "{\\comment (startDescTableData) }" << endl) DBG_RTF(t << "{\\comment (startDescTableData) }" << endl)
m_omitParagraph=FALSE;
} }
void RTFGenerator::endDescTableData() void RTFGenerator::endDescTableData()
{ {
DBG_RTF(t << "{\\comment (endDescTableData) }" << endl) DBG_RTF(t << "{\\comment (endDescTableData) }" << endl)
newParagraph(); newParagraph();
m_omitParagraph=TRUE;
} }
// a style for list formatted as a "bulleted list" // a style for list formatted as a "bulleted list"
...@@ -2661,6 +2661,50 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g) ...@@ -2661,6 +2661,50 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
t << "}" << endl; t << "}" << endl;
} }
/** Tests the integrity of the result by counting brackets.
*
*/
void testRTFOutput(const char *name)
{
int bcount=0;
int line=1;
int c;
QFile f(name);
if (f.open(IO_ReadOnly))
{
while ((c=f.getch())!=-1)
{
if (c=='\\') // escape char
{
c=f.getch();
if (c==-1) break;
}
else if (c=='{') // open bracket
{
bcount++;
}
else if (c=='}') // close bracket
{
bcount--;
if (bcount<0)
{
goto err;
break;
}
}
else if (c=='\n') // newline
{
line++;
}
}
}
if (bcount==0) return; // file is OK.
err:
err("Error: RTF integrity test failed at line %d of %s due to a bracket mismatch.\n",line,name);
err(" Please try to create a small code example that produces this error \n"
" and send that to dimitri@stack.nl.\n");
}
/** /**
* This is an API to a VERY brittle RTF preprocessor that combines nested * This is an API to a VERY brittle RTF preprocessor that combines nested
* RTF files. This version replaces the infile with the new file * RTF files. This version replaces the infile with the new file
...@@ -2708,6 +2752,8 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name) ...@@ -2708,6 +2752,8 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name)
thisDir.remove(mainRTFName); thisDir.remove(mainRTFName);
thisDir.rename(combinedName,mainRTFName); thisDir.rename(combinedName,mainRTFName);
testRTFOutput(mainRTFName);
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return TRUE; return TRUE;
} }
......
...@@ -1051,6 +1051,8 @@ class TranslatorEnglish : public Translator ...@@ -1051,6 +1051,8 @@ class TranslatorEnglish : public Translator
"class Undocumented { };\n\n" "class Undocumented { };\n\n"
"/*! Class that is inherited using public inheritance */\n" "/*! Class that is inherited using public inheritance */\n"
"class PublicBase : public Truncated { };\n\n" "class PublicBase : public Truncated { };\n\n"
"/*! A template class */\n"
"template<class T> class Templ { };\n\n"
"/*! Class that is inherited using protected inheritance */\n" "/*! Class that is inherited using protected inheritance */\n"
"class ProtectedBase { };\n\n" "class ProtectedBase { };\n\n"
"/*! Class that is inherited using private inheritance */\n" "/*! Class that is inherited using private inheritance */\n"
...@@ -1062,13 +1064,14 @@ class TranslatorEnglish : public Translator ...@@ -1062,13 +1064,14 @@ class TranslatorEnglish : public Translator
" protected ProtectedBase,\n" " protected ProtectedBase,\n"
" private PrivateBase,\n" " private PrivateBase,\n"
" public Undocumented\n" " public Undocumented\n"
" public Templ<int>\n"
"{\n" "{\n"
" private:\n" " private:\n"
" Used *m_usedClass;\n" " Used *m_usedClass;\n"
"};\n" "};\n"
"\\endcode\n" "\\endcode\n"
"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file " "If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
"is set to 200 this will result in the following graph:" "is set to 240 this will result in the following graph:"
"<p><center><img src=\"graph_legend.gif\"></center>\n" "<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p>\n" "<p>\n"
"The boxes in the above graph have the following meaning:\n" "The boxes in the above graph have the following meaning:\n"
...@@ -1077,9 +1080,9 @@ class TranslatorEnglish : public Translator ...@@ -1077,9 +1080,9 @@ class TranslatorEnglish : public Translator
"graph is generated.\n" "graph is generated.\n"
"<li>%A box with a black border denotes a documented struct or class.\n" "<li>%A box with a black border denotes a documented struct or class.\n"
"<li>%A box with a grey border denotes an undocumented struct or class.\n" "<li>%A box with a grey border denotes an undocumented struct or class.\n"
"<li>%A box with a red border denotes a documented struct or class for\n" "<li>%A box with a red border denotes a documented struct or class for"
"which not all inheritance/containment relations are shown. %A graph is " "which not all inheritance/containment relations are shown. %A graph is "
"truncated if it does not fit within the specified boundaries." "truncated if it does not fit within the specified boundaries.\n"
"</ul>\n" "</ul>\n"
"The arrows have the following meaning:\n" "The arrows have the following meaning:\n"
"<ul>\n" "<ul>\n"
...@@ -1089,7 +1092,10 @@ class TranslatorEnglish : public Translator ...@@ -1089,7 +1092,10 @@ class TranslatorEnglish : public Translator
"<li>%A dark red arrow is used for private inheritance.\n" "<li>%A dark red arrow is used for private inheritance.\n"
"<li>%A purple dashed arrow is used if a class is contained or used " "<li>%A purple dashed arrow is used if a class is contained or used "
"by another class. The arrow is labeled with the variable(s) " "by another class. The arrow is labeled with the variable(s) "
"through which the pointed class or struct is accessible. \n" "through which the pointed class or struct is accessible.\n"
"<li>%A yellow dashed arrow denotes a relation between a template instance and "
"the template class it was instantiated from. The arrow is labeled with "
"the template parameters of the instance.\n"
"</ul>\n"; "</ul>\n";
} }
/*! text for the link to the legend page */ /*! text for the link to the legend page */
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#include "example.h" #include "example.h"
#include "version.h" #include "version.h"
#include "groupdef.h" #include "groupdef.h"
//#include "xml.h" #include "reflist.h"
#include "page.h" #include "page.h"
#ifndef _WIN32 #ifndef _WIN32
...@@ -2557,7 +2557,7 @@ bool generateRef(OutputDocInterface &od,const char *scName, ...@@ -2557,7 +2557,7 @@ bool generateRef(OutputDocInterface &od,const char *scName,
} }
return TRUE; return TRUE;
} }
else if (inSeeBlock && !nameStr.isEmpty() && (gd=Doxygen::groupDict[nameStr])) else if (inSeeBlock && !nameStr.isEmpty() && (gd=Doxygen::groupSDict[nameStr]))
{ // group link { // group link
od.startTextLink(gd->getOutputFileBase(),0); od.startTextLink(gd->getOutputFileBase(),0);
if (rt) // explict link text if (rt) // explict link text
...@@ -2636,7 +2636,7 @@ bool generateLink(OutputDocInterface &od,const char *clName, ...@@ -2636,7 +2636,7 @@ bool generateLink(OutputDocInterface &od,const char *clName,
} }
return TRUE; return TRUE;
} }
else if ((gd=Doxygen::groupDict[linkRef])) // link to a group else if ((gd=Doxygen::groupSDict[linkRef])) // link to a group
{ {
od.startTextLink(gd->getOutputFileBase(),0); od.startTextLink(gd->getOutputFileBase(),0);
if (lt) if (lt)
...@@ -3431,3 +3431,178 @@ found: ...@@ -3431,3 +3431,178 @@ found:
return p; return p;
} }
//----------------------------------------------------------------------------
void addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,QList<QCString> *anchors,
const char *fileName,int startLine,
int todoId,int testId,int bugId,GroupDef *gd=0,
TagInfo *tagInfo=0
)
{
PageInfo *pi=0;
if ((pi=Doxygen::pageSDict->find(name)) && !tagInfo)
{
// append documentation block to the page.
pi->doc+="\n\n"+doc;
}
else // new page
{
QCString baseName=name;
if (baseName.right(4)==".tex")
baseName=baseName.left(baseName.length()-4);
else if (baseName.right(5)==".html")
baseName=baseName.left(baseName.length()-5);
QCString title=ptitle.stripWhiteSpace();
pi=new PageInfo(fileName,startLine,baseName,doc,title);
pi->todoId=todoId;
pi->testId=testId;
pi->bugId=bugId;
if (tagInfo)
{
pi->reference = tagInfo->tagName;
}
QCString pageName;
if (Config_getBool("CASE_SENSE_NAMES"))
pageName=pi->name.copy();
else
pageName=pi->name.lower();
//setFileNameForSections(anchors,pageName,pi);
pi->fileName = pageName;
pi->addSections(anchors);
Doxygen::pageSDict->append(baseName,pi);
if (gd) gd->addPage(pi);
if (!pi->title.isEmpty())
{
//outputList->writeTitle(pi->name,pi->title);
// a page name is a label as well!
SectionInfo *si=new SectionInfo(
pi->name,pi->title,SectionInfo::Section,pi->reference);
if (gd)
{
si->fileName=gd->getOutputFileBase();
}
else if (pi->inGroup)
{
si->fileName=pi->inGroup->getOutputFileBase().copy();
}
else
{
si->fileName=pageName;
}
//printf("si->label=`%s' si->definition=%s si->fileName=`%s'\n",
// si->label.data(),si->definition?si->definition->name().data():"<none>",
// si->fileName.data());
//printf(" SectionInfo: sec=%p sec->fileName=%s\n",si,si->fileName.data());
//printf("Adding section info %s\n",pi->name.data());
Doxygen::sectionDict.insert(pageName,si);
}
}
}
//----------------------------------------------------------------------------
void addRefItem(int todoId,int testId,int bugId,const char *prefix,
const char *name,const char *title,const char *args=0)
{
//printf("addRefItem(%s) todoId=%d testId=%d bugId=%d\n",name,todoId,testId,bugId);
////////////////////////////////////////////////////////////
// add item to the todo list
////////////////////////////////////////////////////////////
if (todoId>0 && Config_getBool("GENERATE_TODOLIST"))
{
RefItem *item = todoList.getRefItem(todoId);
ASSERT(item!=0);
if (item->written) return;
QCString doc;
doc += "<dl><dt>\\anchor ";
doc += item->listAnchor;
doc += "\n";
doc += prefix;
doc += " \\_internalref ";
doc += name;
doc += " \"";
doc += title;
doc += "\"";
if (args) doc += args;
doc += "</dt>\n<dd>";
doc += item->text;
doc += "</dd></dl>\n";
//printf("Todo page: %s\n",doc.data());
addRelatedPage("todo",theTranslator->trTodoList(),doc,0,"generated",1,0,0,0);
item->written=TRUE;
}
////////////////////////////////////////////////////////////
// add item to the test list
////////////////////////////////////////////////////////////
if (testId>0 && Config_getBool("GENERATE_TESTLIST"))
{
RefItem *item = testList.getRefItem(testId);
ASSERT(item!=0);
if (item->written) return;
QCString doc;
doc += "<dl><dt>\\anchor ";
doc += item->listAnchor;
doc += "\n";
doc += prefix;
doc += " \\_internalref ";
doc += name;
doc += " \"";
doc += title;
doc += "\"";
if (args) doc += args;
doc += "</dt>\n<dd>";
doc += item->text;
doc += "</dd></dl>\n";
//printf("Test page: %s\n",doc.data());
addRelatedPage("test",theTranslator->trTestList(),doc,0,"generated",1,0,0,0);
item->written=TRUE;
}
////////////////////////////////////////////////////////////
// add item to the bug list
////////////////////////////////////////////////////////////
if (bugId>0 && Config_getBool("GENERATE_BUGLIST"))
{
RefItem *item = bugList.getRefItem(bugId);
ASSERT(item!=0);
if (item->written) return;
QCString doc;
doc += "<dl><dt>\\anchor ";
doc += item->listAnchor;
doc += "\n";
doc += prefix;
doc += " \\_internalref ";
doc += name;
doc += " \"";
doc += title;
doc += "\"";
if (args) doc += args;
doc += "</dt>\n<dd>";
doc += item->text;
doc += "</dd></dl>\n";
//printf("Bug page: %s\n",doc.data());
addRelatedPage("bug",theTranslator->trBugList(),doc,0,"generated",1,0,0,0);
item->written=TRUE;
}
}
...@@ -42,6 +42,7 @@ class ClassList; ...@@ -42,6 +42,7 @@ class ClassList;
class MemberGroupList; class MemberGroupList;
class MemberGroupDict; class MemberGroupDict;
class Definition; class Definition;
class TagInfo;
//-------------------------------------------------------------------- //--------------------------------------------------------------------
...@@ -165,6 +166,14 @@ QCString resolveTypeDef(Definition *d,const QCString &name); ...@@ -165,6 +166,14 @@ QCString resolveTypeDef(Definition *d,const QCString &name);
QCString mergeScopes(const QCString &leftScope,const QCString &rightScope); QCString mergeScopes(const QCString &leftScope,const QCString &rightScope);
int getScopeFragment(const QCString &s,int p,int *l); int getScopeFragment(const QCString &s,int p,int *l);
int filterCRLF(char *buf,int len); int filterCRLF(char *buf,int len);
void addRefItem(int todoId,int testId,int bugId,const char *prefix,
const char *name,const char *title,const char *args=0);
void addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,QList<QCString> *anchors,
const char *fileName,int startLine,
int todoId,int testId,int bugId,GroupDef *gd=0,
TagInfo *tagInfo=0
);
#endif #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