Commit 69124e6c authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release_1.1.0-20000305

parent f4f3f167
DOXYGEN Version 1.1.0-20000227
DOXYGEN Version 1.1.0-20000305
CONTENTS
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.0-20000227.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0-20000227.src.tar # unpack it
gunzip doxygen-1.1.0-20000305.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0-20000305.src.tar # unpack it
2. Run the configure script:
......@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (27 February 2000)
Dimitri van Heesch (05 March 2000)
......@@ -10,10 +10,17 @@ clean: FORCE
-rm -f objects/*.o
distclean: clean
cd examples ; $(MAKE) clean
cd doc ; $(MAKE) clean
cd src ; $(MAKE) distclean
-rm -f bin/doxy*
-rm -f html
-rm -f objects/*.o
-rm -f src/Makefile.doxygen \
src/Makefile.doxytag \
src/Makefile.doxysearch
-rm -f Makefile src/Makefile examples/Makefile doc/Makefile
-rm -f .makeconfig .tmakeconfig
-rm -f src/doxygen.pro src/doxytag.pro src/doxysearch.pro
-rm -f src/version.cpp
......
DOXYGEN Version 1.1.0-20000227
DOXYGEN Version 1.1.0-20000305
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (27 February 2000)
Dimitri van Heesch (05 March 2000)
1.1.0-20000227
1.1.0-20000305
......@@ -32,7 +32,7 @@ tmake:
$(PERL) $(TMAKE) doxytag.pro >Makefile.doxytag
$(PERL) $(TMAKE) doxysearch.pro >Makefile.doxysearch
clean:
clean: Makefile.doxygen Makefile.doxytag Makefile.doxysearch
$(MAKE) -f Makefile.doxygen clean
$(MAKE) -f Makefile.doxytag clean
$(MAKE) -f Makefile.doxysearch clean
......
This diff is collapsed.
This diff is collapsed.
......@@ -314,11 +314,13 @@ static void writeInheritanceSpecifier(OutputList &ol,BaseClassDef *bcd)
void ClassDef::setIncludeFile(FileDef *fd,const char *incName,bool local)
{
//printf("ClassDef::setInclude(%p,%s,%d)\n",fd,incName,local);
if (!incInfo) incInfo=new IncludeInfo;
if ((incName && incInfo->includeName.isEmpty()) ||
(fd!=0 && incInfo->fileDef==0)
)
{
//printf("Setting file info\n");
incInfo->fileDef = fd;
incInfo->includeName = incName;
incInfo->local = local;
......@@ -1396,7 +1398,7 @@ void ClassDef::determineImplUsageRelation()
{
ClassDef *cd=getClass(name()+"::"+type.mid(i,l));
if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try inbetween scopes!
if (cd && cd->isLinkable()) // class exists and is linkable
if (cd /*&& cd->isLinkable()*/) // class exists and is linkable
{
found=TRUE;
if (usesImplClassDict==0) usesImplClassDict = new UsesClassDict(257);
......
......@@ -218,7 +218,7 @@ class BaseClassList : public QList<BaseClassDef>
if (c1==0 || c2==0)
return FALSE;
else
return strcmp(c1->name(),c2->name());
return strcasecmp(c1->name(),c2->name());
}
};
......
......@@ -34,7 +34,7 @@ int ClassList::compareItems(GCI item1, GCI item2)
//int prefixLength = Config::ignorePrefix.length();
//int i1 = c1->name().left(prefixLength)==Config::ignorePrefix ? prefixLength : 0;
//int i2 = c2->name().left(prefixLength)==Config::ignorePrefix ? prefixLength : 0;
return strcmp(c1->name().data()+getPrefixIndex(c1->name()),
return strcasecmp(c1->name().data()+getPrefixIndex(c1->name()),
c2->name().data()+getPrefixIndex(c2->name())
);
}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -53,7 +53,7 @@ class DefineList : public QList<Define>
~DefineList() {}
int compareItems(GCI i1,GCI i2)
{
return strcmp(((Define *)i1)->name,((Define *)i2)->name);
return strcasecmp(((Define *)i1)->name,((Define *)i2)->name);
}
};
......@@ -65,7 +65,7 @@ class DefineName : public QList<Define>
const char *nameString() const { return name; }
int compareItems(GCI i1,GCI i2)
{
return strcmp(((Define *)i1)->name,((Define *)i2)->name);
return strcasecmp(((Define *)i1)->name,((Define *)i2)->name);
}
private:
......
This diff is collapsed.
......@@ -59,13 +59,15 @@ class DotNode
void removeChild(DotNode *n);
void removeParent(DotNode *n);
int number() const { return m_number; }
void write(QTextStream &t,int maxDistance=1000);
void write(QTextStream &t,bool topDown,int maxDistance=1000);
int m_subgraphId;
void clearWriteFlag();
private:
void colorConnectedNodes(int curColor);
const DotNode *findRoot() const; // only works for acyclic graphs!
void writeBox(QTextStream &t,bool hasNonReachableChildren);
void writeArrow(QTextStream &t,DotNode *cn,EdgeInfo *ei,bool topDown);
const DotNode *findDocNode() const; // only works for acyclic graphs!
int m_number;
QCString m_label; //!< label text
QCString m_url; //!< url of the node (format: remove$local)
......@@ -74,6 +76,7 @@ class DotNode
QList<EdgeInfo> *m_edgeInfo; //!< edge info for each child
bool m_deleted; //!< used to mark a node as deleted
bool m_written; //!< used to mark a node as written
bool m_hasDoc; //!< used to mark a node as documented
int m_distance; //!< distance to the root node
bool m_isRoot; //!< indicates if this is a root node
};
......@@ -86,7 +89,7 @@ class DotGfxHierarchyTable
void writeGraph(QTextStream &t,const char *path);
private:
void addHierarchy(DotNode *n,ClassDef *cd);
void addHierarchy(DotNode *n,ClassDef *cd,bool hide);
QList<DotNode> *m_rootNodes;
QDict<DotNode> *m_usedNodes;
......
This diff is collapsed.
......@@ -33,7 +33,9 @@ struct BaseInfo
struct Argument
{
/*! Construct a new argument. */
Argument() {}
/*! Copy an argument (does a deep copy of all strings). */
Argument(const Argument &a)
{
attrib=a.attrib.copy();
......@@ -43,6 +45,7 @@ struct Argument
docs=a.docs.copy();
array=a.array.copy();
}
/* Assignment of an argument (does a deep copy of all strings). */
Argument &operator=(const Argument &a)
{
if (this!=&a)
......@@ -56,17 +59,20 @@ struct Argument
}
return *this;
}
/*! return TRUE if this argument is documentation and the argument has a
* non empty name.
*/
bool hasDocumentation() const
{
return !name.isEmpty() && !docs.isEmpty();
}
QCString attrib; // argument attribute (IDL only)
QCString type; // argument type
QCString name; // argument name (if any)
QCString array; // argument array specifier (if any)
QCString defval; // argument default value (if any)
QCString docs; // arguments documentation (if any)
QCString attrib; /*!< Argument's attribute (IDL only) */
QCString type; /*!< Argument's type */
QCString name; /*!< Argument's name (may be empty) */
QCString array; /*!< Argument's array specifier (may be empty) */
QCString defval; /*!< Argument's default value (may be empty) */
QCString docs; /*!< Argument's documentation (may be empty) */
};
class ArgumentList : public QList<Argument>
......
......@@ -479,7 +479,7 @@ void FileDef::insertMember(MemberDef *md)
/*! Adds compound definition \a cd to the list of all compounds of this file */
void FileDef::insertClass(ClassDef *cd)
{
classList->append(cd);
classList->inSort(cd);
}
/*! Adds namespace definition \a nd to the list of all compounds of this file */
......@@ -487,7 +487,7 @@ void FileDef::insertNamespace(NamespaceDef *nd)
{
if (!nd->name().isEmpty() && namespaceDict->find(nd->name())==0)
{
namespaceList->append(nd);
namespaceList->inSort(nd);
namespaceDict->insert(nd->name(),nd);
}
}
......@@ -541,11 +541,10 @@ void FileDef::addUsingDirective(NamespaceDef *nd)
void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local)
{
//printf("FileDef::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
QCString iName = fd ? fd->absFilePath().data() : incName;
if (!iName.isEmpty() && includeDict->find(iName)==0)
{
//printf("Adding include dependency `%s' to `%s'\n",
// fd->name().data(),name().data());
IncludeInfo *ii = new IncludeInfo;
ii->fileDef = fd;
ii->includeName = incName;
......@@ -574,8 +573,8 @@ int FileList::compareItems(GCI item1, GCI item2)
FileDef *f2=(FileDef *)item2;
ASSERT(f1!=0 && f2!=0);
return Config::fullPathNameFlag ?
strcmp(f1->absFilePath(),f2->absFilePath()) :
strcmp(f1->name(),f2->name());
strcasecmp(f1->absFilePath(),f2->absFilePath()) :
strcasecmp(f1->name(),f2->name());
}
/*! Create a file list iterator. */
......
......@@ -90,49 +90,6 @@ QCString abbreviate(const char *s,const char *name)
//----------------------------------------------------------------------------
void initBaseClassHierarchy(BaseClassList *bcl)
{
BaseClassListIterator bcli(*bcl);
for ( ; bcli.current(); ++bcli)
{
ClassDef *cd=bcli.current()->classDef;
if (cd->baseClasses()->count()==0) // no base classes => new root
{
initBaseClassHierarchy(cd->baseClasses());
}
cd->visited=FALSE;
}
}
//----------------------------------------------------------------------------
void initClassHierarchy(ClassList *cl)
{
ClassListIterator cli(*cl);
ClassDef *cd;
for ( ; (cd=cli.current()); ++cli)
{
cd->visited=FALSE;
initBaseClassHierarchy(cd->baseClasses());
}
}
//----------------------------------------------------------------------------
bool hasVisibleRoot(BaseClassList *bcl)
{
BaseClassListIterator bcli(*bcl);
for ( ; bcli.current(); ++bcli)
{
ClassDef *cd=bcli.current()->classDef;
if (cd->isVisibleInHierarchy()) return TRUE;
hasVisibleRoot(cd->baseClasses());
}
return FALSE;
}
//----------------------------------------------------------------------------
void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
{
HtmlHelp *htmlHelp=0;
......
......@@ -1099,6 +1099,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ClassDef *bcd=0;
if (bmd && (bcd=bmd->memberClass()))
{
#if 0
if (virt!=Normal) // search for virtual member of the deepest base class
{
MemberDef *lastBmd=bmd;
......@@ -1112,6 +1113,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
lastBmd=lastBmd->reimplements();
}
}
#endif
// write class that contains a member that is reimplemented by this one
if (bcd->isLinkable())
{
......
......@@ -36,7 +36,7 @@ int MemberList::compareItems(GCI item1, GCI item2)
{
MemberDef *c1=(MemberDef *)item1;
MemberDef *c2=(MemberDef *)item2;
return strcmp(c1->name(),c2->name());
return strcasecmp(c1->name(),c2->name());
}
void MemberList::countDecMembers()
......
......@@ -91,7 +91,7 @@ class NamespaceList : public QList<NamespaceDef>
~NamespaceList() {}
int compareItems(GCI item1,GCI item2)
{
return strcmp(((NamespaceDef *)item1)->name(),
return strcasecmp(((NamespaceDef *)item1)->name(),
((NamespaceDef *)item2)->name()
);
}
......
This diff is collapsed.
......@@ -818,6 +818,7 @@ static void readIncludeFile(const QCString &inc)
FILE *f;
QCString oldFileName = g_yyFileName.copy();
FileDef *oldFileDef = g_yyFileDef;
//printf("Searching for `%s'\n",incFileName.data());
if ((f=findFile(incFileName))) // see if the include file can be found
{
#if SHOW_INCLUDES
......@@ -845,8 +846,10 @@ static void readIncludeFile(const QCString &inc)
{
if (oldFileDef)
{
bool ambig;
FileDef *fd = findFileDef(&inputNameDict,incFileName,ambig);
// add include dependency to the file in which the #include was found
oldFileDef->addIncludeDependency(0,incFileName,localInclude);
oldFileDef->addIncludeDependency(fd,incFileName,localInclude);
}
#if SHOW_INCLUDES
msg("#include %s: not found! skipping...\n",incFileName.data());
......
This diff is collapsed.
......@@ -148,6 +148,8 @@ static QCString baseName;
static QCString *specName;
static QCString formulaText;
static QCString sectionRef;
static bool insideIDL = FALSE;
static bool insideCppQuote = FALSE;
// state variable for reading the argument list of a function
static int argRoundCount;
......@@ -960,6 +962,8 @@ VAR [vV][aA][rR]
%x ClassDocBrief
%x ClassDocOverload
%x ClassDefineArgs
%x CppQuote
%x EndCppQuote
%x GroupDocArg1
%x GroupDocArg2
%x GroupName
......@@ -1060,6 +1064,7 @@ VAR [vV][aA][rR]
for( i = 0 ; yytext[i+1] != 6 ; i++ )
yyFileName[i] = yytext[i+1] ;
yyFileName[i] = 0 ;
insideIDL = i>4 && strcmp(&yyFileName[i-4],".idl")==0;
msg("Parsing file %s...\n",yyFileName);
current_root = global_root ;
initParser();
......@@ -1719,7 +1724,7 @@ VAR [vV][aA][rR]
generateRef(*outDoc,className,
removeRedundantWhiteSpace(oName),inSeeBlock);
}
<DocScan>("http:"|"ftp:"){URLMASK} { outDoc->writeHtmlLink(yytext,yytext); }
<DocScan>("http:"|"ftp:"|"file:"){URLMASK} { outDoc->writeHtmlLink(yytext,yytext); }
<DocScan>[a-zA-Z_0-9\.\-]+"@"[0-9a-z_A-Z\.\-]+ { outDoc->writeMailLink(yytext); }
<DocScan>{FILEMASK} {
generateFileRef(*outDoc,yytext);
......@@ -2413,6 +2418,12 @@ VAR [vV][aA][rR]
*currentTemplateSpec+=*yytext;
}
<FindMembers,FindMemberName>{SCOPENAME} {
if (insideIDL && yyleng==9 && strcmp(yytext,"cpp_quote")==0)
{
BEGIN(CppQuote);
}
else
{
lineCount();
if (YY_START==FindMembers)
{
......@@ -2429,6 +2440,15 @@ VAR [vV][aA][rR]
else
BEGIN(FindMembers);
}
}
<CppQuote>"("{B}*"\"" {
insideCppQuote=TRUE;
BEGIN(FindMembers);
}
<EndCppQuote>")" {
insideCppQuote=FALSE;
BEGIN(FindMembers);
}
<FindMembers>{B}*"#" { lastCPPContext = YY_START;
BEGIN( SkipCPP ) ;
}
......@@ -2482,9 +2502,16 @@ VAR [vV][aA][rR]
yyLineNr++;
}
<DefineEnd>\" {
if (insideIDL && insideCppQuote)
{
BEGIN(EndCppQuote);
}
else
{
lastStringContext=DefineEnd;
BEGIN(SkipString);
}
}
<DefineEnd>.
<FindMembers>[*&]+ { current->name += yytext ; }
......@@ -2579,11 +2606,18 @@ VAR [vV][aA][rR]
BEGIN(lastInitializerContext);
}
<ReadInitializer>\" {
if (insideIDL && insideCppQuote)
{
BEGIN(EndCppQuote);
}
else
{
lastStringContext=YY_START;
current->initializer+=*yytext;
pCopyQuotedString=&current->initializer;
BEGIN(CopyString);
}
}
<ReadInitializer>"'"\\[0-7]{1,3}"'"
<ReadInitializer>"'"\\."'"
<ReadInitializer>"'"."'"
......@@ -3578,6 +3612,10 @@ VAR [vV][aA][rR]
}
<ClassVar>[;=*&] {
unput(*yytext);
if (isTypedef) // typedef of a class, put typedef keyword back
{
current->type.prepend("typedef");
}
BEGIN( FindMembers );
}
<ClassName,ClassVar>{B}*"{"{B}* { current->fileName = yyFileName ;
......@@ -3911,6 +3949,7 @@ VAR [vV][aA][rR]
current->name = yytext;
newDocState();
}
<NameSpaceDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<NameSpaceDocArg1>"\n" {
warn("Warning: missing argument after "
"\\namespace at line %d of %s.\n",yyLineNr,yyFileName);
......@@ -3935,6 +3974,7 @@ VAR [vV][aA][rR]
}
BEGIN( ClassDocArg2 );
}
<ClassDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocArg1>"\n" {
warn("Warning: missing argument after "
"\\class at line %d of %s.\n",yyLineNr,yyFileName);
......@@ -3947,6 +3987,7 @@ VAR [vV][aA][rR]
current->name=current->name.left(current->name.length()-5);
BEGIN(GroupDocArg2);
}
<GroupDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<GroupDocArg1>"\n" {
warn("Warning: missing argument after "
"\\defgroup at line %d of %s.\n",yyLineNr,yyFileName);
......@@ -3958,6 +3999,7 @@ VAR [vV][aA][rR]
current->type = current->type.stripWhiteSpace();
newDocState();
}
<GroupDocArg2>"\\"{B}*"\n" { yyLineNr++; }
<GroupDocArg2>"\n" {
newDocState();
}
......@@ -3966,7 +4008,8 @@ VAR [vV][aA][rR]
current->includeFile = stripQuotes(yytext);
BEGIN( ClassDocArg3 );
}
<ClassDocArg2>{BL} { yyLineNr++;
<ClassDocArg2>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocArg2>"\n" { yyLineNr++;
newDocState();
}
<ClassDocArg3>[<]?{FILE}[>]? {
......@@ -3974,13 +4017,15 @@ VAR [vV][aA][rR]
current->includeName = yytext;
newDocState();
}
<ClassDocArg3>{BL} { yyLineNr++;
<ClassDocArg3>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocArg3>"\n" { yyLineNr++;
newDocState();
}
<FileDocArg1>{FILE} {
current->name = stripQuotes(yytext);
newDocState();
}
<FileDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<FileDocArg1>"\n" {
current->name = yyFileName;
yyLineNr++;
......@@ -3990,6 +4035,7 @@ VAR [vV][aA][rR]
current->name = stripQuotes(yytext);
BEGIN( PageDocArg2 );
}
<PageDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<PageDocArg1>"\n" {
warn("Warning: missing argument after "
"\\page at line %d of %s.\n",yyLineNr,yyFileName);
......@@ -4009,6 +4055,7 @@ VAR [vV][aA][rR]
}
newDocState();
}
<EnumDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<EnumDocArg1>"\n" {
warn("Warning: missing argument after "
"\\enum at line %d of %s.\n",yyLineNr,yyFileName);
......@@ -4303,6 +4350,7 @@ VAR [vV][aA][rR]
<ClassDefineArgs>. {
current->args+= yytext;
}
<ClassDocFunc>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocFunc>"\n" {
yyLineNr++;
current->name = current->name.stripWhiteSpace();
......@@ -4450,6 +4498,12 @@ VAR [vV][aA][rR]
}
<SkipComment>[^\*\n]+
<*>\n { yyLineNr++ ; }
<*>\" {
if (insideIDL && insideCppQuote)
{
BEGIN(EndCppQuote);
}
}
<*>.
<SkipComment>"//"|"/*"
<*>"/*" { lastCContext = YY_START ;
......
This diff is collapsed.
......@@ -442,7 +442,7 @@ class TranslatorDutch : public Translator
QCString trSources()
{
return "Sources";
return "Broncode";
}
QCString trDefinedAtLineInSourceFile()
{
......@@ -457,10 +457,81 @@ class TranslatorDutch : public Translator
// new since 1.0.0
//////////////////////////////////////////////////////////////////////////
virtual QCString trDeprecated()
QCString trDeprecated()
{
return "Verouderd";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
/*! this text is put before a collaboration diagram */
QCString trCollaborationDiagram(const char *clName)
{
return (QCString)"Collaboratie diagram voor "+clName+":";
}
/*! this text is put before an include dependency graph */
QCString trInclDepGraph(const char *fName)
{
return (QCString)"Include afhankelijkheidsgraaf voor "+fName+":";
}
/*! header that is put before the list of constructor/destructors. */
QCString trConstructorDocumentation()
{
return "Constructor & Destructor Documentatie";
}
/*! Used in the file documentation to point to the corresponding sources. */
QCString trGotoSourceCode()
{
return "Ga naar de bron code van deze file.";
}
/*! Used in the file sources to point to the corresponding documentation. */
QCString trGotoDocumentation()
{
return "Ga naar de documentatie van deze file.";
}
/*! Text for the \pre command */
QCString trPrecondition()
{
return "Preconditie";
}
/*! Text for the \post command */
QCString trPostcondition()
{
return "Postconditie";
}
/*! Text for the \invariant command */
QCString trInvariant()
{
return "Invariant";
}
/*! Text shown before a multi-line variable/enum initialization */
QCString trInitialValue()
{
return "Initi&euml;le waarde:";
}
/*! Text used the source code in the file index */
QCString trCode()
{
return "code";
}
QCString trGraphicalHierarchy()
{
return "Grafische Klasse Hierarchie";
}
QCString trGotoGraphicalHierarchy()
{
return "Ga naar de grafische klasse hierarchie";
}
QCString trGotoTextualHierarchy()
{
return "Ga naar de tekstu&euml;le klasse hierarchie";
}
QCString trPageIndex()
{
return "Pagina Index";
}
};
#endif
......@@ -1968,3 +1968,47 @@ int getPrefixIndex(const QCString &name)
}
return 0;
}
//----------------------------------------------------------------------------
static void initBaseClassHierarchy(BaseClassList *bcl)
{
BaseClassListIterator bcli(*bcl);
for ( ; bcli.current(); ++bcli)
{
ClassDef *cd=bcli.current()->classDef;
if (cd->baseClasses()->count()==0) // no base classes => new root
{
initBaseClassHierarchy(cd->baseClasses());
}
cd->visited=FALSE;
}
}
//----------------------------------------------------------------------------
void initClassHierarchy(ClassList *cl)
{
ClassListIterator cli(*cl);
ClassDef *cd;
for ( ; (cd=cli.current()); ++cli)
{
cd->visited=FALSE;
initBaseClassHierarchy(cd->baseClasses());
}
}
//----------------------------------------------------------------------------
bool hasVisibleRoot(BaseClassList *bcl)
{
BaseClassListIterator bcli(*bcl);
for ( ; bcli.current(); ++bcli)
{
ClassDef *cd=bcli.current()->classDef;
if (cd->isVisibleInHierarchy()) return TRUE;
hasVisibleRoot(cd->baseClasses());
}
return FALSE;
}
......@@ -31,6 +31,8 @@ class ArgumentList;
class OutputList;
class MemberDef;
class ExampleList;
class ClassList;
class BaseClassList;
extern void setAnchors(char id,MemberList *ml);
extern QCString fileToString(const char *name);
......@@ -80,5 +82,7 @@ void writePageRef(OutputList &ol,const char *cn,const char *mn);
QCString substituteKeywords(const QCString &s,const char *title);
int getPrefixIndex(const QCString &name);
QCString removeAnnonymousScopes(const QCString &s);
void initClassHierarchy(ClassList *cl);
bool hasVisibleRoot(BaseClassList *bcl);
#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