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