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.
--------
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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
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()
printf("end linenumber\n");
m_parent->setDelegate(0);
}
//----------------------------------------------------------------------
// ProgramListingHandler
//----------------------------------------------------------------------
......
......@@ -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_undoc_classes HIDE_UNDOC_CLASSES
<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_footer HTML_FOOTER
<li> \refitem cfg_html_header HTML_HEADER
......@@ -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.
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
<dt>\c SOURCE_BROWSER <dd>
\addindex SOURCE_BROWSER
......@@ -1133,9 +1127,19 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
</dl>
\subsection config_dot Dot options
\anchor cfg_have_dot
\anchor cfg_class_diagrams
<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>
\addindex HAVE_DOT
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>
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.
\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
<dt>\c INCLUDE_GRAPH <dd>
\addindex INCLUDE_GRAPH
......
Name: doxygen
Version: 1.2.11.1
Version: 1.2.11_20011014
Summary: documentation system for C, C++ and IDL
Release: 4
Source: doxygen-%{version}.src.tar.gz
......
......@@ -2354,3 +2354,26 @@ QCString ClassDef::className() const
}
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
void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
void setClassIsArtificial() { m_artificial = TRUE; }
void setIsStatic(bool b) { m_isStatic=b; }
void addListReferences();
/*! Creates a new compound definition.
* \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"
int s=0;while (!isId(yytext[s])) s++;
int e=yyleng-1;while (!isId(yytext[e])) e--;
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();
g_name=varname;
}
......
......@@ -1306,13 +1306,6 @@ void Config::create()
"Set it to YES to include the internal documentation. \n",
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(
"SOURCE_BROWSER",
"If the SOURCE_BROWSER tag is set to YES then a list of source files will \n"
......@@ -1717,8 +1710,10 @@ void Config::create()
"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"
"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"
"or Internet explorer 4.0+). ",
"JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, \n"
"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
);
cb->addDependency("GENERATE_HTML");
......@@ -2020,6 +2015,15 @@ void Config::create()
//-----------------------------------------------------------------------------------------------
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(
"HAVE_DOT",
"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()
TRUE
);
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(
"INCLUDE_GRAPH",
"If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n"
......
......@@ -2223,7 +2223,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocScan>{CMD}("\\"|"@"|"<"|">"|"&"|"$"|"#"|"%") {
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);
}
<DocEmphasis>{FILEMASK} {
......
......@@ -1530,6 +1530,7 @@ void generateGraphLegend(const char *path)
return;
}
QTextStream dotText(&dotFile);
#if 0
dotText << "digraph inheritance\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";
......@@ -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 [shape=\"box\",label=\"Used\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\",color=\"black\",URL=\"$class_used.html\"];\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();
QDir d(path);
......
This diff is collapsed.
......@@ -67,13 +67,10 @@ class Doxygen
static FileNameDict *includeNameDict;
static FileNameDict *exampleNameDict;
static FileNameDict *inputNameDict;
static FileNameList inputNameList;
static FileNameDict *imageNameDict;
static FileNameDict *dotFileNameDict;
static QStrList tagfileList;
//static MemberNameList memberNameList;
//static MemberNameList functionNameList;
//static MemberNameDict memberNameDict;
//static MemberNameDict functionNameDict;
static MemberNameSDict memberNameSDict;
static MemberNameSDict functionNameSDict;
static FileList fileList;
......@@ -81,12 +78,9 @@ class Doxygen
static ClassDef unrelatedClass;
static QTextStream tagFile;
static SectionDict sectionDict;
static FileNameList inputNameList;
static StringDict namespaceAliasDict;
static GroupList groupList;
static GroupDict groupDict;
//static NamespaceList namespaceList;
//static NamespaceDict namespaceDict;
//static GroupList groupList;
static GroupSDict groupSDict;
static NamespaceSDict namespaceSDict;
static FormulaList formulaList;
static FormulaDict formulaDict;
......
......@@ -654,3 +654,24 @@ bool FileDef::generateSourceFile() const
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
void addMembersToMemberGroup();
void distributeMemberGroupDocumentation();
void addListReferences();
//void generateXML(QTextStream &t);
//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) :
docProtoMembers.setInGroup(TRUE);
docTypedefMembers.setInGroup(TRUE);
docEnumMembers.setInGroup(TRUE);
docEnumValMembers.setInGroup(TRUE);
docFuncMembers.setInGroup(TRUE);
docVarMembers.setInGroup(TRUE);
......@@ -290,8 +289,6 @@ void GroupDef::removeMember(MemberDef *md)
docEnumMembers.remove(md);
break;
case MemberDef::EnumValue:
decEnumValMembers.remove(md);
docEnumValMembers.remove(md);
break;
case MemberDef::Prototype:
decProtoMembers.remove(md);
......@@ -527,7 +524,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
}
PageInfo *pi=0;
PageSDictIterator pdi(*pageDict);
PageSDict::Iterator pdi(*pageDict);
for (pdi.toFirst();(pi=pdi.current());++pdi)
{
if (!pi->isReference())
......@@ -590,7 +587,7 @@ void addClassToGroups(Entry *root,ClassDef *cd)
for (;(g=gli.current());++gli)
{
GroupDef *gd=0;
if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]))
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{
gd->addClass(cd);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data());
......@@ -607,7 +604,7 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
{
GroupDef *gd=0;
//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);
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
......@@ -622,7 +619,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
for (;(g=gli.current());++gli)
{
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->addGroup(subGroup);
......@@ -645,7 +642,7 @@ void addMemberToGroups(Entry *root,MemberDef *md)
{
GroupDef *gd=0;
if (!g->groupname.isEmpty() &&
(gd=Doxygen::groupDict[g->groupname]) &&
(gd=Doxygen::groupSDict[g->groupname]) &&
g->pri >= pri)
{
if( fgd && g->pri == pri ) {
......@@ -724,7 +721,7 @@ void addExampleToGroups(Entry *root,PageInfo *eg)
for (;(g=gli.current());++gli)
{
GroupDef *gd=0;
if (!g->groupname.isEmpty() && (gd=Doxygen::groupDict[g->groupname]))
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{
gd->addExample(eg);
//printf("Example %s: in group %s\n",eg->name().data(),s->data());
......@@ -736,3 +733,25 @@ QCString GroupDef::getOutputFileBase() const
{
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 @@
#define GROUPDEF_H
#include "qtbc.h"
#include <qlist.h>
#include <qdict.h>
#include "sortdict.h"
#include "definition.h"
#include "memberlist.h"
#include "memberdef.h"
......@@ -76,6 +75,8 @@ class GroupDef : public Definition
void addMembersToMemberGroup();
void distributeMemberGroupDocumentation();
void addListReferences();
bool visited; // number of times accessed for output - KPW
friend void writeGroupTreeNode(OutputList&, GroupDef*,bool);
......@@ -91,8 +92,8 @@ class GroupDef : public Definition
FileList *fileList; // list of files in the group
ClassSDict *classSDict; // list of classes in the group
NamespaceList *namespaceList; // list of namespaces in the group
GroupList *groupList; // list of sub groups.
GroupList *parentGroupList; // list of parent groups.
GroupList *groupList; // list of sub groups.
GroupList *parentGroupList; // list of parent groups.
PageSDict *pageDict; // list of pages in the group
PageSDict *exampleDict; // list of examples in the group
......@@ -113,7 +114,6 @@ class GroupDef : public Definition
MemberList docProtoMembers;
MemberList docTypedefMembers;
MemberList docEnumMembers;
MemberList docEnumValMembers;
MemberList docFuncMembers;
MemberList docVarMembers;
......@@ -122,14 +122,15 @@ class GroupDef : public Definition
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);
......
......@@ -350,10 +350,12 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex);
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
if (level<6) ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList();
ol.popGeneratorState();
}
......@@ -408,10 +410,12 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex);
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Html);
if (level<6) ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList();
ol.popGeneratorState();
}
......@@ -571,10 +575,12 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started)
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex);
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man);
ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.startItemList();
ol.popGeneratorState();
}
......@@ -651,10 +657,12 @@ void writeClassHierarchy(OutputList &ol)
{
// UGLY HACK!
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex);
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man);
ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.endItemList();
ol.popGeneratorState();
}
......@@ -2025,7 +2033,7 @@ void writeExampleIndex(OutputList &ol)
//ol.newParagraph();
ol.endTextBlock();
ol.startItemList();
PageSDictIterator pdi(*Doxygen::exampleSDict);
PageSDict::Iterator pdi(*Doxygen::exampleSDict);
PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi)
{
......@@ -2063,7 +2071,7 @@ void writeExampleIndex(OutputList &ol)
void countRelatedPages(int &docPages,int &indexPages)
{
docPages=indexPages=0;
PageSDictIterator pdi(*Doxygen::pageSDict);
PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi)
{
......@@ -2129,7 +2137,7 @@ void writePageIndex(OutputList &ol)
//ol.newParagraph();
ol.endTextBlock();
ol.startItemList();
PageSDictIterator pdi(*Doxygen::pageSDict);
PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=0;
for (pdi.toFirst();(pi=pdi.current());++pdi)
{
......@@ -2180,9 +2188,9 @@ void writePageIndex(OutputList &ol)
int countGroups()
{
int count=0;
GroupListIterator gli(Doxygen::groupList);
GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
for (;(gd=gli.current());++gli)
for (gli.toFirst();(gd=gli.current());++gli)
{
if (!gd->isReference())
{
......@@ -2237,8 +2245,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
ftvHelp = FTVHelp::getInstance();
}
GroupDef *subgd = 0;
GroupListIterator gli(*gd->groupList);
if (!gd->visited && (!gd->isASubGroup() || subLevel))
{
//printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers());
......@@ -2251,7 +2257,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
numSubItems += gd->docDefineMembers.count();
numSubItems += gd->docTypedefMembers.count();
numSubItems += gd->docEnumMembers.count();
numSubItems += gd->docEnumValMembers.count();
numSubItems += gd->docFuncMembers.count();
numSubItems += gd->docVarMembers.count();
numSubItems += gd->docProtoMembers.count();
......@@ -2293,7 +2298,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
//ol.writeEndAnnoItem(gd->getOutputFileBase());
// write pages
PageSDictIterator pli(*gd->pageDict);
PageSDict::Iterator pli(*gd->pageDict);
PageInfo *pi = 0;
for (pli.toFirst();(pi=pli.current());++pli)
{
......@@ -2316,6 +2321,8 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
if (hasSubGroups)
{
ol.startItemList();
QListIterator<GroupDef> gli(*gd->groupList);
GroupDef *subgd = 0;
for (gli.toLast();(subgd=gli.current());--gli)
{
writeGroupTreeNode(ol,subgd,TRUE);
......@@ -2338,7 +2345,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
MemInfo(&gd->docDefineMembers, theTranslator->trDefines()),
MemInfo(&gd->docTypedefMembers, theTranslator->trTypedefs()),
MemInfo(&gd->docEnumMembers, theTranslator->trEnumerations()),
MemInfo(&gd->docEnumValMembers, theTranslator->trEnumerationValues()),
MemInfo(&gd->docFuncMembers, theTranslator->trFunctions()),
MemInfo(&gd->docVarMembers, theTranslator->trVariables()),
MemInfo(&gd->docProtoMembers, theTranslator->trFuncProtos()),
......@@ -2491,7 +2497,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
ftvHelp->incContentsDepth();
}
PageSDictIterator eli(*(gd->exampleDict));
PageSDict::Iterator eli(*(gd->exampleDict));
PageInfo *pi=eli.toFirst();
while (pi)
{
......@@ -2521,9 +2527,9 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
void writeGroupHierarchy(OutputList &ol)
{
ol.startItemList();
GroupListIterator gli(Doxygen::groupList);
GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
for (;(gd=gli.current());++gli)
for (gli.toFirst();(gd=gli.current());++gli)
{
writeGroupTreeNode(ol,gd,FALSE);
}
......
......@@ -504,9 +504,10 @@ void LatexGenerator::startIndexSection(IndexSections is)
break;
case isModuleDocumentation:
{
GroupDef *gd=Doxygen::groupList.first();
GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
bool found=FALSE;
while (gd && !found)
for (gli.toFirst();(gd=gli.current()) && !found;++gli)
{
if (!gd->isReference())
{
......@@ -514,7 +515,6 @@ void LatexGenerator::startIndexSection(IndexSections is)
t << "{"; //Module Documentation}\n";
found=TRUE;
}
gd=Doxygen::groupList.next();
}
}
break;
......@@ -659,25 +659,24 @@ void LatexGenerator::endIndexSection(IndexSections is)
break;
case isModuleDocumentation:
{
GroupDef *gd=Doxygen::groupList.first();
GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
bool found=FALSE;
while (gd && !found)
for (gli.toFirst();(gd=gli.current()) && !found;++gli)
{
if (!gd->isReference())
{
t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
found=TRUE;
}
gd=Doxygen::groupList.next();
}
while (gd)
for (;(gd=gli.current());++gli)
{
if (!gd->isReference())
{
if (compactLatex) t << "\\input"; else t << "\\include";
t << "{" << gd->getOutputFileBase() << "}\n";
}
gd=Doxygen::groupList.next();
}
}
break;
......@@ -759,7 +758,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
case isExampleDocumentation:
{
t << "}\n";
PageSDictIterator pdi(*Doxygen::exampleSDict);
PageSDict::Iterator pdi(*Doxygen::exampleSDict);
PageInfo *pi=pdi.toFirst();
if (pi)
{
......@@ -775,7 +774,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
case isPageDocumentation:
{
t << "}\n";
PageSDictIterator pdi(*Doxygen::pageSDict);
PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=pdi.toFirst();
bool first=TRUE;
for (pdi.toFirst();(pi=pdi.current());++pdi)
......
......@@ -1675,3 +1675,20 @@ void MemberDef::setInitializer(const char *initializer)
init=init.left(p+1);
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
MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
ArgumentList *actualArgs);
void setTemplateMaster(MemberDef *mt) { m_templateMaster=mt; }
void addListReference(Definition *d);
bool visited;
......
......@@ -204,3 +204,8 @@ void MemberGroup::setInGroup(bool b)
{
memberList->setInGroup(b);
}
void MemberGroup::addListReferences(Definition *def)
{
memberList->addListReferences(def);
}
......@@ -65,6 +65,7 @@ class MemberGroup /* : public Definition */
int numDecMembers() const;
int numDocMembers() const;
void setInGroup(bool b);
void addListReferences(Definition *d);
private:
MemberList *memberList; // list of all members in the group
......
......@@ -553,4 +553,25 @@ void MemberList::addMemberGroup(MemberGroup *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>
Definition *container,const char *title);
void addMemberGroup(MemberGroup *mg);
void setInGroup(bool group) { m_inGroup=group; }
void addListReferences(Definition *def);
private:
int m_varCnt,m_funcCnt,m_enumCnt,m_enumValCnt,m_typeCnt;
......
......@@ -40,25 +40,6 @@ class MemberNameIterator : public QListIterator<MemberDef>
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>
{
public:
......@@ -100,34 +81,6 @@ class MemberNameInfoIterator : public QListIterator<MemberInfo>
: 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>
{
......
......@@ -374,4 +374,23 @@ void NamespaceDef::addInnerCompound(Definition *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
virtual Definition *findInnerCompound(const char *name);
void addInnerCompound(Definition *d);
void addListReferences();
//protected:
// void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
......
......@@ -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]
outputArray(yytext,yyleng);
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
static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS");
QCString name(yytext);
......
......@@ -969,16 +969,16 @@ void RTFGenerator::startIndexSection(IndexSections is)
case isModuleDocumentation:
{
//Module Documentation
GroupDef *gd=Doxygen::groupList.first();
GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
bool found=FALSE;
while (gd && !found)
for (gli.toFirst();(gd=gli.current()) && !found;++gli)
{
if (!gd->isReference())
{
beginRTFChapter();
found=TRUE;
}
gd=Doxygen::groupList.next();
}
}
break;
......@@ -1185,9 +1185,10 @@ void RTFGenerator::endIndexSection(IndexSections is)
break;
case isModuleDocumentation:
{
GroupDef *gd=Doxygen::groupList.first();
GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
t << "{\\tc \\v " << theTranslator->trModuleDocumentation() << "}"<< endl;
while (gd)
for (gli.toFirst();(gd=gli.current());++gli)
{
if (!gd->isReference())
{
......@@ -1196,7 +1197,6 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << gd->getOutputFileBase();
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
}
gd=Doxygen::groupList.next();
}
}
break;
......@@ -1301,7 +1301,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
{
//t << "}\n";
t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl;
PageSDictIterator pdi(*Doxygen::exampleSDict);
PageSDict::Iterator pdi(*Doxygen::exampleSDict);
PageInfo *pi=pdi.toFirst();
if (pi)
{
......@@ -1323,7 +1323,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
case isPageDocumentation:
{
t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl;
PageSDictIterator pdi(*Doxygen::pageSDict);
PageSDict::Iterator pdi(*Doxygen::pageSDict);
PageInfo *pi=pdi.toFirst();
bool first=TRUE;
for (pdi.toFirst();(pi=pdi.current());++pdi)
......@@ -1960,9 +1960,10 @@ void RTFGenerator::endMemberDescription()
void RTFGenerator::startDescList(SectionTypes)
{
DBG_RTF(t << "{\\comment (startDescList)}" << endl)
t << "{";
newParagraph();
t << "{"; // ends at endDescList
t << "{"; // ends at endDescTitle
startBold();
newParagraph();
}
void RTFGenerator::endDescTitle()
......@@ -1978,25 +1979,23 @@ void RTFGenerator::endDescTitle()
void RTFGenerator::writeDescItem()
{
DBG_RTF(t << "{\\comment (writeDescItem) }" << endl)
// incrementIndentLevel();
//t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
}
void RTFGenerator::endDescList()
{
DBG_RTF(t << "{\\comment (endDescList)}" << endl)
newParagraph();
//t << "}";
decrementIndentLevel();
m_omitParagraph = TRUE;
//t << Rtf_Style_Reset << styleStack.top() << endl;
t << Rtf_Style_Reset << endl;
t << "}";
}
void RTFGenerator::startParamList(ParamListTypes)
{
DBG_RTF(t << "{\\comment (startParamList)}" << endl)
t << "{";
t << "{"; // ends at endParamList
t << "{"; // ends at endDescTitle
startBold();
newParagraph();
}
......@@ -2004,10 +2003,9 @@ void RTFGenerator::endParamList()
{
DBG_RTF(t << "{\\comment (endParamList)}" << endl)
newParagraph();
t << "}";
decrementIndentLevel();
m_omitParagraph = TRUE;
//t << Rtf_Style_Reset << styleStack.top() << endl;
t << "}";
}
......@@ -2295,7 +2293,7 @@ void RTFGenerator::endDotFile(bool)
void RTFGenerator::startDescTable()
{
DBG_RTF(t << "{\\comment (startDescTable) }" << endl)
t << "{" << endl;
//t << "{" << endl;
//incrementIndentLevel();
//t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
}
......@@ -2304,7 +2302,7 @@ void RTFGenerator::endDescTable()
{
//decrementIndentLevel();
DBG_RTF(t << "{\\comment (endDescTable)}" << endl)
t << "}" << endl;
//t << "}" << endl;
//t << Rtf_Style_Reset << styleStack.top();
}
......@@ -2327,12 +2325,14 @@ void RTFGenerator::endDescTableTitle()
void RTFGenerator::startDescTableData()
{
DBG_RTF(t << "{\\comment (startDescTableData) }" << endl)
m_omitParagraph=FALSE;
}
void RTFGenerator::endDescTableData()
{
DBG_RTF(t << "{\\comment (endDescTableData) }" << endl)
newParagraph();
m_omitParagraph=TRUE;
}
// a style for list formatted as a "bulleted list"
......@@ -2661,6 +2661,50 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
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
* RTF files. This version replaces the infile with the new file
......@@ -2708,6 +2752,8 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name)
thisDir.remove(mainRTFName);
thisDir.rename(combinedName,mainRTFName);
testRTFOutput(mainRTFName);
QDir::setCurrent(oldDir);
return TRUE;
}
......
......@@ -1051,6 +1051,8 @@ class TranslatorEnglish : public Translator
"class Undocumented { };\n\n"
"/*! Class that is inherited using public inheritance */\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 ProtectedBase { };\n\n"
"/*! Class that is inherited using private inheritance */\n"
......@@ -1062,13 +1064,14 @@ class TranslatorEnglish : public Translator
" protected ProtectedBase,\n"
" private PrivateBase,\n"
" public Undocumented\n"
" public Templ<int>\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"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>\n"
"The boxes in the above graph have the following meaning:\n"
......@@ -1077,9 +1080,9 @@ class TranslatorEnglish : public Translator
"graph is generated.\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 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 "
"truncated if it does not fit within the specified boundaries."
"truncated if it does not fit within the specified boundaries.\n"
"</ul>\n"
"The arrows have the following meaning:\n"
"<ul>\n"
......@@ -1089,7 +1092,10 @@ class TranslatorEnglish : public Translator
"<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 "
"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";
}
/*! text for the link to the legend page */
......
......@@ -40,7 +40,7 @@
#include "example.h"
#include "version.h"
#include "groupdef.h"
//#include "xml.h"
#include "reflist.h"
#include "page.h"
#ifndef _WIN32
......@@ -2557,7 +2557,7 @@ bool generateRef(OutputDocInterface &od,const char *scName,
}
return TRUE;
}
else if (inSeeBlock && !nameStr.isEmpty() && (gd=Doxygen::groupDict[nameStr]))
else if (inSeeBlock && !nameStr.isEmpty() && (gd=Doxygen::groupSDict[nameStr]))
{ // group link
od.startTextLink(gd->getOutputFileBase(),0);
if (rt) // explict link text
......@@ -2636,7 +2636,7 @@ bool generateLink(OutputDocInterface &od,const char *clName,
}
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);
if (lt)
......@@ -3431,3 +3431,178 @@ found:
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;
class MemberGroupList;
class MemberGroupDict;
class Definition;
class TagInfo;
//--------------------------------------------------------------------
......@@ -165,6 +166,14 @@ QCString resolveTypeDef(Definition *d,const QCString &name);
QCString mergeScopes(const QCString &leftScope,const QCString &rightScope);
int getScopeFragment(const QCString &s,int p,int *l);
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
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