Commit fbf972e7 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release 1.1.1

parent 69124e6c
DOXYGEN Version 1.1.0-20000305 DOXYGEN Version 1.1.1
CONTENTS CONTENTS
-------- --------
...@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX: ...@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have: 1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.0-20000305.src.tar.gz # uncompress the archive gunzip doxygen-1.1.1.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.0-20000305.src.tar # unpack it tar xf doxygen-1.1.1.src.tar # unpack it
2. Run the configure script: 2. Run the configure script:
...@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at ...@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (05 March 2000) Dimitri van Heesch (12 March 2000)
...@@ -51,7 +51,7 @@ ps: docs ...@@ -51,7 +51,7 @@ ps: docs
pdf: docs pdf: docs
cd latex ; $(MAKE) cd latex ; $(MAKE)
archive: distclean archive: clean
tar zcvf dx`date +%y%m%d`.tgz tmake doc wintools examples bin objects \ tar zcvf dx`date +%y%m%d`.tgz tmake doc wintools examples bin objects \
src configure configure.bin Makefile.in Makefile.win.in INSTALL \ src configure configure.bin Makefile.in Makefile.win.in INSTALL \
make.bat LANGUAGE.HOWTO LICENSE PLATFORMS VERSION make.bat LANGUAGE.HOWTO LICENSE PLATFORMS VERSION
......
DOXYGEN Version 1.1.0-20000305 DOXYGEN Version 1.1.1
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (05 March 2000) Dimitri van Heesch (12 March 2000)
1.1.0-20000305 1.1.1
...@@ -104,6 +104,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -104,6 +104,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_input_filter INPUT_FILTER <li> \refitem cfg_input_filter INPUT_FILTER
<li> \refitem cfg_internal_docs INTERNAL_DOCS <li> \refitem cfg_internal_docs INTERNAL_DOCS
<li> \refitem cfg_javadoc_autobrief JAVADOC_AUTOBRIEF <li> \refitem cfg_javadoc_autobrief JAVADOC_AUTOBRIEF
<li> \refitem cfg_latex_batchmode LATEX_BATCHMODE
<li> \refitem cfg_latex_header LATEX_HEADER <li> \refitem cfg_latex_header LATEX_HEADER
<li> \refitem cfg_latex_output LATEX_OUTPUT <li> \refitem cfg_latex_output LATEX_OUTPUT
<li> \refitem cfg_macro_expansion MACRO_EXPANSION <li> \refitem cfg_macro_expansion MACRO_EXPANSION
...@@ -694,6 +695,16 @@ EXTRA_PACKAGES = times ...@@ -694,6 +695,16 @@ EXTRA_PACKAGES = times
the version number of doxygen, the project name (see PROJECT_NAME), or the the version number of doxygen, the project name (see PROJECT_NAME), or the
project number (see PROJECT_NUMBER). project number (see PROJECT_NUMBER).
\anchor cfg_latex_batchmode
<dt>\c LATEX_BATCHMODE <dd>
\addindex LATEX_BATCHMODE
If the \c LATEX_BATCHMODE tag is set to \c YES, doxygen will add the \\batchmode.
command to the generated \f$\mbox{\LaTeX}\f$ files. This will
instruct \f$\mbox{\LaTeX}\f$ to keep running if errors occur, instead of
asking the user for help. This option is also used when generating formulas
in HTML.
</dl> </dl>
\subsection rtf_output RTF related options \subsection rtf_output RTF related options
......
...@@ -174,26 +174,65 @@ void ClassDef::insertMember(const MemberDef *md) ...@@ -174,26 +174,65 @@ void ClassDef::insertMember(const MemberDef *md)
default: // any of the other members default: // any of the other members
if (md->isStatic()) if (md->isStatic())
{ {
switch (md->protection()) if (md->isVariable())
{ {
case Protected: switch (md->protection())
proStaticMembers.append(md); {
break; case Protected:
case Public: proStaticAttribs.append(md);
pubStaticMembers.append(md); break;
break; case Public:
case Private: pubStaticAttribs.append(md);
priStaticMembers.append(md); break;
break; case Private:
priStaticAttribs.append(md);
break;
}
}
else // function
{
switch (md->protection())
{
case Protected:
proStaticMembers.append(md);
break;
case Public:
pubStaticMembers.append(md);
break;
case Private:
priStaticMembers.append(md);
break;
}
} }
} }
else else // not static
{ {
switch (md->protection()) if (md->isVariable())
{ {
case Protected: proMembers.append(md); break; switch (md->protection())
case Public: pubMembers.append(md); break; {
case Private: priMembers.append(md); break; case Protected: proAttribs.append(md); break;
case Public: pubAttribs.append(md); break;
case Private: priAttribs.append(md); break;
}
}
else if (md->isTypedef() || md->isEnumerate())
{
switch (md->protection())
{
case Protected: proTypes.append(md); break;
case Public: pubTypes.append(md); break;
case Private: priTypes.append(md); break;
}
}
else // member function
{
switch (md->protection())
{
case Protected: proMembers.append(md); break;
case Public: pubMembers.append(md); break;
case Private: priMembers.append(md); break;
}
} }
} }
if (md->protection()!=Private || Config::extractPrivateFlag) if (md->protection()!=Private || Config::extractPrivateFlag)
...@@ -282,6 +321,15 @@ void ClassDef::computeAnchors() ...@@ -282,6 +321,15 @@ void ClassDef::computeAnchors()
setAnchors('j',&signals); setAnchors('j',&signals);
setAnchors('k',&related); setAnchors('k',&related);
setAnchors('l',&friends); setAnchors('l',&friends);
setAnchors('m',&pubAttribs);
setAnchors('n',&proAttribs);
setAnchors('o',&priAttribs);
setAnchors('p',&pubStaticAttribs);
setAnchors('q',&proStaticAttribs);
setAnchors('r',&priStaticAttribs);
setAnchors('s',&pubTypes);
setAnchors('t',&proTypes);
setAnchors('u',&priTypes);
} }
// add a file name to the used files set // add a file name to the used files set
...@@ -549,21 +597,39 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -549,21 +597,39 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write member groups // write member groups
ol.startMemberSections(); ol.startMemberSections();
pubMembers.writeDeclarations(ol,this,0,0,theTranslator->trPublicMembers(),0);
pubSlots.writeDeclarations(ol,this,0,0,theTranslator->trPublicSlots(),0); // non static public members
signals.writeDeclarations(ol,this,0,0,theTranslator->trSignals(),0); pubTypes.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicTypes(),0);
pubStaticMembers.writeDeclarations(ol,this,0,0,theTranslator->trStaticPublicMembers(),0); pubMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicMembers(),0);
proMembers.writeDeclarations(ol,this,0,0,theTranslator->trProtectedMembers(),0); pubAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicAttribs(),0);
proSlots.writeDeclarations(ol,this,0,0,theTranslator->trProtectedSlots(),0); pubSlots.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicSlots(),0);
proStaticMembers.writeDeclarations(ol,this,0,0,theTranslator->trStaticProtectedMembers(),0); signals.writeDeclarations(ol,this,0,0,0,theTranslator->trSignals(),0);
// static public members
pubStaticMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPublicMembers(),0);
pubStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPublicAttribs(),0);
// protected non-static members
proTypes.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedTypes(),0);
proMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedMembers(),0);
proAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedAttribs(),0);
proSlots.writeDeclarations(ol,this,0,0,0,theTranslator->trProtectedSlots(),0);
// protected static members
proStaticMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticProtectedMembers(),0);
proStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticProtectedAttribs(),0);
if (Config::extractPrivateFlag) if (Config::extractPrivateFlag)
{ {
priMembers.writeDeclarations(ol,this,0,0,theTranslator->trPrivateMembers(),0); // private non-static members
priSlots.writeDeclarations(ol,this,0,0,theTranslator->trPrivateSlots(),0); priTypes.writeDeclarations(ol,this,0,0,0,theTranslator->trPrivateTypes(),0);
priStaticMembers.writeDeclarations(ol,this,0,0,theTranslator->trStaticPrivateMembers(),0); priMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trPrivateMembers(),0);
priAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trPrivateAttribs(),0);
priSlots.writeDeclarations(ol,this,0,0,0,theTranslator->trPrivateSlots(),0);
// private static members
priStaticMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPrivateMembers(),0);
priStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPrivateAttribs(),0);
} }
friends.writeDeclarations(ol,this,0,0,theTranslator->trFriends(),0); friends.writeDeclarations(ol,this,0,0,0,theTranslator->trFriends(),0);
related.writeDeclarations(ol,this,0,0, related.writeDeclarations(ol,this,0,0,0,
theTranslator->trRelatedFunctions(), theTranslator->trRelatedFunctions(),
theTranslator->trRelatedSubscript() theTranslator->trRelatedSubscript()
); );
...@@ -1130,21 +1196,21 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md) ...@@ -1130,21 +1196,21 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md)
ol.endMemberItem(FALSE,0,0,FALSE); // TODO: pass correct group parameters ol.endMemberItem(FALSE,0,0,FALSE); // TODO: pass correct group parameters
// insert members of this class // insert members of this class
pubMembers.writePlainDeclarations(ol,this,0,0); pubMembers.writePlainDeclarations(ol,this,0,0,0);
pubSlots.writePlainDeclarations(ol,this,0,0); pubSlots.writePlainDeclarations(ol,this,0,0,0);
signals.writePlainDeclarations(ol,this,0,0); signals.writePlainDeclarations(ol,this,0,0,0);
pubStaticMembers.writePlainDeclarations(ol,this,0,0); pubStaticMembers.writePlainDeclarations(ol,this,0,0,0);
proMembers.writePlainDeclarations(ol,this,0,0); proMembers.writePlainDeclarations(ol,this,0,0,0);
proSlots.writePlainDeclarations(ol,this,0,0); proSlots.writePlainDeclarations(ol,this,0,0,0);
proStaticMembers.writePlainDeclarations(ol,this,0,0); proStaticMembers.writePlainDeclarations(ol,this,0,0,0);
if (Config::extractPrivateFlag) if (Config::extractPrivateFlag)
{ {
priMembers.writePlainDeclarations(ol,this,0,0); priMembers.writePlainDeclarations(ol,this,0,0,0);
priSlots.writePlainDeclarations(ol,this,0,0); priSlots.writePlainDeclarations(ol,this,0,0,0);
priStaticMembers.writePlainDeclarations(ol,this,0,0); priStaticMembers.writePlainDeclarations(ol,this,0,0,0);
} }
friends.writePlainDeclarations(ol,this,0,0); friends.writePlainDeclarations(ol,this,0,0,0);
related.writePlainDeclarations(ol,this,0,0); related.writePlainDeclarations(ol,this,0,0,0);
} }
/*! a link to this class is possible within this project */ /*! a link to this class is possible within this project */
......
...@@ -125,7 +125,7 @@ class ClassDef : public Definition ...@@ -125,7 +125,7 @@ class ClassDef : public Definition
BaseClassList *inheritedBy; BaseClassList *inheritedBy;
NamespaceDef *nspace; // the namespace this class is in NamespaceDef *nspace; // the namespace this class is in
/* member list by protection */ /* member lists by protection */
MemberList pubMembers; MemberList pubMembers;
MemberList proMembers; MemberList proMembers;
MemberList priMembers; MemberList priMembers;
...@@ -135,6 +135,15 @@ class ClassDef : public Definition ...@@ -135,6 +135,15 @@ class ClassDef : public Definition
MemberList pubSlots; MemberList pubSlots;
MemberList proSlots; MemberList proSlots;
MemberList priSlots; MemberList priSlots;
MemberList pubAttribs;
MemberList proAttribs;
MemberList priAttribs;
MemberList pubStaticAttribs;
MemberList proStaticAttribs;
MemberList priStaticAttribs;
MemberList pubTypes;
MemberList proTypes;
MemberList priTypes;
MemberList related; MemberList related;
MemberList signals; MemberList signals;
MemberList friends; MemberList friends;
...@@ -218,7 +227,7 @@ class BaseClassList : public QList<BaseClassDef> ...@@ -218,7 +227,7 @@ class BaseClassList : public QList<BaseClassDef>
if (c1==0 || c2==0) if (c1==0 || c2==0)
return FALSE; return FALSE;
else else
return strcasecmp(c1->name(),c2->name()); return stricmp(c1->name(),c2->name());
} }
}; };
......
...@@ -34,7 +34,7 @@ int ClassList::compareItems(GCI item1, GCI item2) ...@@ -34,7 +34,7 @@ int ClassList::compareItems(GCI item1, GCI item2)
//int prefixLength = Config::ignorePrefix.length(); //int prefixLength = Config::ignorePrefix.length();
//int i1 = c1->name().left(prefixLength)==Config::ignorePrefix ? prefixLength : 0; //int i1 = c1->name().left(prefixLength)==Config::ignorePrefix ? prefixLength : 0;
//int i2 = c2->name().left(prefixLength)==Config::ignorePrefix ? prefixLength : 0; //int i2 = c2->name().left(prefixLength)==Config::ignorePrefix ? prefixLength : 0;
return strcasecmp(c1->name().data()+getPrefixIndex(c1->name()), return stricmp(c1->name().data()+getPrefixIndex(c1->name()),
c2->name().data()+getPrefixIndex(c2->name()) c2->name().data()+getPrefixIndex(c2->name())
); );
} }
......
...@@ -301,10 +301,11 @@ static bool getLink(const char *className, ...@@ -301,10 +301,11 @@ static bool getLink(const char *className,
ClassDef *cd; ClassDef *cd;
FileDef *fd; FileDef *fd;
NamespaceDef *nd; NamespaceDef *nd;
GroupDef *gd;
QCString m=memberName; QCString m=memberName;
QCString c=className; QCString c=className;
//printf("Trying `%s'::`%s'\n",c.data(),m.data()); //printf("Trying `%s'::`%s'\n",c.data(),m.data());
if (getDefs(c,m,"()",md,cd,fd,nd) && md->isLinkable()) if (getDefs(c,m,"()",md,cd,fd,nd,gd) && md->isLinkable())
{ {
//printf("Found!\n"); //printf("Found!\n");
if (g_exampleBlock) if (g_exampleBlock)
...@@ -326,7 +327,7 @@ static bool getLink(const char *className, ...@@ -326,7 +327,7 @@ static bool getLink(const char *className,
} }
} }
Definition *d=0; Definition *d=0;
if (cd) d=cd; else if (cd) d=nd; else d=fd; if (cd) d=cd; else if (cd) d=nd; else if (fd) d=fd; else d=gd;
if (d) if (d)
{ {
......
...@@ -115,6 +115,7 @@ struct Config ...@@ -115,6 +115,7 @@ struct Config
static bool showIncFileFlag; // show include file in file documentation? static bool showIncFileFlag; // show include file in file documentation?
static bool stripCommentsFlag; // strip special comments from code fragments? static bool stripCommentsFlag; // strip special comments from code fragments?
static bool sortMembersFlag; // sort members alphabetically? static bool sortMembersFlag; // sort members alphabetically?
static bool latexBatchModeFlag; // continue after latex errors?
}; };
#endif #endif
...@@ -66,24 +66,24 @@ void warn(const char *fmt, ...) ...@@ -66,24 +66,24 @@ void warn(const char *fmt, ...)
QCString Config::projectName; QCString Config::projectName;
QCString Config::projectNumber; QCString Config::projectNumber;
QCString Config::outputDir; QCString Config::outputDir;
QCString Config::htmlOutputDir; QCString Config::htmlOutputDir = "html";
QCString Config::latexOutputDir; QCString Config::latexOutputDir = "latex";
QCString Config::manOutputDir; QCString Config::manOutputDir = "man";
QCString Config::rtfOutputDir; QCString Config::rtfOutputDir = "rtf";
QCString Config::outputLanguage; QCString Config::outputLanguage = "English";
QCString Config::headerFile; QCString Config::headerFile;
QCString Config::latexHeaderFile; QCString Config::latexHeaderFile;
QCString Config::footerFile; QCString Config::footerFile;
QCString Config::cgiName; QCString Config::cgiName = "search.cgi";
QCString Config::cgiURL; QCString Config::cgiURL;
QCString Config::docURL; QCString Config::docURL;
QCString Config::binAbsPath; QCString Config::binAbsPath = "/usr/local/bin/";
QCString Config::docAbsPath; QCString Config::docAbsPath;
QCString Config::perlPath; QCString Config::perlPath = "/usr/bin/perl";
QCString Config::genTagFile; QCString Config::genTagFile;
QCString Config::inputFilter; QCString Config::inputFilter;
QCString Config::paperType; QCString Config::paperType = "a4wide";
QCString Config::manExtension; QCString Config::manExtension = ".3";
QCString Config::htmlStyleSheet; QCString Config::htmlStyleSheet;
QStrList Config::ignorePrefixList; QStrList Config::ignorePrefixList;
QStrList Config::includePath; QStrList Config::includePath;
...@@ -124,6 +124,7 @@ bool Config::inlineSourceFlag = FALSE; ...@@ -124,6 +124,7 @@ bool Config::inlineSourceFlag = FALSE;
bool Config::rtfHyperFlag = FALSE; bool Config::rtfHyperFlag = FALSE;
bool Config::compactRTFFlag = FALSE; bool Config::compactRTFFlag = FALSE;
bool Config::haveDotFlag = FALSE; bool Config::haveDotFlag = FALSE;
bool Config::latexBatchModeFlag = FALSE;
bool Config::autoBriefFlag = TRUE; bool Config::autoBriefFlag = TRUE;
bool Config::warningFlag = TRUE; bool Config::warningFlag = TRUE;
bool Config::generateHtml = TRUE; bool Config::generateHtml = TRUE;
...@@ -480,6 +481,7 @@ void Config::init() ...@@ -480,6 +481,7 @@ void Config::init()
Config::haveDotFlag = FALSE; Config::haveDotFlag = FALSE;
Config::compactRTFFlag = FALSE; Config::compactRTFFlag = FALSE;
Config::rtfHyperFlag = FALSE; Config::rtfHyperFlag = FALSE;
Config::latexBatchModeFlag = FALSE;
Config::warningFlag = TRUE; Config::warningFlag = TRUE;
Config::generateHtml = TRUE; Config::generateHtml = TRUE;
Config::generateLatex = TRUE; Config::generateLatex = TRUE;
...@@ -503,6 +505,49 @@ void Config::init() ...@@ -503,6 +505,49 @@ void Config::init()
Config::sortMembersFlag = TRUE; Config::sortMembersFlag = TRUE;
} }
static void writeBoolValue(QTextStream &t,bool v)
{
if (v) t << "YES"; else t << "NO";
}
static void writeIntValue(QTextStream &t,int i)
{
t << i;
}
static void writeStringValue(QTextStream &t,QCString &s)
{
const char *p=s.data();
char c;
bool hasBlanks=FALSE;
if (p)
{
while ((c=*p++)!=0 && !hasBlanks) hasBlanks = (c==' ' || c=='\n' || c=='\t');
if (hasBlanks)
t << "\"" << s << "\"";
else
t << s;
}
}
static void writeStringList(QTextStream &t,QStrList &l)
{
const char *p = l.first();
bool first=TRUE;
while (p)
{
char c;
const char *s=p;
bool hasBlanks=FALSE;
while ((c=*p++)!=0 && !hasBlanks) hasBlanks = (c==' ' || c=='\n' || c=='\t');
if (!first) t << " ";
first=FALSE;
if (hasBlanks) t << "\"" << s << "\""; else t << s;
p = l.next();
if (p) t << " \\" << endl;
}
}
void writeTemplateConfig(QFile *f,bool sl) void writeTemplateConfig(QFile *f,bool sl)
{ {
QTextStream t(f); QTextStream t(f);
...@@ -531,7 +576,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -531,7 +576,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# by quotes) that should identify the project. \n"; t << "# by quotes) that should identify the project. \n";
t << "\n"; t << "\n";
} }
t << "PROJECT_NAME =\n"; t << "PROJECT_NAME = ";
writeStringValue(t,Config::projectName);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -540,7 +587,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -540,7 +587,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# if some version control system is used.\n"; t << "# if some version control system is used.\n";
t << "\n"; t << "\n";
} }
t << "PROJECT_NUMBER =\n"; t << "PROJECT_NUMBER = ";
writeStringValue(t,Config::projectNumber);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -550,7 +599,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -550,7 +599,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# where doxygen was started. If left blank the current directory will be used.\n"; t << "# where doxygen was started. If left blank the current directory will be used.\n";
t << "\n"; t << "\n";
} }
t << "OUTPUT_DIRECTORY =\n"; t << "OUTPUT_DIRECTORY = ";
writeStringValue(t,Config::outputDir);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -561,7 +612,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -561,7 +612,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Dutch, French, Italian, Czech, Swedish, German and Japanese\n"; t << "# Dutch, French, Italian, Czech, Swedish, German and Japanese\n";
t << "\n"; t << "\n";
} }
t << "OUTPUT_LANGUAGE = English\n"; t << "OUTPUT_LANGUAGE = ";
writeStringValue(t,Config::outputLanguage);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -569,7 +622,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -569,7 +622,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# by doxygen. Possible values are YES and NO. If left blank NO is used.\n"; t << "# by doxygen. Possible values are YES and NO. If left blank NO is used.\n";
t << "\n"; t << "\n";
} }
t << "QUIET = NO\n"; t << "QUIET = ";
writeBoolValue(t,Config::quietFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -578,7 +633,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -578,7 +633,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# NO is used.\n"; t << "# NO is used.\n";
t << "\n"; t << "\n";
} }
t << "WARNINGS = YES\n"; t << "WARNINGS = ";
writeBoolValue(t,Config::warningFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -587,7 +644,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -587,7 +644,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the value YES disables it.\n"; t << "# the value YES disables it.\n";
t << "\n"; t << "\n";
} }
t << "DISABLE_INDEX = NO\n"; t << "DISABLE_INDEX = ";
writeBoolValue(t,Config::noIndexFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -595,7 +654,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -595,7 +654,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# included in the documentation, even if no documentation was available.\n"; t << "# included in the documentation, even if no documentation was available.\n";
t << "\n"; t << "\n";
} }
t << "EXTRACT_ALL = NO\n"; t << "EXTRACT_ALL = ";
writeBoolValue(t,Config::extractAllFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -603,7 +664,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -603,7 +664,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will be included in the documentation.\n"; t << "# will be included in the documentation.\n";
t << "\n"; t << "\n";
} }
t << "EXTRACT_PRIVATE = NO\n"; t << "EXTRACT_PRIVATE = ";
writeBoolValue(t,Config::extractPrivateFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -611,7 +674,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -611,7 +674,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# undocumented members inside documented classes or files.\n"; t << "# undocumented members inside documented classes or files.\n";
t << "\n"; t << "\n";
} }
t << "HIDE_UNDOC_MEMBERS = NO\n"; t << "HIDE_UNDOC_MEMBERS = ";
writeBoolValue(t,Config::hideMemberFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -619,7 +684,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -619,7 +684,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# undocumented classes.\n"; t << "# undocumented classes.\n";
t << "\n"; t << "\n";
} }
t << "HIDE_UNDOC_CLASSES = NO\n"; t << "HIDE_UNDOC_CLASSES = ";
writeBoolValue(t,Config::hideClassFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -629,7 +696,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -629,7 +696,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Set to NO to disable this.\n"; t << "# Set to NO to disable this.\n";
t << "\n"; t << "\n";
} }
t << "BRIEF_MEMBER_DESC = YES\n"; t << "BRIEF_MEMBER_DESC = ";
writeBoolValue(t,Config::briefMemDescFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -639,7 +708,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -639,7 +708,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# brief descriptions will be completely suppressed.\n"; t << "# brief descriptions will be completely suppressed.\n";
t << "\n"; t << "\n";
} }
t << "REPEAT_BRIEF = YES\n"; t << "REPEAT_BRIEF = ";
writeBoolValue(t,Config::repeatBriefFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t <<"\n"; t <<"\n";
...@@ -648,7 +719,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -648,7 +719,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# description.\n"; t << "# description.\n";
t <<"\n"; t <<"\n";
} }
t << "ALWAYS_DETAILED_SEC = NO\n"; t << "ALWAYS_DETAILED_SEC = ";
writeBoolValue(t,Config::alwaysDetailsFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -657,7 +730,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -657,7 +730,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# to NO the shortest path that makes the file name unique will be used.\n"; t << "# to NO the shortest path that makes the file name unique will be used.\n";
t << "\n"; t << "\n";
} }
t << "FULL_PATH_NAMES = NO\n"; t << "FULL_PATH_NAMES = ";
writeBoolValue(t,Config::fullPathNameFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -667,7 +742,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -667,7 +742,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the path.\n"; t << "# the path.\n";
t << "\n"; t << "\n";
} }
t << "STRIP_FROM_PATH =\n"; t << "STRIP_FROM_PATH = ";
writeStringList(t,Config::stripFromPath);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -677,7 +754,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -677,7 +754,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Set it to YES to include the internal documentation.\n"; t << "# Set it to YES to include the internal documentation.\n";
t << "\n"; t << "\n";
} }
t << "INTERNAL_DOCS = NO\n"; t << "INTERNAL_DOCS = ";
writeBoolValue(t,Config::internalDocsFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -686,7 +765,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -686,7 +765,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# super classes. Setting the tag to NO turns the diagrams off.\n"; t << "# super classes. Setting the tag to NO turns the diagrams off.\n";
t << "\n"; t << "\n";
} }
t << "CLASS_DIAGRAMS = YES\n"; t << "CLASS_DIAGRAMS = ";
writeBoolValue(t,Config::classDiagramFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -694,7 +775,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -694,7 +775,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# be generated. Documented entities will be cross-referenced with these sources.\n"; t << "# be generated. Documented entities will be cross-referenced with these sources.\n";
t << "\n"; t << "\n";
} }
t << "SOURCE_BROWSER = NO\n"; t << "SOURCE_BROWSER = ";
writeBoolValue(t,Config::sourceBrowseFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -702,7 +785,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -702,7 +785,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# of functions and classes directly in the documentation.\n"; t << "# of functions and classes directly in the documentation.\n";
t << "\n"; t << "\n";
} }
t << "INLINE_SOURCES = NO\n"; t << "INLINE_SOURCES = ";
writeBoolValue(t,Config::inlineSourceFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -711,7 +796,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -711,7 +796,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# fragments. Normal C and C++ comments will always remain visible.\n"; t << "# fragments. Normal C and C++ comments will always remain visible.\n";
t << "\n"; t << "\n";
} }
t << "STRIP_CODE_COMMENTS = YES\n"; t << "STRIP_CODE_COMMENTS = ";
writeBoolValue(t,Config::stripCommentsFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -722,7 +809,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -722,7 +809,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# supports case sensitive file names.\n"; t << "# supports case sensitive file names.\n";
t << "\n"; t << "\n";
} }
t << "CASE_SENSE_NAMES = NO\n"; t << "CASE_SENSE_NAMES = ";
writeBoolValue(t,Config::caseSensitiveNames);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -731,7 +820,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -731,7 +820,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# which an include is specified. Set to NO to disable this.\n"; t << "# which an include is specified. Set to NO to disable this.\n";
t << "\n"; t << "\n";
} }
t << "VERBATIM_HEADERS = YES\n"; t << "VERBATIM_HEADERS = ";
writeBoolValue(t,Config::verbatimHeaderFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -740,7 +831,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -740,7 +831,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# of that file.\n"; t << "# of that file.\n";
t << "\n"; t << "\n";
} }
t << "SHOW_INCLUDE_FILES = YES\n"; t << "SHOW_INCLUDE_FILES = ";
writeBoolValue(t,Config::showIncFileFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -750,7 +843,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -750,7 +843,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# behave just like the Qt-style comments.\n"; t << "# behave just like the Qt-style comments.\n";
t << "\n"; t << "\n";
} }
t << "JAVADOC_AUTOBRIEF = YES\n"; t << "JAVADOC_AUTOBRIEF = ";
writeBoolValue(t,Config::autoBriefFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -759,7 +854,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -759,7 +854,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# reimplements.\n"; t << "# reimplements.\n";
t << "\n"; t << "\n";
} }
t << "INHERIT_DOCS = YES\n"; t << "INHERIT_DOCS = ";
writeBoolValue(t,Config::inheritDocsFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -767,7 +864,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -767,7 +864,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# is inserted in the documentation for inline members.\n"; t << "# is inserted in the documentation for inline members.\n";
t << "\n"; t << "\n";
} }
t << "INLINE_INFO = YES\n"; t << "INLINE_INFO = ";
writeBoolValue(t,Config::inlineInfoFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -777,7 +876,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -777,7 +876,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# declaration order.\n"; t << "# declaration order.\n";
t << "\n"; t << "\n";
} }
t << "SORT_MEMBER_DOCS = YES\n"; t << "SORT_MEMBER_DOCS = ";
writeBoolValue(t,Config::sortMembersFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -785,7 +886,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -785,7 +886,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n"; t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n";
t << "\n"; t << "\n";
} }
t << "TAB_SIZE = 8\n"; t << "TAB_SIZE = ";
writeIntValue(t,Config::tabSize);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -802,7 +905,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -802,7 +905,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# with spaces.\n"; t << "# with spaces.\n";
t << "\n"; t << "\n";
} }
t << "INPUT =\n"; t << "INPUT = ";
writeStringList(t,Config::inputSources);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -812,7 +917,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -812,7 +917,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# blank all files are included.\n"; t << "# blank all files are included.\n";
t << "\n"; t << "\n";
} }
t << "FILE_PATTERNS =\n"; t << "FILE_PATTERNS = ";
writeStringList(t,Config::filePatternList);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -821,7 +928,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -821,7 +928,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# If left blank NO is used.\n"; t << "# If left blank NO is used.\n";
t << "\n"; t << "\n";
} }
t << "RECURSIVE = NO\n"; t << "RECURSIVE = ";
writeBoolValue(t,Config::recursiveFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -830,7 +939,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -830,7 +939,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# subdirectory from a directory tree whose root is specified with the INPUT tag.\n"; t << "# subdirectory from a directory tree whose root is specified with the INPUT tag.\n";
t << "\n"; t << "\n";
} }
t << "EXCLUDE =\n"; t << "EXCLUDE = ";
writeStringList(t,Config::excludeSources);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -839,7 +950,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -839,7 +950,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# certain files from those directories.\n"; t << "# certain files from those directories.\n";
t << "\n"; t << "\n";
} }
t << "EXCLUDE_PATTERNS =\n"; t << "EXCLUDE_PATTERNS = ";
writeStringList(t,Config::excludePatternList);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -848,7 +961,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -848,7 +961,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the \\include command).\n"; t << "# the \\include command).\n";
t << "\n"; t << "\n";
} }
t << "EXAMPLE_PATH =\n"; t << "EXAMPLE_PATH = ";
writeStringList(t,Config::examplePath);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -858,7 +973,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -858,7 +973,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# blank all files are included.\n"; t << "# blank all files are included.\n";
t << "\n"; t << "\n";
} }
t << "EXAMPLE_PATTERNS =\n"; t << "EXAMPLE_PATTERNS = ";
writeStringList(t,Config::examplePatternList);
t << "\n";
if (!sl) if (!sl)
{ {
...@@ -868,7 +985,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -868,7 +985,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the \\image command).\n"; t << "# the \\image command).\n";
t << "\n"; t << "\n";
} }
t << "IMAGE_PATH =\n"; t << "IMAGE_PATH = ";
writeStringList(t,Config::imagePath);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -880,7 +999,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -880,7 +999,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# to standard output.\n"; t << "# to standard output.\n";
t << "\n"; t << "\n";
} }
t << "INPUT_FILTER =\n"; t << "INPUT_FILTER = ";
writeStringValue(t,Config::inputFilter);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -895,7 +1016,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -895,7 +1016,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# generate HTML output\n"; t << "# generate HTML output\n";
t << "\n"; t << "\n";
} }
t << "GENERATE_HTML = YES\n"; t << "GENERATE_HTML = ";
writeBoolValue(t,Config::generateHtml);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -904,7 +1027,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -904,7 +1027,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# put in front of it. If left blank `html' will be used as the default path.\n"; t << "# put in front of it. If left blank `html' will be used as the default path.\n";
t << "\n"; t << "\n";
} }
t << "HTML_OUTPUT =\n"; t << "HTML_OUTPUT = ";
writeStringValue(t,Config::htmlOutputDir);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -913,7 +1038,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -913,7 +1038,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# standard header.\n"; t << "# standard header.\n";
t << "\n"; t << "\n";
} }
t << "HTML_HEADER =\n"; t << "HTML_HEADER = ";
writeStringValue(t,Config::headerFile);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -922,7 +1049,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -922,7 +1049,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# standard footer.\n"; t << "# standard footer.\n";
t << "\n"; t << "\n";
} }
t << "HTML_FOOTER =\n"; t << "HTML_FOOTER = ";
writeStringValue(t,Config::footerFile);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -932,7 +1061,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -932,7 +1061,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will generate a default style sheet\n"; t << "# will generate a default style sheet\n";
t << "\n"; t << "\n";
} }
t << "HTML_STYLESHEET =\n"; t << "HTML_STYLESHEET = ";
writeStringValue(t,Config::htmlStyleSheet);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -941,7 +1072,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -941,7 +1072,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# NO a bullet list will be used.\n"; t << "# NO a bullet list will be used.\n";
t << "\n"; t << "\n";
} }
t << "HTML_ALIGN_MEMBERS = YES\n"; t << "HTML_ALIGN_MEMBERS = ";
writeBoolValue(t,Config::htmlAlignMemberFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -951,7 +1084,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -951,7 +1084,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# of the generated HTML documentation.\n"; t << "# of the generated HTML documentation.\n";
t << "\n"; t << "\n";
} }
t << "GENERATE_HTMLHELP = NO\n"; t << "GENERATE_HTMLHELP = ";
writeBoolValue(t,Config::htmlHelpFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -967,7 +1102,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -967,7 +1102,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# contains a lot of classes, structs, unions or interfaces.\n"; t << "# contains a lot of classes, structs, unions or interfaces.\n";
t << "\n"; t << "\n";
} }
t << "ALPHABETICAL_INDEX = NO\n"; t << "ALPHABETICAL_INDEX = ";
writeBoolValue(t,Config::alphaIndexFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -976,7 +1113,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -976,7 +1113,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# in which this list will be split (can be a number in the range [1..20])\n"; t << "# in which this list will be split (can be a number in the range [1..20])\n";
t << "\n"; t << "\n";
} }
t << "COLS_IN_ALPHA_INDEX = 5\n"; t << "COLS_IN_ALPHA_INDEX = ";
writeIntValue(t,Config::colsInAlphaIndex);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -986,7 +1125,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -986,7 +1125,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# should be ignored while generating the index headers.\n"; t << "# should be ignored while generating the index headers.\n";
t << "\n"; t << "\n";
} }
t << "IGNORE_PREFIX = \n"; t << "IGNORE_PREFIX = ";
writeStringList(t,Config::ignorePrefixList);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1001,7 +1142,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1001,7 +1142,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# generate Latex output.\n"; t << "# generate Latex output.\n";
t << "\n"; t << "\n";
} }
t << "GENERATE_LATEX = YES\n"; t << "GENERATE_LATEX = ";
writeBoolValue(t,Config::generateLatex);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1010,7 +1153,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1010,7 +1153,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# put in front of it. If left blank `latex' will be used as the default path.\n"; t << "# put in front of it. If left blank `latex' will be used as the default path.\n";
t << "\n"; t << "\n";
} }
t << "LATEX_OUTPUT =\n"; t << "LATEX_OUTPUT = ";
writeStringValue(t,Config::latexOutputDir);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1019,7 +1164,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1019,7 +1164,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# save some trees in general.\n"; t << "# save some trees in general.\n";
t << "\n"; t << "\n";
} }
t << "COMPACT_LATEX = NO\n"; t << "COMPACT_LATEX = ";
writeBoolValue(t,Config::compactLatexFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1028,7 +1175,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1028,7 +1175,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# executive. If left blank a4wide will be used.\n"; t << "# executive. If left blank a4wide will be used.\n";
t << "\n"; t << "\n";
} }
t << "PAPER_TYPE = a4wide\n"; t << "PAPER_TYPE = ";
writeStringValue(t,Config::paperType);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1036,7 +1185,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1036,7 +1185,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# packages that should be included in the LaTeX output.\n"; t << "# packages that should be included in the LaTeX output.\n";
t << "\n"; t << "\n";
} }
t << "EXTRA_PACKAGES =\n"; t << "EXTRA_PACKAGES = ";
writeStringList(t,Config::extraPackageList);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1046,7 +1197,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1046,7 +1197,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# standard header. Notice: only use this tag if you know what you are doing!\n"; t << "# standard header. Notice: only use this tag if you know what you are doing!\n";
t << "\n"; t << "\n";
} }
t << "LATEX_HEADER =\n"; t << "LATEX_HEADER = ";
writeStringValue(t,Config::latexHeaderFile);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1056,11 +1209,27 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1056,11 +1209,27 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# This makes the output suitable for online browsing using a pdf viewer.\n"; t << "# This makes the output suitable for online browsing using a pdf viewer.\n";
t << "\n"; t << "\n";
} }
t << "PDF_HYPERLINKS = NO\n"; t << "PDF_HYPERLINKS = ";
writeBoolValue(t,Config::pdfHyperFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
} }
if (!sl)
{
t << "\n";
t << "# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.\n";
t << "# command to the generated LaTeX files. This will instruct LaTeX to keep\n";
t << "# running if errors occur, instead of asking the user for help.\n";
t << "# This option is also used when generating formulas in HTML.\n";
}
if (!sl)
{
t << "LATEX_BATCHMODE = ";
}
writeBoolValue(t,Config::latexBatchModeFlag);
t << "\n";
t << "#---------------------------------------------------------------------------\n"; t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the RTF output\n"; t << "# configuration options related to the RTF output\n";
t << "#---------------------------------------------------------------------------\n"; t << "#---------------------------------------------------------------------------\n";
...@@ -1073,7 +1242,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1073,7 +1242,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# or editors.\n"; t << "# or editors.\n";
t << "\n"; t << "\n";
} }
t << "GENERATE_RTF = NO\n"; t << "GENERATE_RTF = ";
writeBoolValue(t,Config::generateRTF);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1082,7 +1253,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1082,7 +1253,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# put in front of it. If left blank `rtf' will be used as the default path.\n"; t << "# put in front of it. If left blank `rtf' will be used as the default path.\n";
t << "\n"; t << "\n";
} }
t << "RTF_OUTPUT =\n"; t << "RTF_OUTPUT = ";
writeStringValue(t,Config::rtfOutputDir);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1091,7 +1264,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1091,7 +1264,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# save some trees in general.\n"; t << "# save some trees in general.\n";
t << "\n"; t << "\n";
} }
t << "COMPACT_RTF = NO\n"; t << "COMPACT_RTF = ";
writeBoolValue(t,Config::compactRTFFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1103,7 +1278,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1103,7 +1278,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# Note: wordpad (write) and others do not support links.\n"; t << "# Note: wordpad (write) and others do not support links.\n";
t << "\n"; t << "\n";
} }
t << "RTF_HYPERLINKS = NO\n"; t << "RTF_HYPERLINKS = ";
writeBoolValue(t,Config::rtfHyperFlag);
t << "\n";
t << "#---------------------------------------------------------------------------\n"; t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the man page output\n"; t << "# configuration options related to the man page output\n";
...@@ -1115,7 +1292,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1115,7 +1292,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# generate man pages\n"; t << "# generate man pages\n";
t << "\n"; t << "\n";
} }
t << "GENERATE_MAN = YES\n"; t << "GENERATE_MAN = ";
writeBoolValue(t,Config::generateMan);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1124,7 +1303,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1124,7 +1303,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# put in front of it. If left blank `man' will be used as the default path.\n"; t << "# put in front of it. If left blank `man' will be used as the default path.\n";
t << "\n"; t << "\n";
} }
t << "MAN_OUTPUT =\n"; t << "MAN_OUTPUT = ";
writeStringValue(t,Config::manOutputDir);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1132,8 +1313,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1132,8 +1313,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the generated man pages (default is the subroutine's section .3)\n"; t << "# the generated man pages (default is the subroutine's section .3)\n";
t << "\n"; t << "\n";
} }
t << "MAN_EXTENSION = .3\n"; t << "MAN_EXTENSION = ";
writeStringValue(t,Config::manExtension);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1149,7 +1331,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1149,7 +1331,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# files.\n"; t << "# files.\n";
t << "\n"; t << "\n";
} }
t << "ENABLE_PREPROCESSING = YES\n"; t << "ENABLE_PREPROCESSING = ";
writeBoolValue(t,Config::preprocessingFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1158,7 +1342,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1158,7 +1342,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# compilation will be performed.\n"; t << "# compilation will be performed.\n";
t << "\n"; t << "\n";
} }
t << "MACRO_EXPANSION = NO\n"; t << "MACRO_EXPANSION = ";
writeBoolValue(t,Config::macroExpansionFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1166,7 +1352,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1166,7 +1352,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# in the INCLUDE_PATH (see below) will be search if a #include is found.\n"; t << "# in the INCLUDE_PATH (see below) will be search if a #include is found.\n";
t << "\n"; t << "\n";
} }
t << "SEARCH_INCLUDES = YES\n"; t << "SEARCH_INCLUDES = ";
writeBoolValue(t,Config::searchIncludeFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1175,7 +1363,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1175,7 +1363,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the preprocessor.\n" ; t << "# the preprocessor.\n" ;
t << "\n"; t << "\n";
} }
t << "INCLUDE_PATH =\n"; t << "INCLUDE_PATH = ";
writeStringList(t,Config::includePath);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1186,7 +1376,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1186,7 +1376,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# omitted =1 is assumed.\n"; t << "# omitted =1 is assumed.\n";
t << "\n"; t << "\n";
} }
t << "PREDEFINED =\n"; t << "PREDEFINED = ";
writeStringList(t,Config::predefined);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1195,7 +1387,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1195,7 +1387,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# PREDEFINED tag.\n"; t << "# PREDEFINED tag.\n";
t << "\n"; t << "\n";
} }
t << "EXPAND_ONLY_PREDEF = NO\n"; t << "EXPAND_ONLY_PREDEF = ";
writeBoolValue(t,Config::onlyPredefinedFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1209,7 +1403,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1209,7 +1403,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# The TAGFILES tag can be used to specify one or more tagfiles. \n"; t << "# The TAGFILES tag can be used to specify one or more tagfiles. \n";
t << "\n"; t << "\n";
} }
t << "TAGFILES =\n"; t << "TAGFILES = ";
writeStringList(t,Config::tagFileList);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1217,7 +1413,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1217,7 +1413,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# a tag file that is based on the input files it reads.\n"; t << "# a tag file that is based on the input files it reads.\n";
t << "\n"; t << "\n";
} }
t << "GENERATE_TAGFILE =\n"; t << "GENERATE_TAGFILE = ";
writeStringValue(t,Config::genTagFile);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1226,7 +1424,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1226,7 +1424,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will be listed.\n"; t << "# will be listed.\n";
t << "\n"; t << "\n";
} }
t << "ALLEXTERNALS = NO\n"; t << "ALLEXTERNALS = ";
writeBoolValue(t,Config::allExtFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1234,7 +1434,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1234,7 +1434,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# interpreter (i.e. the result of `which perl').\n"; t << "# interpreter (i.e. the result of `which perl').\n";
t << "\n"; t << "\n";
} }
t << "PERL_PATH = /usr/bin/perl\n"; t << "PERL_PATH = ";
writeStringValue(t,Config::perlPath);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1251,7 +1453,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1251,7 +1453,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# have no effect if this option is set to NO (the default)\n"; t << "# have no effect if this option is set to NO (the default)\n";
t << "\n"; t << "\n";
} }
t << "HAVE_DOT = NO\n"; t << "HAVE_DOT = ";
writeBoolValue(t,Config::haveDotFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1261,7 +1465,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1261,7 +1465,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# class references variables) of the class with other documented classes.\n"; t << "# class references variables) of the class with other documented classes.\n";
t << "\n"; t << "\n";
} }
t << "COLLABORATION_GRAPH = YES\n"; t << "COLLABORATION_GRAPH = ";
writeBoolValue(t,Config::collGraphFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1271,7 +1477,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1271,7 +1477,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# documented files.\n"; t << "# documented files.\n";
t << "\n"; t << "\n";
} }
t << "INCLUDE_GRAPH = YES\n"; t << "INCLUDE_GRAPH = ";
writeBoolValue(t,Config::includeGraphFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1279,7 +1487,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1279,7 +1487,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will graphical hierarchy of all classes instead of a textual one.\n"; t << "# will graphical hierarchy of all classes instead of a textual one.\n";
t << "\n"; t << "\n";
} }
t << "GRAPHICAL_HIERARCHY = YES\n"; t << "GRAPHICAL_HIERARCHY = ";
writeBoolValue(t,Config::gfxHierarchyFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1294,7 +1504,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1294,7 +1504,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# used. If set to NO the values of all tags below this one will be ignored.\n"; t << "# used. If set to NO the values of all tags below this one will be ignored.\n";
t << "\n"; t << "\n";
} }
t << "SEARCHENGINE = NO\n"; t << "SEARCHENGINE = ";
writeBoolValue(t,Config::searchEngineFlag);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1303,7 +1515,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1303,7 +1515,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# A script with this name will be generated by doxygen.\n"; t << "# A script with this name will be generated by doxygen.\n";
t << "\n"; t << "\n";
} }
t << "CGI_NAME = search.cgi\n"; t << "CGI_NAME = ";
writeStringValue(t,Config::cgiName);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1312,7 +1526,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1312,7 +1526,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# details.\n"; t << "# details.\n";
t << "\n"; t << "\n";
} }
t << "CGI_URL =\n"; t << "CGI_URL = ";
writeStringValue(t,Config::cgiURL);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1321,7 +1537,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1321,7 +1537,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# documentation, with file:// prepended to it, will be used.\n"; t << "# documentation, with file:// prepended to it, will be used.\n";
t << "\n"; t << "\n";
} }
t << "DOC_URL =\n"; t << "DOC_URL = ";
writeStringValue(t,Config::docURL);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1330,7 +1548,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1330,7 +1548,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# will be used.\n"; t << "# will be used.\n";
t << "\n"; t << "\n";
} }
t << "DOC_ABSPATH =\n"; t << "DOC_ABSPATH = ";
writeStringValue(t,Config::docAbsPath);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1338,7 +1558,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1338,7 +1558,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# is installed.\n"; t << "# is installed.\n";
t << "\n"; t << "\n";
} }
t << "BIN_ABSPATH = /usr/local/bin/\n"; t << "BIN_ABSPATH = ";
writeStringValue(t,Config::binAbsPath);
t << "\n";
if (!sl) if (!sl)
{ {
t << "\n"; t << "\n";
...@@ -1347,7 +1569,9 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1347,7 +1569,9 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# the documentation for these projects as well.\n"; t << "# the documentation for these projects as well.\n";
t << "\n"; t << "\n";
} }
t << "EXT_DOC_PATHS =\n"; t << "EXT_DOC_PATHS = ";
writeStringList(t,Config::extDocPathList);
t << "\n";
} }
void checkConfig() void checkConfig()
......
...@@ -53,7 +53,7 @@ class DefineList : public QList<Define> ...@@ -53,7 +53,7 @@ class DefineList : public QList<Define>
~DefineList() {} ~DefineList() {}
int compareItems(GCI i1,GCI i2) int compareItems(GCI i1,GCI i2)
{ {
return strcasecmp(((Define *)i1)->name,((Define *)i2)->name); return stricmp(((Define *)i1)->name,((Define *)i2)->name);
} }
}; };
...@@ -65,7 +65,7 @@ class DefineName : public QList<Define> ...@@ -65,7 +65,7 @@ class DefineName : public QList<Define>
const char *nameString() const { return name; } const char *nameString() const { return name; }
int compareItems(GCI i1,GCI i2) int compareItems(GCI i1,GCI i2)
{ {
return strcasecmp(((Define *)i1)->name,((Define *)i2)->name); return stricmp(((Define *)i1)->name,((Define *)i2)->name);
} }
private: private:
......
...@@ -159,7 +159,7 @@ class DotNodeList : public QList<DotNode> ...@@ -159,7 +159,7 @@ class DotNodeList : public QList<DotNode>
~DotNodeList() {} ~DotNodeList() {}
int compareItems(GCI item1,GCI item2) int compareItems(GCI item1,GCI item2)
{ {
return strcasecmp(((DotNode *)item1)->m_label,((DotNode *)item2)->m_label); return stricmp(((DotNode *)item1)->m_label,((DotNode *)item2)->m_label);
} }
}; };
......
...@@ -141,6 +141,7 @@ int annotatedClasses; ...@@ -141,6 +141,7 @@ int annotatedClasses;
int hierarchyClasses; int hierarchyClasses;
int documentedFunctions; int documentedFunctions;
int documentedMembers; int documentedMembers;
int documentedHtmlFiles;
int documentedFiles; int documentedFiles;
int documentedGroups; int documentedGroups;
int documentedNamespaces; int documentedNamespaces;
...@@ -432,6 +433,48 @@ static bool addNamespace(Entry *root,ClassDef *cd) ...@@ -432,6 +433,48 @@ static bool addNamespace(Entry *root,ClassDef *cd)
return FALSE; return FALSE;
} }
static void addClassToGroups(Entry *root,ClassDef *cd)
{
QListIterator<QCString> sli(*root->groups);
QCString *s;
for (;(s=sli.current());++sli)
{
GroupDef *gd=0;
if (!s->isEmpty() && (gd=groupDict[*s]))
{
gd->addClass(cd);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data());
}
}
}
static void addMemberToGroups(Entry *root,MemberDef *md)
{
QListIterator<QCString> sli(*root->groups);
QCString *s;
for (;(s=sli.current());++sli)
{
GroupDef *gd=0;
if (!s->isEmpty() && (gd=groupDict[*s]))
{
GroupDef *mgd = md->groupDef();
if (mgd==0)
{
gd->addMember(md);
md->setGroupDef(gd);
}
else if (mgd!=gd)
{
warn("Warning: Member %s found in multiple groups.!\n"
"The member will be put in group %s, and not in group %s",
md->name().data(),mgd->name().data(),gd->name().data()
);
}
//printf("Member %s: in group %s\n",md->name().data(),s->data());
}
}
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// build a list of all classes mentioned in the documentation // build a list of all classes mentioned in the documentation
...@@ -518,6 +561,7 @@ void buildClassList(Entry *root) ...@@ -518,6 +561,7 @@ void buildClassList(Entry *root)
// ); // );
fd->insertClass(cd); fd->insertClass(cd);
} }
addClassToGroups(root,cd);
} }
else // new class else // new class
{ {
...@@ -555,17 +599,7 @@ void buildClassList(Entry *root) ...@@ -555,17 +599,7 @@ void buildClassList(Entry *root)
cd->setBodySegment(root->bodyLine,root->endBodyLine); cd->setBodySegment(root->bodyLine,root->endBodyLine);
cd->setBodyDef(fd); cd->setBodyDef(fd);
QListIterator<QCString> sli(*root->groups); addClassToGroups(root,cd);
QCString *s;
for (;(s=sli.current());++sli)
{
GroupDef *gd=0;
if (!s->isEmpty() && (gd=groupDict[*s]))
{
gd->addClass(cd);
//printf("Compound %s: in group %s\n",cd->name().data(),s->data());
}
}
// see if the class is found inside a namespace // see if the class is found inside a namespace
bool found=addNamespace(root,cd); bool found=addNamespace(root,cd);
...@@ -1340,6 +1374,8 @@ void buildMemberList(Entry *root) ...@@ -1340,6 +1374,8 @@ void buildMemberList(Entry *root)
cd->insertMember(md); cd->insertMember(md);
// add file to list of used files // add file to list of used files
cd->insertUsedFile(root->fileName); cd->insertUsedFile(root->fileName);
addMemberToGroups(root,md);
} }
else if (root->parent && else if (root->parent &&
!(root->parent->section & Entry::COMPOUND_MASK) && !(root->parent->section & Entry::COMPOUND_MASK) &&
...@@ -1493,6 +1529,7 @@ void buildMemberList(Entry *root) ...@@ -1493,6 +1529,7 @@ void buildMemberList(Entry *root)
functionNameDict.insert(name,mn); functionNameDict.insert(name,mn);
functionNameList.inSort(mn); functionNameList.inSort(mn);
} }
addMemberToGroups(root,md);
} }
else else
{ {
...@@ -1874,7 +1911,7 @@ void computeClassRelations(Entry *root) ...@@ -1874,7 +1911,7 @@ void computeClassRelations(Entry *root)
} }
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
// compute the references (anchors in HTML) for each member in the class // compute the references (anchors in HTML) for each function in the file
void computeMemberReferences() void computeMemberReferences()
{ {
...@@ -1884,13 +1921,6 @@ void computeMemberReferences() ...@@ -1884,13 +1921,6 @@ void computeMemberReferences()
cd->computeAnchors(); cd->computeAnchors();
cd=classList.next(); cd=classList.next();
} }
}
//-----------------------------------------------------------------------
// compute the references (anchors in HTML) for each function in the file
void computeFunctionReferences()
{
FileName *fn=inputNameList.first(); FileName *fn=inputNameList.first();
while (fn) while (fn)
{ {
...@@ -1908,6 +1938,12 @@ void computeFunctionReferences() ...@@ -1908,6 +1938,12 @@ void computeFunctionReferences()
nd->computeAnchors(); nd->computeAnchors();
nd=namespaceList.next(); nd=namespaceList.next();
} }
GroupDef *gd=groupList.first();
while (gd)
{
gd->computeAnchors();
gd=groupList.next();
}
} }
...@@ -1994,6 +2030,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl, ...@@ -1994,6 +2030,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
md->setDefLine(root->startLine); md->setDefLine(root->startLine);
if (root->inLine && !md->isInline()) md->setInline(TRUE); if (root->inLine && !md->isInline()) md->setInline(TRUE);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
addMemberToGroups(root,md);
if (cd) cd->insertUsedFile(root->fileName); if (cd) cd->insertUsedFile(root->fileName);
if (root->mGrpId!=-1) if (root->mGrpId!=-1)
{ {
...@@ -3373,7 +3410,7 @@ void computeMemberRelations() ...@@ -3373,7 +3410,7 @@ void computeMemberRelations()
// mcd->name().data(),md->name().data(), // mcd->name().data(),md->name().data(),
// bmcd->name().data(),bmd->name().data() // bmcd->name().data(),bmd->name().data()
// ); // );
if (md!=bmd && bmcd && mcd && mcd->isBaseClass(bmcd)) if (md!=bmd && bmcd && mcd && bmcd!=mcd && mcd->isBaseClass(bmcd))
{ {
//printf(" Base argList=`%s'\n Super argList=`%s'\n", //printf(" Base argList=`%s'\n Super argList=`%s'\n",
// argListToString(bmd->argumentList()).data(), // argListToString(bmd->argumentList()).data(),
...@@ -3386,7 +3423,14 @@ void computeMemberRelations() ...@@ -3386,7 +3423,14 @@ void computeMemberRelations()
mcd->isLinkable() && bmcd->isLinkable() mcd->isLinkable() && bmcd->isLinkable()
) )
{ {
md->setReimplements(bmd); MemberDef *rmd;
if ((rmd=md->reimplements())==0 ||
minClassDistance(mcd,bmcd)<minClassDistance(mcd,rmd->memberClass())
)
{
//printf("setting (new) reimplements member\n");
md->setReimplements(bmd);
}
bmd->insertReimplementedBy(md); bmd->insertReimplementedBy(md);
} }
} }
...@@ -3450,7 +3494,7 @@ void buildCompleteMemberLists() ...@@ -3450,7 +3494,7 @@ void buildCompleteMemberLists()
void generateFileDocs() void generateFileDocs()
{ {
if (documentedFiles==0) return; if (documentedHtmlFiles==0) return;
writeFileIndex(*outputList); writeFileIndex(*outputList);
if (inputNameList.count()>0) if (inputNameList.count()>0)
...@@ -4628,15 +4672,17 @@ void readFormulaRepository() ...@@ -4628,15 +4672,17 @@ void readFormulaRepository()
void usage(const char *name) void usage(const char *name)
{ {
msg("Doxygen version %s\nCopyright Dimitri van Heesch 1997-2000\n\n",versionString); msg("Doxygen version %s\nCopyright Dimitri van Heesch 1997-2000\n\n",versionString);
msg("You can use doxygen in two ways:\n\n"); msg("You can use doxygen in three ways:\n\n");
msg("1) Use doxygen to generate a template configuration file:\n"); msg("1) Use doxygen to generate a template configuration file:\n");
msg(" %s [-s] -g [configName]\n\n",name); msg(" %s [-s] -g [configName]\n\n",name);
msg(" If -s is specified the comments in the config file will be omitted.\n");
msg(" If - is used for configName doxygen will write to standard output.\n\n"); msg(" If - is used for configName doxygen will write to standard output.\n\n");
msg("2) Use doxygen to generate documentation using an existing "); msg("2) Use doxygen to update an old configuration file:\n");
msg(" %s [-s] -u [configName]\n\n",name);
msg("3) Use doxygen to generate documentation using an existing ");
msg("configuration file:\n"); msg("configuration file:\n");
msg(" %s [configName]\n\n",name); msg(" %s [configName]\n\n",name);
msg(" If - is used for configName doxygen will read from standard input.\n\n"); msg(" If - is used for configName doxygen will read from standard input.\n\n");
msg("If -s is specified the comments in the config file will be omitted.\n");
msg("If configName is omitted `Doxyfile' will be used as a default.\n\n"); msg("If configName is omitted `Doxyfile' will be used as a default.\n\n");
exit(1); exit(1);
} }
...@@ -4672,6 +4718,7 @@ int main(int argc,char **argv) ...@@ -4672,6 +4718,7 @@ int main(int argc,char **argv)
const char *debugLabel; const char *debugLabel;
bool genConfig=FALSE; bool genConfig=FALSE;
bool shortList=FALSE; bool shortList=FALSE;
bool updateConfig=FALSE;
while (optind<argc && argv[optind][0]=='-' && while (optind<argc && argv[optind][0]=='-' &&
(isalpha(argv[optind][1]) || argv[optind][1]=='?') (isalpha(argv[optind][1]) || argv[optind][1]=='?')
) )
...@@ -4690,6 +4737,9 @@ int main(int argc,char **argv) ...@@ -4690,6 +4737,9 @@ int main(int argc,char **argv)
case 's': case 's':
shortList=TRUE; shortList=TRUE;
break; break;
case 'u':
updateConfig=TRUE;
break;
case 'h': case 'h':
case '?': case '?':
usage(argv[0]); usage(argv[0]);
...@@ -4711,21 +4761,19 @@ int main(int argc,char **argv) ...@@ -4711,21 +4761,19 @@ int main(int argc,char **argv)
exit(1); exit(1);
} }
compoundKeywordDict.insert("class",(void *)8);
compoundKeywordDict.insert("struct",(void *)8);
compoundKeywordDict.insert("union",(void *)8);
compoundKeywordDict.insert("interface",(void *)8);
compoundKeywordDict.insert("exception",(void *)8);
QFileInfo configFileInfo1("Doxyfile"),configFileInfo2("doxyfile"); QFileInfo configFileInfo1("Doxyfile"),configFileInfo2("doxyfile");
QCString config; QCString config;
if (optind>=argc) if (optind>=argc)
{ {
if (configFileInfo1.exists()) if (configFileInfo1.exists())
{
config=fileToString("Doxyfile"); config=fileToString("Doxyfile");
configName="Doxyfile";
}
else if (configFileInfo2.exists()) else if (configFileInfo2.exists())
{ {
config=fileToString("doxyfile"); config=fileToString("doxyfile");
configName="doxyfile";
} }
else else
{ {
...@@ -4734,11 +4782,31 @@ int main(int argc,char **argv) ...@@ -4734,11 +4782,31 @@ int main(int argc,char **argv)
} }
} }
else else
{
config=fileToString(argv[optind]); config=fileToString(argv[optind]);
configName=argv[optind];
}
parseConfig(config); parseConfig(config);
if (updateConfig)
{
generateConfigFile(configName,shortList);
exit(1);
}
checkConfig(); checkConfig();
/**************************************************************************
* Initialize some global constants
**************************************************************************/
spaces.fill(' ',Config::tabSize); spaces.fill(' ',Config::tabSize);
compoundKeywordDict.insert("class",(void *)8);
compoundKeywordDict.insert("struct",(void *)8);
compoundKeywordDict.insert("union",(void *)8);
compoundKeywordDict.insert("interface",(void *)8);
compoundKeywordDict.insert("exception",(void *)8);
/************************************************************************** /**************************************************************************
* Initialize output generators * * Initialize output generators *
...@@ -4943,9 +5011,6 @@ int main(int argc,char **argv) ...@@ -4943,9 +5011,6 @@ int main(int argc,char **argv)
msg("Computing member references...\n"); msg("Computing member references...\n");
computeMemberReferences(); computeMemberReferences();
msg("Computing function references...\n");
computeFunctionReferences();
msg("Computing member relations...\n"); msg("Computing member relations...\n");
computeMemberRelations(); computeMemberRelations();
...@@ -4990,7 +5055,7 @@ int main(int argc,char **argv) ...@@ -4990,7 +5055,7 @@ int main(int argc,char **argv)
hierarchyClasses = countClassHierarchy(); hierarchyClasses = countClassHierarchy();
documentedMembers = countClassMembers(); documentedMembers = countClassMembers();
documentedFunctions = countFileMembers(); documentedFunctions = countFileMembers();
documentedFiles = countFiles(); countFiles(documentedHtmlFiles,documentedFiles);
documentedGroups = countGroups(); documentedGroups = countGroups();
documentedNamespaces = countNamespaces(); documentedNamespaces = countNamespaces();
documentedNamespaceMembers = countNamespaceMembers(); documentedNamespaceMembers = countNamespaceMembers();
......
...@@ -124,6 +124,7 @@ extern int documentedFunctions; ...@@ -124,6 +124,7 @@ extern int documentedFunctions;
extern int documentedMembers; extern int documentedMembers;
extern int documentedDefines; extern int documentedDefines;
extern int documentedFiles; extern int documentedFiles;
extern int documentedHtmlFiles;
extern int documentedGroups; extern int documentedGroups;
extern int documentedNamespaces; extern int documentedNamespaces;
extern int documentedNamespaceMembers; extern int documentedNamespaceMembers;
......
...@@ -23,6 +23,7 @@ Entry::Entry() ...@@ -23,6 +23,7 @@ Entry::Entry()
num++; num++;
//printf("New Entry %d\n",num); //printf("New Entry %d\n",num);
parent=0; parent=0;
section = EMPTY_SEC;
sublist = new QList<Entry>; sublist = new QList<Entry>;
sublist->setAutoDelete(TRUE); sublist->setAutoDelete(TRUE);
extends = new QList<BaseInfo>; extends = new QList<BaseInfo>;
......
...@@ -294,7 +294,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -294,7 +294,7 @@ void FileDef::writeDocumentation(OutputList &ol)
if (found) ol.endMemberList(); if (found) ol.endMemberList();
} }
allMemberList.writeDeclarations(ol,0,0,this,0,0); allMemberList.writeDeclarations(ol,0,0,this,0,0,0);
ol.endMemberSections(); ol.endMemberSections();
//doc=doc.stripWhiteSpace(); //doc=doc.stripWhiteSpace();
...@@ -346,75 +346,74 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -346,75 +346,74 @@ void FileDef::writeDocumentation(OutputList &ol)
} }
} }
//memList->countDocMembers();
defineMembers.countDocMembers(); defineMembers.countDocMembers();
if ( /*memList->defineCount()>0*/ defineMembers.totalCount()>0 ) if (defineMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trDefineDocumentation()); parseText(ol,theTranslator->trDefineDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
/*memList->*/defineMembers.writeDocumentation(ol,name()/*,MemberDef::Define*/); defineMembers.writeDocumentation(ol,name());
} }
protoMembers.countDocMembers(); protoMembers.countDocMembers();
if ( /*memList->protoCount()>0*/ protoMembers.totalCount()>0 ) if (protoMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trFunctionPrototypeDocumentation()); parseText(ol,theTranslator->trFunctionPrototypeDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
/*memList->*/protoMembers.writeDocumentation(ol,name()/*,MemberDef::Prototype*/); protoMembers.writeDocumentation(ol,name());
} }
typedefMembers.countDocMembers(); typedefMembers.countDocMembers();
if ( /*memList->typedefCount()>0*/ typedefMembers.totalCount()>0 ) if (typedefMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trTypedefDocumentation()); parseText(ol,theTranslator->trTypedefDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
/*memList->*/typedefMembers.writeDocumentation(ol,name()/*,MemberDef::Typedef*/); typedefMembers.writeDocumentation(ol,name());
} }
enumMembers.countDocMembers(); enumMembers.countDocMembers();
if ( /*memList->enumCount()>0*/ enumMembers.totalCount()>0 ) if (enumMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trEnumerationTypeDocumentation()); parseText(ol,theTranslator->trEnumerationTypeDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
/*memList->*/enumMembers.writeDocumentation(ol,name()/*,MemberDef::Enumeration*/); enumMembers.writeDocumentation(ol,name());
} }
enumValMembers.countDocMembers(); enumValMembers.countDocMembers();
if ( /*memList->enumValueCount()>0*/ enumValMembers.totalCount()>0 ) if (enumValMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trEnumerationValueDocumentation()); parseText(ol,theTranslator->trEnumerationValueDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
/*memList->*/enumValMembers.writeDocumentation(ol,name()/*,MemberDef::EnumValue*/); enumValMembers.writeDocumentation(ol,name());
} }
funcMembers.countDocMembers(); funcMembers.countDocMembers();
if ( /*memList->funcCount()>0*/ funcMembers.totalCount()>0 ) if (funcMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trFunctionDocumentation()); parseText(ol,theTranslator->trFunctionDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
/*memList->*/funcMembers.writeDocumentation(ol,name()/*,MemberDef::Function*/); funcMembers.writeDocumentation(ol,name());
} }
varMembers.countDocMembers(); varMembers.countDocMembers();
if ( /*memList->varCount()>0*/ varMembers.totalCount()>0 ) if (varMembers.totalCount()>0 )
{ {
ol.writeRuler(); ol.writeRuler();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trVariableDocumentation()); parseText(ol,theTranslator->trVariableDocumentation());
ol.endGroupHeader(); ol.endGroupHeader();
/*memList->*/varMembers.writeDocumentation(ol,name()/*,MemberDef::Variable*/); varMembers.writeDocumentation(ol,name());
} }
// write Author section (Man only) // write Author section (Man only)
...@@ -573,8 +572,8 @@ int FileList::compareItems(GCI item1, GCI item2) ...@@ -573,8 +572,8 @@ int FileList::compareItems(GCI item1, GCI item2)
FileDef *f2=(FileDef *)item2; FileDef *f2=(FileDef *)item2;
ASSERT(f1!=0 && f2!=0); ASSERT(f1!=0 && f2!=0);
return Config::fullPathNameFlag ? return Config::fullPathNameFlag ?
strcasecmp(f1->absFilePath(),f2->absFilePath()) : stricmp(f1->absFilePath(),f2->absFilePath()) :
strcasecmp(f1->name(),f2->name()); stricmp(f1->name(),f2->name());
} }
/*! Create a file list iterator. */ /*! Create a file list iterator. */
......
...@@ -62,11 +62,13 @@ void FormulaList::generateBitmaps(const char *path) ...@@ -62,11 +62,13 @@ void FormulaList::generateBitmaps(const char *path)
FormulaListIterator fli(*this); FormulaListIterator fli(*this);
Formula *formula; Formula *formula;
QFile f(texName); QFile f(texName);
bool formulaError=FALSE;
if (f.open(IO_WriteOnly)) if (f.open(IO_WriteOnly))
{ {
QTextStream t(&f); QTextStream t(&f);
if (Config::latexBatchModeFlag) t << "\\batchmode" << endl;
t << "\\documentclass{article}" << endl; t << "\\documentclass{article}" << endl;
t << "\\usepackage{epsf}" << endl; // for those who want to include images t << "\\usepackage{epsfig}" << endl; // for those who want to include images
const char *s=Config::extraPackageList.first(); const char *s=Config::extraPackageList.first();
while (s) while (s)
{ {
...@@ -99,8 +101,9 @@ void FormulaList::generateBitmaps(const char *path) ...@@ -99,8 +101,9 @@ void FormulaList::generateBitmaps(const char *path)
//system("latex _formulas.tex </dev/null >/dev/null"); //system("latex _formulas.tex </dev/null >/dev/null");
if (system("latex _formulas.tex")!=0) if (system("latex _formulas.tex")!=0)
{ {
err("Problems running latex. Check your installation or look at _formulas.tex!\n"); err("Problems running latex. Check your installation or look for typos in _formulas.tex!\n");
return; formulaError=TRUE;
//return;
} }
//printf("Running dvips...\n"); //printf("Running dvips...\n");
QListIterator<int> pli(pagesToGenerate); QListIterator<int> pli(pagesToGenerate);
...@@ -281,7 +284,7 @@ void FormulaList::generateBitmaps(const char *path) ...@@ -281,7 +284,7 @@ void FormulaList::generateBitmaps(const char *path)
thisDir.remove("_formulas.aux"); thisDir.remove("_formulas.aux");
} }
// remove the latex file itself // remove the latex file itself
thisDir.remove("_formulas.tex"); if (!formulaError) thisDir.remove("_formulas.tex");
// write/update the formula repository so we know what text the // write/update the formula repository so we know what text the
// generated gifs represent (we use this next time to avoid regeneration // generated gifs represent (we use this next time to avoid regeneration
// of the gifs, and to avoid forcing the user to delete all gifs in order // of the gifs, and to avoid forcing the user to delete all gifs in order
......
...@@ -25,13 +25,18 @@ ...@@ -25,13 +25,18 @@
#include "namespacedef.h" #include "namespacedef.h"
#include "language.h" #include "language.h"
#include "util.h" #include "util.h"
#include "memberlist.h"
#include "message.h"
GroupDef::GroupDef(const char *na,const char *t) : Definition(na) GroupDef::GroupDef(const char *na,const char *t) :
Definition(na)
{ {
fileList = new FileList; fileList = new FileList;
classList = new ClassList; classList = new ClassList;
// groupList = new GroupList; // groupList = new GroupList;
// name = n;
allMemberList = new MemberList;
allMemberDict = new QDict<MemberDef>;
if (t) if (t)
title = t; title = t;
else else
...@@ -64,6 +69,28 @@ void GroupDef::addNamespace(const NamespaceDef *def) ...@@ -64,6 +69,28 @@ void GroupDef::addNamespace(const NamespaceDef *def)
namespaceList->append(def); namespaceList->append(def);
} }
void GroupDef::addMember(const MemberDef *md)
{
QCString funcDecl=md->name()+md->argsString();
if (allMemberDict->find(funcDecl)==0)
{
allMemberList->append(md);
allMemberDict->insert(funcDecl,md);
switch(md->memberType())
{
case MemberDef::Variable: varMembers.inSort(md); break;
case MemberDef::Function: funcMembers.inSort(md); break;
case MemberDef::Typedef: typedefMembers.inSort(md); break;
case MemberDef::Enumeration: enumMembers.inSort(md); break;
case MemberDef::EnumValue: enumValMembers.inSort(md); break;
case MemberDef::Prototype: protoMembers.inSort(md); break;
case MemberDef::Define: defineMembers.inSort(md); break;
default:
err("FileDef::insertMembers(): unexpected member insert in file!\n");
}
}
}
//void GroupDef::addGroup(const GroupDef *def) //void GroupDef::addGroup(const GroupDef *def)
//{ //{
// groupList->append(def); // groupList->append(def);
...@@ -71,7 +98,13 @@ void GroupDef::addNamespace(const NamespaceDef *def) ...@@ -71,7 +98,13 @@ void GroupDef::addNamespace(const NamespaceDef *def)
int GroupDef::countMembers() const int GroupDef::countMembers() const
{ {
return fileList->count()+classList->count(); return fileList->count()+classList->count()+allMemberList->count();
}
/*! Compute the HTML anchor names for all members in the class */
void GroupDef::computeAnchors()
{
setAnchors('a',allMemberList);
} }
void GroupDef::writeDocumentation(OutputList &ol) void GroupDef::writeDocumentation(OutputList &ol)
...@@ -100,20 +133,29 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -100,20 +133,29 @@ void GroupDef::writeDocumentation(OutputList &ol)
//ol.enable(OutputGenerator::Latex); //ol.enable(OutputGenerator::Latex);
ol.popGeneratorState(); ol.popGeneratorState();
} }
ol.startMemberSections();
if (fileList->count()>0) if (fileList->count()>0)
{ {
ol.startGroupHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trFiles()); parseText(ol,theTranslator->trFiles());
ol.endGroupHeader(); ol.endMemberHeader();
ol.startIndexList();
FileDef *fd=fileList->first(); FileDef *fd=fileList->first();
while (fd) while (fd)
{ {
ol.writeStartAnnoItem("file ",fd->getOutputFileBase(),0,fd->name()); ol.startMemberItem(FALSE,0);
ol.writeEndAnnoItem(fd->name()); ol.docify("file");
ol.insertMemberAlign();
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
ol.endMemberItem(FALSE,0,0,FALSE);
if (!fd->briefDescription().isEmpty() && Config::briefMemDescFlag)
{
ol.startMemberDescription();
parseDoc(ol,0,0,fd->briefDescription());
ol.endMemberDescription();
ol.newParagraph();
}
fd=fileList->next(); fd=fileList->next();
} }
ol.endIndexList();
} }
if (classList->count()>0) if (classList->count()>0)
{ {
...@@ -123,10 +165,9 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -123,10 +165,9 @@ void GroupDef::writeDocumentation(OutputList &ol)
{ {
if (!found) if (!found)
{ {
ol.startGroupHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trCompounds()); parseText(ol,theTranslator->trCompounds());
ol.endGroupHeader(); ol.endMemberHeader();
ol.startIndexList();
found=TRUE; found=TRUE;
} }
QCString type; QCString type;
...@@ -138,24 +179,35 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -138,24 +179,35 @@ void GroupDef::writeDocumentation(OutputList &ol)
case ClassDef::Interface: type="interface"; break; case ClassDef::Interface: type="interface"; break;
case ClassDef::Exception: type="exception"; break; case ClassDef::Exception: type="exception"; break;
} }
ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name()); ol.startMemberItem(FALSE,0);
ol.writeEndAnnoItem(cd->name()); ol.docify(type);
ol.insertMemberAlign();
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->name());
ol.endMemberItem(FALSE,0,0,FALSE);
if (!cd->briefDescription().isEmpty() && Config::briefMemDescFlag)
{
ol.startMemberDescription();
parseDoc(ol,0,0,cd->briefDescription());
ol.endMemberDescription();
ol.newParagraph();
}
cd=classList->next(); cd=classList->next();
} }
ol.endIndexList();
} }
if (allMemberList->count()>0)
{
allMemberList->writeDeclarations(ol,0,0,0,this,0,0);
}
ol.endMemberSections();
//int dl=doc.length(); //int dl=doc.length();
//doc=doc.stripWhiteSpace(); //doc=doc.stripWhiteSpace();
if (!briefDescription().isEmpty() || !documentation().isEmpty()) if (!briefDescription().isEmpty() || !documentation().isEmpty())
{ {
ol.writeRuler(); ol.writeRuler();
ol.pushGeneratorState(); ol.pushGeneratorState();
//bool latexOn = ol.isEnabled(OutputGenerator::Latex);
//if (latexOn) ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::Latex); ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF); ol.disable(OutputGenerator::RTF);
ol.writeAnchor("_details"); ol.writeAnchor("_details");
//if (latexOn) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState(); ol.popGeneratorState();
ol.startGroupHeader(); ol.startGroupHeader();
parseText(ol,theTranslator->trDetailedDescription()); parseText(ol,theTranslator->trDetailedDescription());
...@@ -173,7 +225,76 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -173,7 +225,76 @@ void GroupDef::writeDocumentation(OutputList &ol)
} }
} }
defineMembers.countDocMembers();
if (defineMembers.totalCount()>0 )
{
ol.writeRuler();
ol.startGroupHeader();
parseText(ol,theTranslator->trDefineDocumentation());
ol.endGroupHeader();
defineMembers.writeDocumentation(ol,name());
}
protoMembers.countDocMembers();
if (protoMembers.totalCount()>0 )
{
ol.writeRuler();
ol.startGroupHeader();
parseText(ol,theTranslator->trFunctionPrototypeDocumentation());
ol.endGroupHeader();
protoMembers.writeDocumentation(ol,name());
}
typedefMembers.countDocMembers();
if (typedefMembers.totalCount()>0 )
{
ol.writeRuler();
ol.startGroupHeader();
parseText(ol,theTranslator->trTypedefDocumentation());
ol.endGroupHeader();
typedefMembers.writeDocumentation(ol,name());
}
enumMembers.countDocMembers();
if (enumMembers.totalCount()>0 )
{
ol.writeRuler();
ol.startGroupHeader();
parseText(ol,theTranslator->trEnumerationTypeDocumentation());
ol.endGroupHeader();
enumMembers.writeDocumentation(ol,name());
}
enumValMembers.countDocMembers();
if (enumValMembers.totalCount()>0 )
{
ol.writeRuler();
ol.startGroupHeader();
parseText(ol,theTranslator->trEnumerationValueDocumentation());
ol.endGroupHeader();
enumValMembers.writeDocumentation(ol,name());
}
funcMembers.countDocMembers();
if (funcMembers.totalCount()>0 )
{
ol.writeRuler();
ol.startGroupHeader();
parseText(ol,theTranslator->trFunctionDocumentation());
ol.endGroupHeader();
funcMembers.writeDocumentation(ol,name());
}
varMembers.countDocMembers();
if (varMembers.totalCount()>0 )
{
ol.writeRuler();
ol.startGroupHeader();
parseText(ol,theTranslator->trVariableDocumentation());
ol.endGroupHeader();
varMembers.writeDocumentation(ol,name());
}
endFile(ol); endFile(ol);
//ol.enable(OutputGenerator::Man);
ol.popGeneratorState(); ol.popGeneratorState();
} }
...@@ -19,7 +19,10 @@ ...@@ -19,7 +19,10 @@
#include "qtbc.h" #include "qtbc.h"
#include <qlist.h> #include <qlist.h>
#include <qdict.h>
#include "definition.h" #include "definition.h"
#include "memberlist.h"
#include "memberdef.h"
class FileList; class FileList;
class ClassList; class ClassList;
...@@ -41,6 +44,7 @@ class GroupDef : public Definition ...@@ -41,6 +44,7 @@ class GroupDef : public Definition
void addFile(const FileDef *def); void addFile(const FileDef *def);
void addClass(const ClassDef *def); void addClass(const ClassDef *def);
void addNamespace(const NamespaceDef *def); void addNamespace(const NamespaceDef *def);
void addMember(const MemberDef *def);
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
int countMembers() const; int countMembers() const;
bool isLinkableInProject() bool isLinkableInProject()
...@@ -51,13 +55,25 @@ class GroupDef : public Definition ...@@ -51,13 +55,25 @@ class GroupDef : public Definition
{ {
return isLinkableInProject() || isReference(); return isLinkableInProject() || isReference();
} }
void computeAnchors();
private: private:
QCString title; // title of the group QCString title; // title of the group
QCString fileName; // base name of the generated file QCString fileName; // base name of the generated file
FileList *fileList; // list of all files in the group FileList *fileList; // list of all files in the group
ClassList *classList; // list of all classes in the group ClassList *classList; // list of all classes in the group
NamespaceList *namespaceList; // list of all namespace in the group NamespaceList *namespaceList; // list of all namespace in the group
MemberList *allMemberList; // list of all members in the group
QDict<MemberDef> *allMemberDict;
// members sorted to type
MemberList defineMembers;
MemberList protoMembers;
MemberList typedefMembers;
MemberList enumMembers;
MemberList enumValMembers;
MemberList funcMembers;
MemberList varMembers;
}; };
class GroupList : public QList<GroupDef> class GroupList : public QList<GroupDef>
......
...@@ -300,9 +300,10 @@ void writeGraphicalClassHierarchy(OutputList &ol) ...@@ -300,9 +300,10 @@ void writeGraphicalClassHierarchy(OutputList &ol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
int countFiles() void countFiles(int &htmlFiles,int &files)
{ {
int count=0; htmlFiles=0;
files=0;
FileNameListIterator fnli(inputNameList); FileNameListIterator fnli(inputNameList);
FileName *fn; FileName *fn;
for (;(fn=fnli.current());++fnli) for (;(fn=fnli.current());++fnli)
...@@ -311,22 +312,28 @@ int countFiles() ...@@ -311,22 +312,28 @@ int countFiles()
FileDef *fd; FileDef *fd;
for (;(fd=fni.current());++fni) for (;(fd=fni.current());++fni)
{ {
if (fd->isLinkableInProject() || bool doc = fd->isLinkableInProject();
fd->generateSource() || bool src = fd->generateSource() || Config::sourceBrowseFlag;
(!fd->isReference() && Config::sourceBrowseFlag) if (doc || src)
) count++; {
htmlFiles++;
}
if (doc)
{
files++;
}
} }
} }
return count;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void writeFileIndex(OutputList &ol) void writeFileIndex(OutputList &ol)
{ {
if (documentedFiles==0) return; if (documentedHtmlFiles==0) return;
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
if (documentedFiles==0) ol.disableAllBut(OutputGenerator::Html);
startFile(ol,"files","File Index"); startFile(ol,"files","File Index");
startTitle(ol,0); startTitle(ol,0);
QCString title = theTranslator->trFileList(); QCString title = theTranslator->trFileList();
...@@ -366,32 +373,28 @@ void writeFileIndex(OutputList &ol) ...@@ -366,32 +373,28 @@ void writeFileIndex(OutputList &ol)
path=stripFromPath(fd->getPath().copy()); path=stripFromPath(fd->getPath().copy());
} }
// --------------- LaTeX only ----------------------------- // --------------- LaTeX/RTF only -------------------------
ol.pushGeneratorState(); if (doc)
ol.disable(OutputGenerator::Html);
ol.writeStartAnnoItem("file",
fd->getOutputFileBase(),
path,
fd->name()
);
if (!fd->briefDescription().isEmpty())
{ {
ol.docify(" ("); ol.pushGeneratorState();
OutputList briefOutput(&ol); ol.disable(OutputGenerator::Html);
parseDoc(briefOutput,0,0, ol.writeStartAnnoItem("file",
abbreviate(fd->briefDescription(),fd->name())); fd->getOutputFileBase(),
ol+=briefOutput; path,
ol.docify(")"); fd->name()
);
if (!fd->briefDescription().isEmpty())
{
ol.docify(" (");
OutputList briefOutput(&ol);
parseDoc(briefOutput,0,0,
abbreviate(fd->briefDescription(),fd->name()));
ol+=briefOutput;
ol.docify(")");
}
ol.writeEndAnnoItem(fd->getOutputFileBase());
ol.popGeneratorState();
} }
//else
//{
// ol.startEmphasis();
// parseText(ol,theTranslator->trNoDescriptionAvailable());
// ol.endEmphasis();
//}
ol.writeEndAnnoItem(fd->getOutputFileBase());
//ol.enable(OutputGenerator::Html);
ol.popGeneratorState();
// -------------------------------------------------------- // --------------------------------------------------------
// ----------------- HTML only ---------------------------- // ----------------- HTML only ----------------------------
......
...@@ -65,7 +65,7 @@ void writeGraphicalClassHierarchy(OutputList &ol); ...@@ -65,7 +65,7 @@ void writeGraphicalClassHierarchy(OutputList &ol);
int countClassHierarchy(); int countClassHierarchy();
int countClassMembers(); int countClassMembers();
int countFileMembers(); int countFileMembers();
int countFiles(); void countFiles(int &htmlFiles,int &files);
int countGroups(); int countGroups();
int countNamespaces(); int countNamespaces();
int countAnnotatedClasses(); int countAnnotatedClasses();
......
...@@ -168,6 +168,7 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -168,6 +168,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{ {
if (Config::latexHeaderFile.isEmpty()) if (Config::latexHeaderFile.isEmpty())
{ {
if (Config::latexBatchModeFlag) t << "\\batchmode" << endl;
if (Config::paperType=="a4wide") paperName="a4"; else paperName=Config::paperType; if (Config::paperType=="a4wide") paperName="a4"; else paperName=Config::paperType;
t << "\\documentclass[" << paperName << "paper"; t << "\\documentclass[" << paperName << "paper";
if (Config::pdfHyperFlag) t << ",ps2pdf"; if (Config::pdfHyperFlag) t << ",ps2pdf";
...@@ -207,13 +208,6 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -207,13 +208,6 @@ void LatexGenerator::startIndexSection(IndexSections is)
"\\vspace*{7cm}\n" "\\vspace*{7cm}\n"
"\\begin{center}\n" "\\begin{center}\n"
"{\\Large "; "{\\Large ";
//docify(projectName);
//t << " Reference Manual";
//if (!projectNumber.isEmpty())
//{
// t << "\\\\[1ex]\\large ";
// docify(projectNumber);
//}
} }
else else
{ {
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "example.h" #include "example.h"
#include "membergroup.h" #include "membergroup.h"
#include "scanner.h" #include "scanner.h"
#include "groupdef.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -219,6 +220,7 @@ MemberDef::MemberDef(const char *t,const char *na,const char *a,const char *e, ...@@ -219,6 +220,7 @@ MemberDef::MemberDef(const char *t,const char *na,const char *a,const char *e,
nspace=0; nspace=0;
memDef=0; memDef=0;
memDec=0; memDec=0;
group=0;
exampleList=0; exampleList=0;
exampleDict=0; exampleDict=0;
enumFields=0; enumFields=0;
...@@ -426,24 +428,29 @@ void MemberDef::setGroupId(int groupId) ...@@ -426,24 +428,29 @@ void MemberDef::setGroupId(int groupId)
} }
void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd, void MemberDef::writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd,
FileDef *fd,MemberGroup *mg) FileDef *fd,GroupDef *gd,MemberGroup *mg)
{ {
if (mg) Definition *d;
ol.writeObjectLink(0,mg->getOutputFileBase(), if (mg) d=mg; else if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd;
anchor(),name()); //if (mg)
else if (nd) // ol.writeObjectLink(0,mg->getOutputFileBase(),
ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(), // anchor(),name());
anchor(),name()); //else if (cd)
else if (fd) // ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(), // anchor(),name());
anchor(),name()); //else if (nd)
else // ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),
ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(), // anchor(),name());
anchor(),name()); //else if (fd)
// ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),
// anchor(),name());
//else
ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),anchor(),name());
} }
void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,FileDef *fd, void MemberDef::writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
int prevGroupId,bool inGroup) int prevGroupId,bool inGroup)
{ {
int i,l; int i,l;
...@@ -481,7 +488,8 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi ...@@ -481,7 +488,8 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
} }
Definition *d=0; Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else d=fd; ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
QCString cname = d->name(); QCString cname = d->name();
QCString cfname = d->getOutputFileBase(); QCString cfname = d->getOutputFileBase();
...@@ -664,11 +672,11 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi ...@@ -664,11 +672,11 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
if (annMemb) if (annMemb)
{ {
//printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor()); //printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
annMemb->writeLink(ol,cd,nd,fd,inGroup ? memberGroup : 0); annMemb->writeLink(ol,cd,nd,fd,gd,inGroup ? memberGroup : 0);
annMemb->annUsed=annUsed=TRUE; annMemb->annUsed=annUsed=TRUE;
} }
else else
writeLink(ol,0,0,0,memberGroup); writeLink(ol,0,0,0,0,memberGroup);
//ol.writeBoldString(name()); //ol.writeBoldString(name());
} }
else if (isLinkable()) else if (isLinkable())
...@@ -680,13 +688,14 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi ...@@ -680,13 +688,14 @@ void MemberDef::writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,Fi
annMemb->memberClass(), annMemb->memberClass(),
annMemb->getNamespace(), annMemb->getNamespace(),
annMemb->getFileDef(), annMemb->getFileDef(),
annMemb->groupDef(),
inGroup ? memberGroup : 0 inGroup ? memberGroup : 0
); );
annMemb->annUsed=annUsed=TRUE; annMemb->annUsed=annUsed=TRUE;
} }
else else
//printf("writeLink %s->%d\n",name.data(),hasDocumentation()); //printf("writeLink %s->%d\n",name.data(),hasDocumentation());
writeLink(ol,cd,nd,fd,inGroup ? memberGroup : 0); writeLink(ol,cd,nd,fd,gd,inGroup ? memberGroup : 0);
} }
else // there is a brief member description and brief member else // there is a brief member description and brief member
// descriptions are enabled or there is no detailed description. // descriptions are enabled or there is no detailed description.
...@@ -795,6 +804,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -795,6 +804,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (isEnumValue() && (smd = getEnumScope()) if (isEnumValue() && (smd = getEnumScope())
&& r.match(smd->name(),0,&dummy)==-1) return; && r.match(smd->name(),0,&dummy)==-1) return;
ol.pushGeneratorState();
bool hasHtmlHelp = Config::generateHtml && Config::htmlHelpFlag; bool hasHtmlHelp = Config::generateHtml && Config::htmlHelpFlag;
HtmlHelp *htmlHelp = 0; HtmlHelp *htmlHelp = 0;
if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance(); if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance();
...@@ -1236,6 +1247,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1236,6 +1247,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.endIndent(); ol.endIndent();
// enable LaTeX again // enable LaTeX again
//if (Config::extractAllFlag && !hasDocs) ol.enable(OutputGenerator::Latex); //if (Config::extractAllFlag && !hasDocs) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState();
} }
} }
......
...@@ -24,14 +24,16 @@ ...@@ -24,14 +24,16 @@
#include "entry.h" #include "entry.h"
#include "definition.h" #include "definition.h"
class FileDef;
class ClassDef; class ClassDef;
class NamespaceDef; class NamespaceDef;
class GroupDef;
class FileDef;
class MemberList; class MemberList;
class MemberGroup; class MemberGroup;
class ExampleList; class ExampleList;
class ExampleDict; class ExampleDict;
class OutputList; class OutputList;
class GroupDef;
class MemberDef : public Definition class MemberDef : public Definition
{ {
...@@ -62,10 +64,12 @@ class MemberDef : public Definition ...@@ -62,10 +64,12 @@ class MemberDef : public Definition
const ArgumentList *al); const ArgumentList *al);
~MemberDef(); ~MemberDef();
void writeLink(OutputList &ol,ClassDef *cd,NamespaceDef *nd, void writeLink(OutputList &ol,
FileDef *fd,MemberGroup *mg); ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
void writeDeclaration(OutputList &ol,ClassDef *cd,NamespaceDef *nd,FileDef *fd, MemberGroup *mg);
int prevGroupId,bool inGroup); void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
int prevGroupId,bool inGroup);
void writeDocumentation(MemberList *ml,OutputList &ol, void writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName/*,MemberType m*/); const char *scopeName/*,MemberType m*/);
void warnIfUndocumented(); void warnIfUndocumented();
...@@ -83,6 +87,12 @@ class MemberDef : public Definition ...@@ -83,6 +87,12 @@ class MemberDef : public Definition
Protection protection() const { return prot; } Protection protection() const { return prot; }
Specifier virtualness() const { return virt; } Specifier virtualness() const { return virt; }
MemberType memberType() const { return mtype; } MemberType memberType() const { return mtype; }
GroupDef *groupDef() const { return group; }
FileDef *getFileDef() { return fileDef; }
FileDef *getFileDec() { return fileDec; }
bool isRelated() const { return related; }
bool isStatic() const { return stat; }
bool isInline() const { return inLine; }
void setMemberType(MemberType t) { mtype=t; } void setMemberType(MemberType t) { mtype=t; }
void setDefinition(const char *d) { def=d; } void setDefinition(const char *d) { def=d; }
void setDefFile(const char *f) { defFile=f; } void setDefFile(const char *f) { defFile=f; }
...@@ -96,13 +106,9 @@ class MemberDef : public Definition ...@@ -96,13 +106,9 @@ class MemberDef : public Definition
init=init.stripWhiteSpace(); init=init.stripWhiteSpace();
initLines=init.contains('\n'); initLines=init.contains('\n');
} }
FileDef *getFileDef() { return fileDef; }
FileDef *getFileDec() { return fileDec; }
void setMemberClass(ClassDef *cd) { classDef=cd; } void setMemberClass(ClassDef *cd) { classDef=cd; }
void makeRelated() { related=TRUE; } void makeRelated() { related=TRUE; }
bool isRelated() const { return related; } void setGroupDef(GroupDef *gd) { group=gd; }
bool isStatic() const { return stat; }
bool isInline() const { return inLine; }
bool hasDocumentation() // overrides hasDocumentation in definition.h bool hasDocumentation() // overrides hasDocumentation in definition.h
{ return Definition::hasDocumentation(); } { return Definition::hasDocumentation(); }
...@@ -236,6 +242,7 @@ class MemberDef : public Definition ...@@ -236,6 +242,7 @@ class MemberDef : public Definition
int grpId; // group id int grpId; // group id
QCString grpHeader; // group header QCString grpHeader; // group header
MemberGroup *memberGroup; // group's member definition MemberGroup *memberGroup; // group's member definition
GroupDef *group; // group in which this member is in
// disable copying of member defs // disable copying of member defs
MemberDef(const MemberDef &); MemberDef(const MemberDef &);
......
...@@ -134,7 +134,7 @@ void MemberGroup::writeDocumentation(OutputList &ol) ...@@ -134,7 +134,7 @@ void MemberGroup::writeDocumentation(OutputList &ol)
ol.docify(">"); ol.docify(">");
} }
ol.startMemberSections(); ol.startMemberSections();
memberList->writeDeclarations(ol,cd,nd,fd,"Synopsis",0,TRUE); memberList->writeDeclarations(ol,cd,nd,fd,0,"Synopsis",0,TRUE);
ol.endMemberSections(); ol.endMemberSections();
if ((!briefDescription().isEmpty() && Config::repeatBriefFlag) || if ((!briefDescription().isEmpty() && Config::repeatBriefFlag) ||
......
...@@ -14,15 +14,17 @@ ...@@ -14,15 +14,17 @@
* *
*/ */
#include <qregexp.h>
#include "memberlist.h" #include "memberlist.h"
#include "classdef.h" #include "classdef.h"
#include "message.h" #include "message.h"
#include <qregexp.h>
#include "util.h" #include "util.h"
#include "language.h" #include "language.h"
#include "doxygen.h" #include "doxygen.h"
#include "outputlist.h" #include "outputlist.h"
#include "scanner.h" #include "scanner.h"
#include "groupdef.h"
MemberList::MemberList() : QList<MemberDef>() MemberList::MemberList() : QList<MemberDef>()
{ {
...@@ -36,7 +38,7 @@ int MemberList::compareItems(GCI item1, GCI item2) ...@@ -36,7 +38,7 @@ int MemberList::compareItems(GCI item1, GCI item2)
{ {
MemberDef *c1=(MemberDef *)item1; MemberDef *c1=(MemberDef *)item1;
MemberDef *c2=(MemberDef *)item2; MemberDef *c2=(MemberDef *)item2;
return strcasecmp(c1->name(),c2->name()); return stricmp(c1->name(),c2->name());
} }
void MemberList::countDecMembers() void MemberList::countDecMembers()
...@@ -187,17 +189,21 @@ MemberListIterator::MemberListIterator(const QList<MemberDef> &l) : ...@@ -187,17 +189,21 @@ MemberListIterator::MemberListIterator(const QList<MemberDef> &l) :
{ {
} }
void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, void MemberList::writePlainDeclarations(OutputList &ol,
NamespaceDef *nd,FileDef *fd,bool inGroup) ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup)
{ {
countDecMembers(); countDecMembers();
if (totalCount()==0) return; // no members in this list if (totalCount()==0) return; // no members in this list
ol.pushGeneratorState();
int prevGroupId = -1; int prevGroupId = -1;
if (!fd && !nd) ol.startMemberList(); bool sectionPerType = fd || nd || gd;
if (!sectionPerType) ol.startMemberList();
MemberDef *md; MemberDef *md;
if (fd && defineCount()>0) if (sectionPerType && defineCount()>0)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trDefines()); parseText(ol,theTranslator->trDefines());
...@@ -210,14 +216,14 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -210,14 +216,14 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
(md->argsString() || md->hasDocumentation() || Config::extractAllFlag) (md->argsString() || md->hasDocumentation() || Config::extractAllFlag)
) )
{ {
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup); md->writeDeclaration(ol,cd,nd,fd,gd,prevGroupId,inGroup);
prevGroupId = md->groupId(); prevGroupId = md->groupId();
} }
} }
ol.endMemberList(); ol.endMemberList();
} }
if ((fd || nd) && protoCount()>0) if (sectionPerType && protoCount()>0)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trFuncProtos()); parseText(ol,theTranslator->trFuncProtos());
...@@ -228,7 +234,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -228,7 +234,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
{ {
if (md->isPrototype()) if (md->isPrototype())
{ {
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup); md->writeDeclaration(ol,cd,nd,fd,gd,prevGroupId,inGroup);
prevGroupId = md->groupId(); prevGroupId = md->groupId();
} }
} }
...@@ -237,7 +243,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -237,7 +243,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
if (typedefCount()>0) if (typedefCount()>0)
{ {
if (fd || nd) if (sectionPerType)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trTypedefs()); parseText(ol,theTranslator->trTypedefs());
...@@ -250,17 +256,17 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -250,17 +256,17 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
{ {
if (md->isTypedef()) if (md->isTypedef())
{ {
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup); md->writeDeclaration(ol,cd,nd,fd,gd,prevGroupId,inGroup);
prevGroupId = md->groupId(); prevGroupId = md->groupId();
} }
} }
if (fd || nd) ol.endMemberList(); if (sectionPerType) ol.endMemberList();
} }
// write enums // write enums
if (enumCount()>0) if (enumCount()>0)
{ {
if (fd || nd) if (sectionPerType)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trEnumerations()); parseText(ol,theTranslator->trEnumerations());
...@@ -302,7 +308,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -302,7 +308,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
if (!Config::genTagFile.isEmpty()) if (!Config::genTagFile.isEmpty())
tagFile << md->name() << " " << md->anchor() tagFile << md->name() << " " << md->anchor()
<< " \"\"" << endl; << " \"\"" << endl;
md->writeLink(typeDecl,cd,nd,fd,0); md->writeLink(typeDecl,cd,nd,fd,gd,0);
} }
else else
{ {
...@@ -323,7 +329,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -323,7 +329,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
if (!Config::genTagFile.isEmpty()) if (!Config::genTagFile.isEmpty())
tagFile << fmd->name() << " " << fmd->anchor() tagFile << fmd->name() << " " << fmd->anchor()
<< " \"" << fmd->argsString() << "\""; << " \"" << fmd->argsString() << "\"";
fmd->writeLink(typeDecl,cd,nd,fd,0); fmd->writeLink(typeDecl,cd,nd,fd,gd,0);
} }
else // no docs for this enum value else // no docs for this enum value
{ {
...@@ -395,13 +401,13 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -395,13 +401,13 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
} }
} // md->isEnumerate() } // md->isEnumerate()
} // enum loop } // enum loop
if (fd || nd) ol.endMemberList(); if (sectionPerType) ol.endMemberList();
} // write enums } // write enums
// write functions // write functions
if (funcCount()>0) if (funcCount()>0)
{ {
if (fd || nd) if (sectionPerType)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trFunctions()); parseText(ol,theTranslator->trFunctions());
...@@ -416,11 +422,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -416,11 +422,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
( !md->isRelated() || md->memberClass() ) ( !md->isRelated() || md->memberClass() )
) )
{ {
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup); md->writeDeclaration(ol,cd,nd,fd,gd,prevGroupId,inGroup);
prevGroupId = md->groupId(); prevGroupId = md->groupId();
} }
} }
if (fd || nd) ol.endMemberList(); if (sectionPerType) ol.endMemberList();
} }
if (friendCount()>0) if (friendCount()>0)
...@@ -434,7 +440,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -434,7 +440,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
//printf("Friend: type=%s name=%s\n",type.data(),md->name().data()); //printf("Friend: type=%s name=%s\n",type.data(),md->name().data());
if (md->hasDocumentation() && type!="friend class") if (md->hasDocumentation() && type!="friend class")
{ {
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup); md->writeDeclaration(ol,cd,nd,fd,gd,prevGroupId,inGroup);
prevGroupId = md->groupId(); prevGroupId = md->groupId();
} }
else // friend is undocumented as a member but it is a class, else // friend is undocumented as a member but it is a class,
...@@ -479,7 +485,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -479,7 +485,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
// write variables // write variables
if (varCount()>0) if (varCount()>0)
{ {
if (fd || nd) if (sectionPerType)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trVariables()); parseText(ol,theTranslator->trVariables());
...@@ -491,11 +497,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -491,11 +497,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
{ {
if (md->isVariable()) if (md->isVariable())
{ {
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup); md->writeDeclaration(ol,cd,nd,fd,gd,prevGroupId,inGroup);
prevGroupId = md->groupId(); prevGroupId = md->groupId();
} }
} }
if (fd || nd) ol.endMemberList(); if (sectionPerType) ol.endMemberList();
} }
// handle members that are inside annonymous compounds and for which // handle members that are inside annonymous compounds and for which
...@@ -508,24 +514,26 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd, ...@@ -508,24 +514,26 @@ void MemberList::writePlainDeclarations(OutputList &ol,ClassDef *cd,
if (md->fromAnnonymousScope() && !md->annonymousDeclShown()) if (md->fromAnnonymousScope() && !md->annonymousDeclShown())
{ {
md->setFromAnnonymousScope(FALSE); md->setFromAnnonymousScope(FALSE);
md->writeDeclaration(ol,cd,nd,fd,prevGroupId,inGroup); md->writeDeclaration(ol,cd,nd,fd,gd,prevGroupId,inGroup);
md->setFromAnnonymousScope(TRUE); md->setFromAnnonymousScope(TRUE);
prevGroupId = md->groupId(); prevGroupId = md->groupId();
} }
} }
} }
if (!fd && !nd) { ol.endMemberList(); /*ol.writeChar('\n');*/ } if (!sectionPerType) { ol.endMemberList(); /*ol.writeChar('\n');*/ }
if (prevGroupId!=-1 && !inGroup) if (prevGroupId!=-1 && !inGroup)
{ {
ol.memberGroupSpacing(TRUE); ol.memberGroupSpacing(TRUE);
ol.memberGroupSeparator(); ol.memberGroupSeparator();
} }
ol.popGeneratorState();
} }
void MemberList::writeDeclarations(OutputList &ol,ClassDef *cd,NamespaceDef *nd, void MemberList::writeDeclarations(OutputList &ol,
FileDef *fd,const char *title,const char *subtitle,bool inGroup) ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle,bool inGroup)
{ {
countDecMembers(); countDecMembers();
if (totalCount()==0) return; if (totalCount()==0) return;
...@@ -542,7 +550,7 @@ void MemberList::writeDeclarations(OutputList &ol,ClassDef *cd,NamespaceDef *nd, ...@@ -542,7 +550,7 @@ void MemberList::writeDeclarations(OutputList &ol,ClassDef *cd,NamespaceDef *nd,
ol.endMemberSubtitle(); ol.endMemberSubtitle();
} }
writePlainDeclarations(ol,cd,nd,fd,inGroup); writePlainDeclarations(ol,cd,nd,fd,gd,inGroup);
} }
void MemberList::writeDocumentation(OutputList &ol, void MemberList::writeDocumentation(OutputList &ol,
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <qlist.h> #include <qlist.h>
#include "memberdef.h" #include "memberdef.h"
class GroupDef;
class MemberList : public QList<MemberDef> class MemberList : public QList<MemberDef>
{ {
...@@ -44,9 +45,11 @@ class MemberList : public QList<MemberDef> ...@@ -44,9 +45,11 @@ class MemberList : public QList<MemberDef>
//protoCnt+defCnt+friendCnt; //protoCnt+defCnt+friendCnt;
m_count; m_count;
} }
void writePlainDeclarations(OutputList &ol,ClassDef *cd, void writePlainDeclarations(OutputList &ol,
NamespaceDef *nd,FileDef *fd,bool inGroup=FALSE); ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
void writeDeclarations(OutputList &ol,ClassDef *cd,NamespaceDef *nd,FileDef *fd, bool inGroup=FALSE);
void writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle,bool inGroup=FALSE); const char *title,const char *subtitle,bool inGroup=FALSE);
void writeDocumentation(OutputList &ol,const char *scopeName void writeDocumentation(OutputList &ol,const char *scopeName
/*,MemberDef::MemberType m*/); /*,MemberDef::MemberType m*/);
......
...@@ -163,7 +163,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -163,7 +163,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
if (found) ol.endMemberList(); if (found) ol.endMemberList();
} }
/*memList->*/allMemberList.writeDeclarations(ol,0,this,0,0,0); allMemberList.writeDeclarations(ol,0,this,0,0,0,0);
ol.endMemberSections(); ol.endMemberSections();
if (!briefDescription().isEmpty() || !documentation().isEmpty()) if (!briefDescription().isEmpty() || !documentation().isEmpty())
......
...@@ -91,7 +91,7 @@ class NamespaceList : public QList<NamespaceDef> ...@@ -91,7 +91,7 @@ class NamespaceList : public QList<NamespaceDef>
~NamespaceList() {} ~NamespaceList() {}
int compareItems(GCI item1,GCI item2) int compareItems(GCI item1,GCI item2)
{ {
return strcasecmp(((NamespaceDef *)item1)->name(), return stricmp(((NamespaceDef *)item1)->name(),
((NamespaceDef *)item2)->name() ((NamespaceDef *)item2)->name()
); );
} }
......
...@@ -130,6 +130,7 @@ static bool inDeprecatedBlock; ...@@ -130,6 +130,7 @@ static bool inDeprecatedBlock;
static bool inVersionBlock; static bool inVersionBlock;
static bool inDateBlock; static bool inDateBlock;
static bool inBugBlock; static bool inBugBlock;
static bool inNoteBlock;
static bool inPreBlock; static bool inPreBlock;
static bool inPostBlock; static bool inPostBlock;
static bool inInvarBlock; static bool inInvarBlock;
...@@ -214,6 +215,7 @@ static void initParser() ...@@ -214,6 +215,7 @@ static void initParser()
inVersionBlock = FALSE; inVersionBlock = FALSE;
inDateBlock = FALSE; inDateBlock = FALSE;
inBugBlock = FALSE; inBugBlock = FALSE;
inNoteBlock = FALSE;
inPreBlock = FALSE; inPreBlock = FALSE;
inPostBlock = FALSE; inPostBlock = FALSE;
inInvarBlock = FALSE; inInvarBlock = FALSE;
...@@ -643,7 +645,7 @@ static void tryEndItemList() ...@@ -643,7 +645,7 @@ static void tryEndItemList()
static bool inBlock() static bool inBlock()
{ {
return inParamBlock || inRetValBlock || inSeeBlock || inReturnBlock || inAuthorBlock || return inParamBlock || inRetValBlock || inSeeBlock || inReturnBlock || inAuthorBlock ||
inVersionBlock || inDateBlock || inWarningBlock || inBugBlock || inVersionBlock || inDateBlock || inWarningBlock || inBugBlock || inNoteBlock ||
inParBlock || inExceptionBlock || inDeprecatedBlock || inPreBlock || inParBlock || inExceptionBlock || inDeprecatedBlock || inPreBlock ||
inPostBlock || inInvarBlock; inPostBlock || inInvarBlock;
} }
...@@ -657,7 +659,7 @@ static void endBlock() ...@@ -657,7 +659,7 @@ static void endBlock()
} }
outDoc->endDescList(); outDoc->endDescList();
inParamBlock=inRetValBlock=inSeeBlock=inReturnBlock=inAuthorBlock= inParamBlock=inRetValBlock=inSeeBlock=inReturnBlock=inAuthorBlock=
inVersionBlock=inDateBlock=inBugBlock=inWarningBlock= inVersionBlock=inDateBlock=inBugBlock=inNoteBlock=inWarningBlock=
inParBlock=inExceptionBlock=inDeprecatedBlock=inPreBlock=inPostBlock= inParBlock=inExceptionBlock=inDeprecatedBlock=inPreBlock=inPostBlock=
inInvarBlock=FALSE; inInvarBlock=FALSE;
} }
...@@ -899,6 +901,7 @@ TR [tT][rR] ...@@ -899,6 +901,7 @@ TR [tT][rR]
TT [tT][tT] TT [tT][tT]
UL [uU][lL] UL [uU][lL]
VAR [vV][aA][rR] VAR [vV][aA][rR]
DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
%option noyywrap %option noyywrap
...@@ -1039,6 +1042,7 @@ VAR [vV][aA][rR] ...@@ -1039,6 +1042,7 @@ VAR [vV][aA][rR]
%x CopyArgSharp %x CopyArgSharp
%x CopyArgComment %x CopyArgComment
%x CopyArgCommentLine %x CopyArgCommentLine
%x SkipUnionSwitch
%x ReadFuncArgType %x ReadFuncArgType
%x ReadTempArgs %x ReadTempArgs
%x Specialization %x Specialization
...@@ -1050,6 +1054,7 @@ VAR [vV][aA][rR] ...@@ -1050,6 +1054,7 @@ VAR [vV][aA][rR]
%x CopyString %x CopyString
%x CopyRound %x CopyRound
%x CopyCurly %x CopyCurly
%x IDLUnionCase
%% %%
...@@ -1297,7 +1302,25 @@ VAR [vV][aA][rR] ...@@ -1297,7 +1302,25 @@ VAR [vV][aA][rR]
outDoc->writeDescItem(); outDoc->writeDescItem();
} }
} }
<DocScan>{CMD}"pre"[s]?/{BN} { <DocScan>{CMD}"note"[s]?/{BN} {
endArgumentList();
if (!inNoteBlock)
{
if (inBlock()) endBlock();
inNoteBlock=TRUE;
outDoc->startDescList();
outDoc->startBold();
scanString(theTranslator->trNote()+": ");
outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
else
{
outDoc->writeDescItem();
}
}
<DocScan>{CMD}"pre"/{BN} {
endArgumentList(); endArgumentList();
if (!inPreBlock) if (!inPreBlock)
{ {
...@@ -1315,7 +1338,7 @@ VAR [vV][aA][rR] ...@@ -1315,7 +1338,7 @@ VAR [vV][aA][rR]
outDoc->writeDescItem(); outDoc->writeDescItem();
} }
} }
<DocScan>{CMD}"post"[s]?/{BN} { <DocScan>{CMD}"post"/{BN} {
endArgumentList(); endArgumentList();
if (!inPostBlock) if (!inPostBlock)
{ {
...@@ -1333,7 +1356,7 @@ VAR [vV][aA][rR] ...@@ -1333,7 +1356,7 @@ VAR [vV][aA][rR]
outDoc->writeDescItem(); outDoc->writeDescItem();
} }
} }
<DocScan>{CMD}"invariant"[s]?/{BN} { <DocScan>{CMD}"invariant"/{BN} {
endArgumentList(); endArgumentList();
if (!inInvarBlock) if (!inInvarBlock)
{ {
...@@ -1516,7 +1539,7 @@ VAR [vV][aA][rR] ...@@ -1516,7 +1539,7 @@ VAR [vV][aA][rR]
BEGIN(DocException); BEGIN(DocException);
} }
<DocScan>"\\capt".* <DocScan>"\\capt".*
<DocParam>([a-z_A-Z0-9:\.\-]+)|("\"".*"\"") { <DocParam>({DOCPARAM}{BN}*","{BN}*)*{DOCPARAM} {
outDoc->startDescTableTitle(); outDoc->startDescTableTitle();
outDoc->startEmphasis(); outDoc->startEmphasis();
outDoc->docify(yytext); outDoc->docify(yytext);
...@@ -1746,7 +1769,7 @@ VAR [vV][aA][rR] ...@@ -1746,7 +1769,7 @@ VAR [vV][aA][rR]
<DocScan>{CMD}"b"{BN}+ { BEGIN( DocBold ); } <DocScan>{CMD}"b"{BN}+ { BEGIN( DocBold ); }
<DocScan>{CMD}"c"{BN}+ { BEGIN( DocCode ); } <DocScan>{CMD}"c"{BN}+ { BEGIN( DocCode ); }
<DocScan>{CMD}"l"{BN}+ <DocScan>{CMD}"l"{BN}+
<DocScan>{CMD}"n" { outDoc->lineBreak(); } <DocScan>"\\n"/[^a-z_A-Z0-9] { outDoc->lineBreak(); }
<DocScan>{CMD}"include"{BN}+ { BEGIN( DocInclude ); } <DocScan>{CMD}"include"{BN}+ { BEGIN( DocInclude ); }
<DocScan>{CMD}"dontinclude"{BN}+ { BEGIN( DocDontInclude ); } <DocScan>{CMD}"dontinclude"{BN}+ { BEGIN( DocDontInclude ); }
<DocScan>{CMD}"skip"{BN}+ { BEGIN( DocSkipKey ); } <DocScan>{CMD}"skip"{BN}+ { BEGIN( DocSkipKey ); }
...@@ -2422,6 +2445,10 @@ VAR [vV][aA][rR] ...@@ -2422,6 +2445,10 @@ VAR [vV][aA][rR]
{ {
BEGIN(CppQuote); BEGIN(CppQuote);
} }
else if (insideIDL && strcmp(yytext,"case")==0)
{
BEGIN(IDLUnionCase);
}
else else
{ {
lineCount(); lineCount();
...@@ -2445,6 +2472,10 @@ VAR [vV][aA][rR] ...@@ -2445,6 +2472,10 @@ VAR [vV][aA][rR]
insideCppQuote=TRUE; insideCppQuote=TRUE;
BEGIN(FindMembers); BEGIN(FindMembers);
} }
<IDLUnionCase>"::"
<IDLUnionCase>":" { BEGIN(FindMembers); }
<IDLUnionCase>\n { yyLineNr++; }
<IDLUnionCase>.
<EndCppQuote>")" { <EndCppQuote>")" {
insideCppQuote=FALSE; insideCppQuote=FALSE;
BEGIN(FindMembers); BEGIN(FindMembers);
...@@ -3581,19 +3612,28 @@ VAR [vV][aA][rR] ...@@ -3581,19 +3612,28 @@ VAR [vV][aA][rR]
BEGIN( ClassVar ); BEGIN( ClassVar );
} }
<ClassVar>{ID} { <ClassVar>{ID} {
if (isTypedef) if (insideIDL && strcmp(yytext,"switch")==0)
{ {
// typedefDict.insert(yytext,new QCString(current->name)); // Corba IDL style union
// current->type.prepend("typedef "); roundCount=0;
// current->extends BEGIN(SkipUnionSwitch);
current->extends->append( }
new BaseInfo(yytext,Public,Normal) else
); {
if (isTypedef)
{
// typedefDict.insert(yytext,new QCString(current->name));
// current->type.prepend("typedef ");
// current->extends
current->extends->append(
new BaseInfo(yytext,Public,Normal)
);
}
current->type += ' ' ;
current->type += current->name ;
current->name = yytext ;
//BEGIN( FindMembers );
} }
current->type += ' ' ;
current->type += current->name ;
current->name = yytext ;
//BEGIN( FindMembers );
} }
<ClassVar>[(\[] { <ClassVar>[(\[] {
// probably a function anyway // probably a function anyway
...@@ -3702,6 +3742,17 @@ VAR [vV][aA][rR] ...@@ -3702,6 +3742,17 @@ VAR [vV][aA][rR]
curlyCount=0; curlyCount=0;
BEGIN( Curly ) ; BEGIN( Curly ) ;
} }
<SkipUnionSwitch>"(" {
roundCount++;
}
<SkipUnionSwitch>")" {
if (--roundCount==0)
{
BEGIN(ClassVar);
}
}
<SkipUnionSwitch>\n { yyLineNr++; }
<SkipUnionSwitch>.
<Comment>{BN}+ { current->program += yytext ; <Comment>{BN}+ { current->program += yytext ;
lineCount() ; lineCount() ;
} }
...@@ -3797,7 +3848,7 @@ VAR [vV][aA][rR] ...@@ -3797,7 +3848,7 @@ VAR [vV][aA][rR]
} }
<JavaDoc>"@" { <JavaDoc>"@" {
unput(*yytext); unput(*yytext);
BEGIN(Doc); BEGIN(ClassDoc);
} }
<JavaDoc>^{B}*"*"+/[^/] { <JavaDoc>^{B}*"*"+/[^/] {
//printf("---> removing %s\n",yytext); //printf("---> removing %s\n",yytext);
...@@ -3820,7 +3871,7 @@ VAR [vV][aA][rR] ...@@ -3820,7 +3871,7 @@ VAR [vV][aA][rR]
current->brief+="."; current->brief+=".";
BEGIN( tmpDocType ); BEGIN( tmpDocType );
} }
<JavaDoc>{CMD}("image"|"author"|"internal"|"version"|"date"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see") { <JavaDoc>{CMD}("image"|"author"|"internal"|"version"|"date"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note") {
current->doc+=yytext; current->doc+=yytext;
BEGIN( tmpDocType ); BEGIN( tmpDocType );
} }
......
...@@ -553,25 +553,25 @@ class Translator ...@@ -553,25 +553,25 @@ class Translator
* these are for the member sections of a class, struct or union * these are for the member sections of a class, struct or union
*/ */
virtual QCString trPublicMembers() virtual QCString trPublicMembers()
{ return "Public Members"; } { return "Public Methods"; }
virtual QCString trPublicSlots() virtual QCString trPublicSlots()
{ return "Public Slots"; } { return "Public Slots"; }
virtual QCString trSignals() virtual QCString trSignals()
{ return "Signals"; } { return "Signals"; }
virtual QCString trStaticPublicMembers() virtual QCString trStaticPublicMembers()
{ return "Static Public Members"; } { return "Static Public Methods"; }
virtual QCString trProtectedMembers() virtual QCString trProtectedMembers()
{ return "Protected Members"; } { return "Protected Methods"; }
virtual QCString trProtectedSlots() virtual QCString trProtectedSlots()
{ return "Protected Slots"; } { return "Protected Slots"; }
virtual QCString trStaticProtectedMembers() virtual QCString trStaticProtectedMembers()
{ return "Static Protected Members"; } { return "Static Protected Methods"; }
virtual QCString trPrivateMembers() virtual QCString trPrivateMembers()
{ return "Private Members"; } { return "Private Methods"; }
virtual QCString trPrivateSlots() virtual QCString trPrivateSlots()
{ return "Private Slots"; } { return "Private Slots"; }
virtual QCString trStaticPrivateMembers() virtual QCString trStaticPrivateMembers()
{ return "Static Private Members"; } { return "Static Private Methods"; }
/*! \endmgroup */ /*! \endmgroup */
/*! this function is used to produce a comma-separated list of items. /*! this function is used to produce a comma-separated list of items.
...@@ -815,6 +815,47 @@ class Translator ...@@ -815,6 +815,47 @@ class Translator
{ {
return "Page Index"; return "Page Index";
} }
virtual QCString trNote()
{
return "Note";
}
virtual QCString trPublicTypes()
{
return "Public Types";
}
virtual QCString trPublicAttribs()
{
return "Public Attributes";
}
virtual QCString trStaticPublicAttribs()
{
return "Static Public Attributes";
}
virtual QCString trProtectedTypes()
{
return "Protected Types";
}
virtual QCString trProtectedAttribs()
{
return "Protected Attributes";
}
virtual QCString trStaticProtectedAttribs()
{
return "Static Protected Attributes";
}
virtual QCString trPrivateTypes()
{
return "Private Types";
}
virtual QCString trPrivateAttribs()
{
return "Private Attributes";
}
virtual QCString trStaticPrivateAttribs()
{
return "Static Private Attributes";
}
}; };
#endif #endif
...@@ -22,89 +22,164 @@ ...@@ -22,89 +22,164 @@
class TranslatorJapanese : public Translator class TranslatorJapanese : public Translator
{ {
public: public:
QCString latexBabelPackage() //--------------------------------------------------------------------
{ return "a4j"; } // NOTICE:
// the following functions are now obsolete: these are no longer used and
// will disappear in future versions. You do not have to translate them!
QCString trInherits() QCString trInherits()
{ return "継承"; } { return "継承"; }
QCString trAnd() QCString trAnd()
{ return "と"; } { return "と"; }
QCString trInheritedBy() QCString trInheritedBy()
{ return "次に継承されています。"; } { return "次に継承されています。"; }
QCString trReference()
{ return "リファレンス"; }
QCString trReimplementedFrom()
{ return "次を再定義"; }
QCString trReimplementedIn()
{ return "次で再定義"; }
QCString trIncludeFile()
{ return "インクルードファイル"; }
QCString trGeneratedFrom(const char *s,bool)
{
QCString result=(QCString)"この"+s+
"に対するドキュメントは以下のファイルから生成されました。";
return result;
}
// end of obsolete functions
//--------------------------------------------------------------------
/*! returns the name of the package that is included by LaTeX */
QCString latexBabelPackage()
{ return "a4j"; }
/*! used in the compound documentation before a list of related functions. */
QCString trRelatedFunctions() QCString trRelatedFunctions()
{ return "関連する関数"; } { return "関連する関数"; }
/*! subscript for the related functions. */
QCString trRelatedSubscript() QCString trRelatedSubscript()
{ return "(これらはメンバ関数でないことに注意)"; } { return "(これらはメンバ関数でないことに注意)"; }
/*! header that is put before the detailed description of files, classes and namespaces. */
QCString trDetailedDescription() QCString trDetailedDescription()
{ return "解説"; } { return "解説"; }
/*! header that is put before the list of typedefs. */
QCString trMemberTypedefDocumentation() QCString trMemberTypedefDocumentation()
{ return "メンバ型定義の解説"; } { return "メンバ型定義の解説"; }
/*! header that is put before the list of enumerations. */
QCString trMemberEnumerationDocumentation() QCString trMemberEnumerationDocumentation()
{ return "メンバ列挙型の解説"; } { return "メンバ列挙型の解説"; }
QCString trEnumerationValueDocumentation()
{ return "列挙型値の解説"; } /*! header that is put before the list of member functions. */
QCString trMemberFunctionDocumentation() QCString trMemberFunctionDocumentation()
{ return "メンバ関数の解説"; } { return "メンバ関数の解説"; }
/*! header that is put before the list of member attributes. */
QCString trMemberDataDocumentation() QCString trMemberDataDocumentation()
{ return "メンバデータの解説"; } { return "メンバデータの解説"; }
QCString trGeneratedFrom(const char *s,bool)
{ /*! this is the text of a link put after brief descriptions. */
QCString result=(QCString)"この"+s+
"に対するドキュメントは以下のファイルから生成されました。";
return result;
}
QCString trMore() QCString trMore()
{ return "より詳しく..."; } { return "より詳しく..."; }
QCString trReference()
{ return "リファレンス"; } /*! put in the class documentation */
QCString trListOfAllMembers() QCString trListOfAllMembers()
{ return "すべてのメンバリスト"; } { return "すべてのメンバリスト"; }
/*! used as the title of the "list of all members" page of a class */
QCString trMemberList() QCString trMemberList()
{ return "メンバリスト"; } { return "メンバリスト"; }
/*! this is the first part of a sentence that is followed by a class name */
QCString trThisIsTheListOfAllMembers() QCString trThisIsTheListOfAllMembers()
{ return "これは次の全メンバリストです。"; } { return "これは全メンバリストです。"; }
/*! this is the remainder of the sentence after the class name */
QCString trIncludingInheritedMembers() QCString trIncludingInheritedMembers()
{ return "継承メンバすべてを含んで。"; } { return "継承メンバもすべて含んでいます。"; }
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
*/
QCString trGeneratedAutomatically(const char *s) QCString trGeneratedAutomatically(const char *s)
{ QCString result; { QCString result;
if (s) result=(QCString)s+"に対して"; if (s) result=(QCString)s+"";
result+="ソースコードから Doxygen が自動的に生成しました。"; result+="ソースコードから Doxygen が自動的に生成しました。";
return result; return result;
} }
/*! put after an enum name in the list of all members */
QCString trEnumName() QCString trEnumName()
{ return "enum 型"; } { return "enum 型"; }
/*! put after an enum value in the list of all members */
QCString trEnumValue() QCString trEnumValue()
{ return "enum 値"; } { return "enum 値"; }
/*! put after an undocumented member in the list of all members */
QCString trDefinedIn() QCString trDefinedIn()
{ return "次で定義されました。"; } { return "次で定義されました。"; }
QCString trIncludeFile()
{ return "インクルードファイル"; } /*! put as in introduction in the verbatim header file of a class.
* parameter f is the name of the include file.
*/
QCString trVerbatimText(const char *f) QCString trVerbatimText(const char *f)
{ return (QCString)"これはインクルードファイル"+f+ { return (QCString)"これはインクルードファイル"+f+"の内容です。"; }
"の Verbatim テキストです。"; }
// quick reference sections
/*! This is put above each page as a link to the list of all groups of
* compounds or files (see the \group command).
*/
QCString trModules() QCString trModules()
{ return "モジュール"; } { return "モジュール"; }
/*! This is put above each page as a link to the class hierarchy */
QCString trClassHierarchy() QCString trClassHierarchy()
{ return "クラス階層"; } { return "クラス階層"; }
/*! This is put above each page as a link to the list of annotated classes */
QCString trCompoundList() QCString trCompoundList()
{ return "データ構造リスト"; } { return "データ構造リスト"; }
/*! This is put above each page as a link to the list of documented files */
QCString trFileList() QCString trFileList()
{ return "ファイルリスト"; } { return "ファイルリスト"; }
/*! This is put above each page as a link to the list of all verbatim headers */
QCString trHeaderFiles() QCString trHeaderFiles()
{ return "ヘッダファイル"; } { return "ヘッダファイル"; }
/*! This is put above each page as a link to all members of compounds. */
QCString trCompoundMembers() QCString trCompoundMembers()
{ return "データ構造メンバ"; } { return "データ構造メンバ"; }
/*! This is put above each page as a link to all members of files. */
QCString trFileMembers() QCString trFileMembers()
{ return "ファイルメンバ"; } { return "ファイルメンバ"; }
/*! This is put above each page as a link to all related pages. */
QCString trRelatedPages() QCString trRelatedPages()
{ return "関連ページ"; } { return "関連ページ"; }
/*! This is put above each page as a link to all examples. */
QCString trExamples() QCString trExamples()
{ return "例"; } { return "例"; }
/*! This is put above each page as a link to the search engine. */
QCString trSearch() QCString trSearch()
{ return "検索"; } { return "検索"; }
/*! This is an introduction to the class hierarchy. */
QCString trClassHierarchyDescription() QCString trClassHierarchyDescription()
{ return "この継承リストはおおまかにはソートされていますが、" { return "この継承リストはおおまかにはソートされていますが、"
"アルファベット順で完全にソートされてはいません。"; "アルファベット順で完全にソートされてはいません。";
} }
/*! This is an introduction to the list with all files. */
QCString trFileListDescription(bool extractAll) QCString trFileListDescription(bool extractAll)
{ {
QCString result="このリストは、"; QCString result="このリストは、";
...@@ -112,8 +187,12 @@ class TranslatorJapanese : public Translator ...@@ -112,8 +187,12 @@ class TranslatorJapanese : public Translator
result+="簡易説明を持つファイルすべてのリストです。"; result+="簡易説明を持つファイルすべてのリストです。";
return result; return result;
} }
/*! This is an introduction to the annotated compound list. */
QCString trCompoundListDescription() QCString trCompoundListDescription()
{ return "これは簡易説明を持つ、クラス、構造体、共用体のリストです。";} { return "これは簡易説明を持つ、クラス、構造体、共用体のリストです。";}
/*! This is an introduction to the page with all class members. */
QCString trCompoundMembersDescription(bool extractAll) QCString trCompoundMembersDescription(bool extractAll)
{ {
QCString result="これは"; QCString result="これは";
...@@ -123,6 +202,8 @@ class TranslatorJapanese : public Translator ...@@ -123,6 +202,8 @@ class TranslatorJapanese : public Translator
result+="の解説へのリンクが張られています。"; result+="の解説へのリンクが張られています。";
return result; return result;
} }
/*! This is an introduction to the page with all file members. */
QCString trFileMembersDescription(bool extractAll) QCString trFileMembersDescription(bool extractAll)
{ {
QCString result="これは"; QCString result="これは";
...@@ -132,76 +213,197 @@ class TranslatorJapanese : public Translator ...@@ -132,76 +213,197 @@ class TranslatorJapanese : public Translator
result+="の解説へのリンクが張られています。"; result+="の解説へのリンクが張られています。";
return result; return result;
} }
/*! This is an introduction to the page with the list of all header files. */
QCString trHeaderFilesDescription() QCString trHeaderFilesDescription()
{ return "APIを構成するヘッダファイルです。"; } { return "APIを構成するヘッダファイルです。"; }
/*! This is an introduction to the page with the list of all examples */
QCString trExamplesDescription() QCString trExamplesDescription()
{ return "すべての例のリストです。"; } { return "すべての例のリストです。"; }
/*! This is an introduction to the page with the list of related pages */
QCString trRelatedPagesDescription() QCString trRelatedPagesDescription()
{ return "関連するドキュメントページすべてのリストです。"; } { return "関連するドキュメントページすべてのリストです。"; }
/*! This is an introduction to the page with the list of class/file groups */
QCString trModulesDescription() QCString trModulesDescription()
{ return "すべてのモジュールのリストです。"; } { return "すべてのモジュールのリストです。"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
QCString trNoDescriptionAvailable() QCString trNoDescriptionAvailable()
{ return "ドキュメントが記述されていません。"; } { return "ドキュメントが記述されていません。"; }
// index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
QCString trDocumentation() QCString trDocumentation()
{ return "ドキュメント"; } { return "ドキュメント"; }
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
QCString trModuleIndex() QCString trModuleIndex()
{ return "モジュール索引"; } { return "モジュール索引"; }
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
QCString trHierarchicalIndex() QCString trHierarchicalIndex()
{ return "階層索引"; } { return "階層索引"; }
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
*/
QCString trCompoundIndex() QCString trCompoundIndex()
{ return "データ構造索引"; } { return "データ構造索引"; }
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
QCString trFileIndex() QCString trFileIndex()
{ return "ファイル索引"; } { return "ファイル索引"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
QCString trModuleDocumentation() QCString trModuleDocumentation()
{ return "モジュールの解説"; } { return "モジュールの解説"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions.
*/
QCString trClassDocumentation() QCString trClassDocumentation()
{ return "クラスの解説"; } { return "クラスの解説"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all files.
*/
QCString trFileDocumentation() QCString trFileDocumentation()
{ return "ファイルの解説"; } { return "ファイルの解説"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
QCString trExampleDocumentation() QCString trExampleDocumentation()
{ return "例題の解説"; } { return "例題の解説"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
QCString trPageDocumentation() QCString trPageDocumentation()
{ return "ページの解説"; } { return "ページの解説"; }
/*! This is used in LaTeX as the title of the document */
QCString trReferenceManual() QCString trReferenceManual()
{ return "リファレンスマニュアル"; } { return "リファレンスマニュアル"; }
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
QCString trDefines() QCString trDefines()
{ return "マクロ定義"; } { return "マクロ定義"; }
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
*/
QCString trFuncProtos() QCString trFuncProtos()
{ return "関数プロトタイプ"; } { return "関数プロトタイプ"; }
/*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
QCString trTypedefs() QCString trTypedefs()
{ return "型定義"; } { return "型定義"; }
/*! This is used in the documentation of a file as a header before the
* list of enumerations
*/
QCString trEnumerations() QCString trEnumerations()
{ return "列挙型"; } { return "列挙型"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) functions
*/
QCString trFunctions() QCString trFunctions()
{ return "関数"; } { return "関数"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString trVariables() QCString trVariables()
{ return "変数"; } { return "変数"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
QCString trEnumerationValues() QCString trEnumerationValues()
{ return "列挙型値"; } { return "列挙型値"; }
QCString trReimplementedFrom()
{ return "次を再定義"; } /*! This is used in man pages as the author section. */
QCString trReimplementedIn()
{ return "次で再定義"; }
QCString trAuthor() QCString trAuthor()
{ return "作者"; } { return "作者"; }
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
QCString trDefineDocumentation() QCString trDefineDocumentation()
{ return "マクロ定義の解説"; } { return "マクロ定義の解説"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
*/
QCString trFunctionPrototypeDocumentation() QCString trFunctionPrototypeDocumentation()
{ return "関数プロトタイプの解説"; } { return "関数プロトタイプの解説"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
QCString trTypedefDocumentation() QCString trTypedefDocumentation()
{ return "型定義の解説"; } { return "型定義の解説"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
QCString trEnumerationTypeDocumentation() QCString trEnumerationTypeDocumentation()
{ return "列挙型の解説"; } { return "列挙型の解説"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
QCString trEnumerationValueDocumentation()
{ return "列挙型値の解説"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
QCString trFunctionDocumentation() QCString trFunctionDocumentation()
{ return "関数の解説"; } { return "関数の解説"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
QCString trVariableDocumentation() QCString trVariableDocumentation()
{ return "変数の解説"; } { return "変数の解説"; }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
*/
QCString trCompounds() QCString trCompounds()
{ return "データ構造"; } { return "データ構造"; }
/*! This is used in the documentation of a group before the list of
* links to documented files
*/
QCString trFiles() QCString trFiles()
{ return "ファイル"; } { return "ファイル"; }
/*! This is used in the standard footer of each page and indicates when
* the page was generated
*/
QCString trGeneratedAt(const char *date,const char *projName) QCString trGeneratedAt(const char *date,const char *projName)
{ {
QCString result; QCString result;
...@@ -209,46 +411,75 @@ class TranslatorJapanese : public Translator ...@@ -209,46 +411,75 @@ class TranslatorJapanese : public Translator
result+=(QCString)date+"に生成されました。"; result+=(QCString)date+"に生成されました。";
return result; return result;
} }
/*! This is part of the sentence used in the standard footer of each page.
*/
QCString trWrittenBy() QCString trWrittenBy()
{ {
return "を開発したのは"; return "の開発者:";
} }
/*! this text is put before a class diagram */
QCString trClassDiagram(const char *clName) QCString trClassDiagram(const char *clName)
{ {
return (QCString)clName+"に対するクラス階層図"; return (QCString)clName+"に対するクラス階層図";
} }
/*! this text is generated when the \internal command is used. */
QCString trForInternalUseOnly() QCString trForInternalUseOnly()
{ return "内部使用のみ。"; } { return "内部使用のみ。"; }
/*! this text is generated when the \reimp command is used. */
QCString trReimplementedForInternalReasons() QCString trReimplementedForInternalReasons()
{ return "内部的な理由により再実装されましたが、APIには影響しません。"; { return "内部的な理由により再実装されましたが、APIには影響しません。";
} }
/*! this text is generated when the \warning command is used. */
QCString trWarning() QCString trWarning()
{ return "注意"; } { return "注意"; }
/*! this text is generated when the \bug command is used. */
QCString trBugsAndLimitations() QCString trBugsAndLimitations()
{ return "バグと制限"; } { return "バグと制限"; }
/*! this text is generated when the \version command is used. */
QCString trVersion() QCString trVersion()
{ return "バージョン"; } { return "バージョン"; }
/*! this text is generated when the \date command is used. */
QCString trDate() QCString trDate()
{ return "日付"; } { return "日付"; }
/*! this text is generated when the \author command is used. */
QCString trAuthors() QCString trAuthors()
{ return "作者"; } { return "作者"; }
/*! this text is generated when the \return command is used. */
QCString trReturns() QCString trReturns()
{ return "戻り値"; } { return "戻り値"; }
/*! this text is generated when the \sa command is used. */
QCString trSeeAlso() QCString trSeeAlso()
{ return "参照"; } { return "参照"; }
/*! this text is generated when the \param command is used. */
QCString trParameters() QCString trParameters()
{ return "引数"; } { return "引数"; }
/*! this text is generated when the \exception command is used. */
QCString trExceptions() QCString trExceptions()
{ return "例外"; } { return "例外"; }
/*! this text is used in the title page of a LaTeX document. */
QCString trGeneratedBy() QCString trGeneratedBy()
{ return ""; } { return ""; }
// new since 0.49-990307
// new since 0.49-990307 /*! used as the title of page containing all the index of all namespaces. */
QCString trNamespaces()
{ return "名前空間"; }
QCString trNamespaceList() QCString trNamespaceList()
{ return "名前空間リスト"; } { return "名前空間リスト"; }
/*! used as an introduction to the namespace list */
QCString trNamespaceListDescription(bool extractAll) QCString trNamespaceListDescription(bool extractAll)
{ {
QCString result="このリストは、簡易説明を持つすべての"; QCString result="このリストは、簡易説明を持つすべての";
...@@ -256,13 +487,324 @@ class TranslatorJapanese : public Translator ...@@ -256,13 +487,324 @@ class TranslatorJapanese : public Translator
result+="名前空間のリストです。"; result+="名前空間のリストです。";
return result; return result;
} }
/*! used in the class documentation as a header before the list of all
* friends of a class
*/
QCString trFriends() QCString trFriends()
{ return "フレンド"; } { return "フレンド"; }
// new since 0.49-990405 //////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
/*! used in the class documentation as a header before the list of all
* related classes
*/
virtual QCString trRelatedFunctionDocumentation() virtual QCString trRelatedFunctionDocumentation()
{ return "フレンドと関連する関数の解説"; } { return "フレンドと関連する関数の解説"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
/*! used as the title of the HTML page of a class/struct/union */
QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType)
{
QCString result="";
switch(compType)
{
case ClassDef::Class: result+="クラス "; break;
case ClassDef::Struct: result+="構造体 "; break;
case ClassDef::Union: result+="共用体 "; break;
case ClassDef::Interface: result+="インタフェース"; break;
case ClassDef::Exception: result+="Exception "; break; //TODO:fixme
}
result+=(QCString)clName+" の解説";
return result;
}
/*! used as the title of the HTML page of a file */
QCString trFileReference(const char *fileName)
{
QCString result="ファイル "+(QCString)fileName+" の解説";
return result;
}
/*! used as the title of the HTML page of a namespace */
QCString trNamespaceReference(const char *namespaceName)
{
QCString result="名前空間 "+(QCString)namespaceName+" の解説";
return result;
}
/*! \mgroup Class sections
* these are for the member sections of a class, struct or union
*/
QCString trPublicMembers()
{ return "公開メンバ"; }
QCString trPublicSlots()
{ return "公開スロット"; }
QCString trSignals()
{ return "シグナル"; }
QCString trStaticPublicMembers()
{ return "静的公開メンバ"; }
QCString trProtectedMembers()
{ return "保護メンバ"; }
QCString trProtectedSlots()
{ return "保護スロット"; }
QCString trStaticProtectedMembers()
{ return "静的保護メンバ"; }
QCString trPrivateMembers()
{ return "非公開メンバ"; }
QCString trPrivateSlots()
{ return "非公開スロット"; }
QCString trStaticPrivateMembers()
{ return "静的非公開メンバ"; }
/*! \endmgroup */
/*! this function is used to produce a comma-separated list of items.
* use generateMarker(i) to indicate where item i should be put.
*/
QCString trWriteList(int numEntries)
{
QCString result;
int i;
// the inherits list contain `numEntries' classes
for (i=0;i<numEntries;i++)
{
// use generateMarker to generate placeholders for the class links!
result+=generateMarker(i); // generate marker for entry i in the list
// (order is left to right)
if (i!=numEntries-1) // not the last entry, so we need a separator
{
if (i<numEntries-2) // not the fore last entry
result+=", ";
else // the fore last entry
result+=", と ";
}
}
return result;
}
/*! used in class documentation to produce a list of base classes,
* if class diagrams are disabled.
*/
QCString trInheritsList(int numEntries)
{
return trWriteList(numEntries)+"を継承しています。";
}
/*! used in class documentation to produce a list of super classes,
* if class diagrams are disabled.
*/
QCString trInheritedByList(int numEntries)
{
return trWriteList(numEntries)+"に継承されています。";
}
/*! used in member documentation blocks to produce a list of
* members that are hidden by this one.
*/
QCString trReimplementedFromList(int numEntries)
{
return trWriteList(numEntries)+"を再定義しています。";
}
/*! used in member documentation blocks to produce a list of
* all member that overwrite the implementation of this member.
*/
QCString trReimplementedInList(int numEntries)
{
return trWriteList(numEntries)+"で再定義されています。";
}
/*! This is put above each page as a link to all members of namespaces. */
QCString trNamespaceMembers()
{ return "名前空間メンバ"; }
/*! This is an introduction to the page with all namespace members */
QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result="これは";
if (!extractAll) result+="ドキュメント化された";
result+="名前空間すべてのリストで、それぞれ";
if (extractAll)
result+="、名前空間の解説";
else
result+="が属している名前空間";
result+="へのリンクが張られています。";
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
QCString trNamespaceIndex()
{ return "名前空間索引"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
QCString trNamespaceDocumentation()
{ return "名前空間の解説"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////
/*! This is used in the documentation before the list of all
* namespaces in a file.
*/
QCString trNamespaces()
{ return "名前空間"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString result=(QCString)"この";
switch(compType)
{
case ClassDef::Class: result+="クラス"; break;
case ClassDef::Struct: result+="構造体"; break;
case ClassDef::Union: result+="共用体"; break;
case ClassDef::Interface: result+="インタフェース"; break;
case ClassDef::Exception: result+="Exception"; break; //TODO:fixme
}
result+="の解説は次のファイルから生成されました:";
return result;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
QCString trAlphabeticalList()
{ return "アルファベット順リスト"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
QCString trReturnValues()
{ return "戻り値"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
QCString trMainPage()
{ return "メインページ"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
QCString trPageAbbreviation()
{ return "p."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
QCString trSources()
{
return "ソース";
}
QCString trDefinedAtLineInSourceFile()
{
return "ファイル @1 の @0 行で定義されています。";
}
QCString trDefinedInSourceFile()
{
return "ファイル @0 で定義されています。";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.0.0
//////////////////////////////////////////////////////////////////////////
QCString trDeprecated()
{
return "Deprecated";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
/*! this text is put before a collaboration diagram */
QCString trCollaborationDiagram(const char *clName)
{
return (QCString)clName+"のコラボレーション図";
}
/*! this text is put before an include dependency graph */
QCString trInclDepGraph(const char *fName)
{
return (QCString)fName+"のインクルード依存関係図";
}
/*! header that is put before the list of constructor/destructors. */
QCString trConstructorDocumentation()
{
return "コンストラクタとデストラクタの解説";
}
/*! Used in the file documentation to point to the corresponding sources. */
QCString trGotoSourceCode()
{
return "このファイルのソースコードを見る。";
}
/*! Used in the file sources to point to the corresponding documentation. */
QCString trGotoDocumentation()
{
return "このファイルの解説を見る。";
}
/*! Text for the \pre command */
QCString trPrecondition()
{
return "前提条件";
}
/*! Text for the \post command */
QCString trPostcondition()
{
return "Postcondition";
}
/*! Text for the \invariant command */
QCString trInvariant()
{
return "Invariant";
}
/*! Text shown before a multi-line variable/enum initialization */
QCString trInitialValue()
{
return "初期値:";
}
/*! Text used the source code in the file index */
QCString trCode()
{
return "コード";
}
QCString trGraphicalHierarchy()
{
return "クラス階層図";
}
QCString trGotoGraphicalHierarchy()
{
return "クラス階層図を見る。";
}
QCString trGotoTextualHierarchy()
{
return "クラス階層図(テキスト)を見る。";
}
QCString trPageIndex()
{
return "ページ索引";
}
}; };
#endif #endif
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "htmlhelp.h" #include "htmlhelp.h"
#include "example.h" #include "example.h"
#include "version.h" #include "version.h"
#include "groupdef.h"
// an inheritance tree of depth of 100000 should be enough for everyone :-) // an inheritance tree of depth of 100000 should be enough for everyone :-)
const int maxInheritanceDepth = 100000; const int maxInheritanceDepth = 100000;
...@@ -268,6 +269,7 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char * ...@@ -268,6 +269,7 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
FileDef *fd=0; FileDef *fd=0;
MemberDef *md=0; MemberDef *md=0;
NamespaceDef *nd=0; NamespaceDef *nd=0;
GroupDef *gd=0;
QCString scopeName=scName; QCString scopeName=scName;
QCString searchName=name; QCString searchName=name;
...@@ -314,14 +316,14 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char * ...@@ -314,14 +316,14 @@ void linkifyText(OutputList &ol,const char *scName,const char *name,const char *
//if (!found) printf("Trying to link %s in %s\n",word.data(),scName); //if (!found) printf("Trying to link %s in %s\n",word.data(),scName);
if (!found && if (!found &&
getDefs(scName,word,0,md,cd,fd,nd) && getDefs(scName,word,0,md,cd,fd,nd,gd) &&
(md->isTypedef() || md->isEnumerate() || md->isReference()) && (md->isTypedef() || md->isEnumerate() || md->isReference()) &&
md->isLinkable() md->isLinkable()
) )
{ {
//printf("Found ref\n"); //printf("Found ref\n");
Definition *d=0; Definition *d=0;
if (cd) d=cd; else if (nd) d=nd; else d=fd; if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
if (d && d->isLinkable()) if (d && d->isLinkable())
{ {
result.writeObjectLink(d->getReference(),d->getOutputFileBase(), result.writeObjectLink(d->getReference(),d->getOutputFileBase(),
...@@ -527,7 +529,7 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext) ...@@ -527,7 +529,7 @@ void writeQuickLinks(OutputList &ol,bool compact,bool ext)
parseText(ol,theTranslator->trCompoundList()); parseText(ol,theTranslator->trCompoundList());
ol.endQuickIndexItem(); ol.endQuickIndexItem();
} }
if (documentedFiles>0) if (documentedHtmlFiles>0)
{ {
if (!compact) ol.writeListItem(); if (!compact) ol.writeListItem();
ol.startQuickIndexItem(extLink,absPath+"files.html"); ol.startQuickIndexItem(extLink,absPath+"files.html");
...@@ -723,7 +725,7 @@ QCString dateToString(bool includeTime) ...@@ -723,7 +725,7 @@ QCString dateToString(bool includeTime)
// recursive function that returns the number of branches in the // recursive function that returns the number of branches in the
// inheritance tree that the base class `bcd' is below the class `cd' // inheritance tree that the base class `bcd' is below the class `cd'
static int minClassDistance(ClassDef *cd,ClassDef *bcd,int level=0) int minClassDistance(ClassDef *cd,ClassDef *bcd,int level)
{ {
if (cd==bcd) return level; if (cd==bcd) return level;
BaseClassListIterator bcli(*cd->baseClasses()); BaseClassListIterator bcli(*cd->baseClasses());
...@@ -1190,9 +1192,10 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl) ...@@ -1190,9 +1192,10 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl)
*/ */
bool getDefs(const QCString &scName,const QCString &memberName, bool getDefs(const QCString &scName,const QCString &memberName,
const char *args, const char *args,
MemberDef *&md, ClassDef *&cd, FileDef *&fd,NamespaceDef *&nd) MemberDef *&md,
ClassDef *&cd, FileDef *&fd, NamespaceDef *&nd, GroupDef *&gd)
{ {
fd=0, md=0, cd=0, nd=0; fd=0, md=0, cd=0, nd=0, gd=0;
if (memberName.isEmpty()) return FALSE; /* empty name => nothing to link */ if (memberName.isEmpty()) return FALSE; /* empty name => nothing to link */
QCString scopeName=scName.copy(); QCString scopeName=scName.copy();
...@@ -1327,7 +1330,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1327,7 +1330,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
// unknown or undocumented scope // unknown or undocumented scope
} }
else // maybe an namespace or file member ? else // maybe an namespace, file or group member ?
{ {
//printf("Testing for global function scopeName=`%s' mScope=`%s' :: mName=`%s'\n", //printf("Testing for global function scopeName=`%s' mScope=`%s' :: mName=`%s'\n",
// scopeName.data(),mScope.data(),mName.data()); // scopeName.data(),mScope.data(),mName.data());
...@@ -1415,11 +1418,17 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1415,11 +1418,17 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
if (md->isLinkable()) if (md->isLinkable())
{ {
//printf("md->name()=`%s' md->args=`%s'\n",md->name().data(),args);
fd=md->getFileDef(); fd=md->getFileDef();
if (fd && fd->isLinkable()) gd=md->groupDef();
//printf("md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
// md->name().data(),args,fd,gd);
bool inGroup=FALSE;
if ((fd && fd->isLinkable()) ||
(inGroup=(gd && gd->isLinkable()))
)
{ {
//printf("fd->name()=`%s'\n",fd->name().data()); if (inGroup) fd=0;
//printf("fd=%p gd=%p inGroup=`%d' args=`%s'\n",fd,gd,inGroup,args);
bool match=TRUE; bool match=TRUE;
ArgumentList *argList=0; ArgumentList *argList=0;
if (args && !md->isDefine()) if (args && !md->isDefine())
...@@ -1429,7 +1438,11 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1429,7 +1438,11 @@ bool getDefs(const QCString &scName,const QCString &memberName,
match=matchArguments(md->argumentList(),argList); match=matchArguments(md->argumentList(),argList);
delete argList; argList=0; delete argList; argList=0;
} }
if (match) return TRUE; if (match)
{
//printf("Found match!\n");
return TRUE;
}
} }
} }
md=mn->next(); md=mn->next();
...@@ -1445,8 +1458,13 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1445,8 +1458,13 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
//printf("md->name()=`%s'\n",md->name().data()); //printf("md->name()=`%s'\n",md->name().data());
fd=md->getFileDef(); fd=md->getFileDef();
if (fd && fd->isLinkable()) gd=md->groupDef();
bool inGroup=FALSE;
if ((fd && fd->isLinkable()) |+
(inGroup=(gd && gd->isLinkable()))
)
{ {
if (inGroup) fd=0;
return TRUE; return TRUE;
} }
} }
...@@ -1625,7 +1643,7 @@ bool generateRef(OutputList &ol,const char *scName, ...@@ -1625,7 +1643,7 @@ bool generateRef(OutputList &ol,const char *scName,
// scopeStr.data(),nameStr.data(),argsStr.data()); // scopeStr.data(),nameStr.data(),argsStr.data());
// check if nameStr is a member or global. // check if nameStr is a member or global.
if (getDefs(scopeStr,nameStr,argsStr,md,cd,fd,nd)) if (getDefs(scopeStr,nameStr,argsStr,md,cd,fd,nd,gd))
{ {
//printf("after getDefs nd=%p\n",nd); //printf("after getDefs nd=%p\n",nd);
QCString anchor = md->isLinkable() ? md->anchor() : 0; QCString anchor = md->isLinkable() ? md->anchor() : 0;
...@@ -1656,6 +1674,15 @@ bool generateRef(OutputList &ol,const char *scName, ...@@ -1656,6 +1674,15 @@ bool generateRef(OutputList &ol,const char *scName,
cName=fd->name(); cName=fd->name();
aName=md->anchor(); aName=md->anchor();
} }
else if (gd)
{
//printf("addGroupLink(%s,%s,%s)\n",fd->getOutputFileBase().data(),anchor.data(),
// gd->name().data());
ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),
anchor,linkText.stripWhiteSpace());
cName=gd->name();
aName=md->anchor();
}
else // should not be reached else // should not be reached
{ {
//printf("add no link fd=cd=0\n"); //printf("add no link fd=cd=0\n");
......
...@@ -33,6 +33,7 @@ class MemberDef; ...@@ -33,6 +33,7 @@ class MemberDef;
class ExampleList; class ExampleList;
class ClassList; class ClassList;
class BaseClassList; class BaseClassList;
class GroupDef;
extern void setAnchors(char id,MemberList *ml); extern void setAnchors(char id,MemberList *ml);
extern QCString fileToString(const char *name); extern QCString fileToString(const char *name);
...@@ -40,8 +41,10 @@ extern QCString dateToString(bool); ...@@ -40,8 +41,10 @@ extern QCString dateToString(bool);
extern void linkifyText(OutputList &ol,const char *clName,const char *name, extern void linkifyText(OutputList &ol,const char *clName,const char *name,
const char *text); const char *text);
extern bool getDefs(const QCString &scopeName,const QCString &memberName, extern bool getDefs(const QCString &scopeName,const QCString &memberName,
const char *, MemberDef *&md, ClassDef *&cd,FileDef *&fd, const char *, MemberDef *&md,
NamespaceDef *&nd); ClassDef *&cd,FileDef *&fd,
NamespaceDef *&nd,GroupDef *&gd
);
extern bool generateRef(OutputList &ol,const char *, extern bool generateRef(OutputList &ol,const char *,
const char *,bool inSeeBlock,const char * =0); const char *,bool inSeeBlock,const char * =0);
extern bool generateLink(OutputList &ol,const char *, extern bool generateLink(OutputList &ol,const char *,
...@@ -84,5 +87,6 @@ int getPrefixIndex(const QCString &name); ...@@ -84,5 +87,6 @@ int getPrefixIndex(const QCString &name);
QCString removeAnnonymousScopes(const QCString &s); QCString removeAnnonymousScopes(const QCString &s);
void initClassHierarchy(ClassList *cl); void initClassHierarchy(ClassList *cl);
bool hasVisibleRoot(BaseClassList *bcl); bool hasVisibleRoot(BaseClassList *bcl);
int minClassDistance(ClassDef *cd,ClassDef *bcd,int level=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