Commit 92fa8641 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release 1.1.1-20000319

parent 2c5c8878
DOXYGEN Version 1.1.1 DOXYGEN Version 1.1.1-20000319
CONTENTS CONTENTS
-------- --------
...@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX: ...@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have: 1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.1.src.tar.gz # uncompress the archive gunzip doxygen-1.1.1-20000319.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.1.src.tar # unpack it tar xf doxygen-1.1.1-20000319.src.tar # unpack it
2. Run the configure script: 2. Run the configure script:
...@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at ...@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (12 March 2000) Dimitri van Heesch (19 March 2000)
...@@ -54,7 +54,7 @@ pdf: docs ...@@ -54,7 +54,7 @@ pdf: docs
archive: clean archive: clean
tar zcvf dx`date +%y%m%d`.tgz tmake doc wintools examples bin objects \ tar zcvf dx`date +%y%m%d`.tgz tmake doc wintools examples bin objects \
src configure configure.bin Makefile.in Makefile.win.in INSTALL \ src configure configure.bin Makefile.in Makefile.win.in INSTALL \
make.bat LANGUAGE.HOWTO LICENSE PLATFORMS VERSION make.bat LANGUAGE.HOWTO LICENSE PLATFORMS VERSION packages
src/version.cpp: Makefile src/version.cpp: Makefile
echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp
......
DOXYGEN Version 1.1.1 DOXYGEN Version 1.1.1-20000319
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (12 March 2000) Dimitri van Heesch (19 March 2000)
1.1.1 1.1.1-20000319
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
\begin{center} \begin{center}
Manual for version $VERSION\\[2ex] Manual for version $VERSION\\[2ex]
Written by Dimitri van Heesch\\[2ex] Written by Dimitri van Heesch\\[2ex]
\copyright 1997-1998 \copyright 1997-2000
\end{center} \end{center}
\end{titlepage} \end{titlepage}
\clearemptydoublepage \clearemptydoublepage
......
...@@ -127,6 +127,14 @@ doxygen generates. You can include this by putting ...@@ -127,6 +127,14 @@ doxygen generates. You can include this by putting
\endverbatim \endverbatim
In the HEAD section of the HTML page. In the HEAD section of the HTML page.
<li><b>Why does doxygen use Qt?</b>
The most important reason is too have a platform abstraction for most
Unices and Windows by means of the QFile, QFileInfo, QDir, QDate,
QTime and QIODevice classes.
Another reason is for the nice and bug free utility classes, like QList,
QDict, QString, QArray, QTextStream, QRegExp etc.
</ol> </ol>
\htmlonly \htmlonly
......
...@@ -146,6 +146,10 @@ Thanks go to: ...@@ -146,6 +146,10 @@ Thanks go to:
for rendering the logos. for rendering the logos.
<li>Harm van der Heijden for adding HTML help support. <li>Harm van der Heijden for adding HTML help support.
<li>Parker Waerchter for adding the RTF output generator. <li>Parker Waerchter for adding the RTF output generator.
<li>Joerg Baumann, for adding conditional documentation blocks, and
PDF links.
<li>Matthias Andree for providing a .spec script for building rpms from the
sources.
<li>Jens Breitenstein, Christophe Bordeaux, Samuel Hägglund, Xet Erixon, <li>Jens Breitenstein, Christophe Bordeaux, Samuel Hägglund, Xet Erixon,
Vlastimil Havran, Ahmed Also Faisal, Alessandro Falappa, Kenji Nagamatsu, Vlastimil Havran, Ahmed Also Faisal, Alessandro Falappa, Kenji Nagamatsu,
Francisco Oltra Thennet, Olli Korhonen for providing translations into Francisco Oltra Thennet, Olli Korhonen for providing translations into
...@@ -218,7 +222,7 @@ David Wong, ...@@ -218,7 +222,7 @@ David Wong,
Peter Garner, Peter Garner,
Fred Labrosse, Fred Labrosse,
Frank Schimmel, Frank Schimmel,
Reinhard Nissl Reinhard Nissl,
and many others for suggestions, patches and bug reports. and many others for suggestions, patches and bug reports.
</ul> </ul>
*/ */
......
...@@ -156,11 +156,11 @@ Here is a list of the languages and their current maintainers: ...@@ -156,11 +156,11 @@ Here is a list of the languages and their current maintainers:
Russian Russian
</TD> </TD>
<TD> <TD>
Vladimir Vodolazkiy Nickolay Semyonov
</TD> </TD>
<TD> <TD>
<a href="mailto:voldemarus@NOSPAM.geocities.com"> <a href="mailto:snob@NOSPAM.int.spb.ru">
voldemarus@NOSPAM.geocities.com</a> snob@NOSPAM.int.spb.ru</a>
</TD> </TD>
</TR> </TR>
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
extern void parseConfig(const QCString &config); extern void parseConfig(const QCString &config);
extern void writeTemplateConfig(QFile *f,bool shortList); extern void writeTemplateConfig(QFile *f,bool shortList);
extern void checkConfig(); extern void checkConfig();
extern void configStrToVal();
extern void substituteEnvironmentVars();
struct Config struct Config
{ {
...@@ -68,6 +70,7 @@ struct Config ...@@ -68,6 +70,7 @@ struct Config
static QStrList predefined; // list of predefined macro names. static QStrList predefined; // list of predefined macro names.
static QStrList extraPackageList; // list of extra LaTeX packages. static QStrList extraPackageList; // list of extra LaTeX packages.
static QStrList stripFromPath; // list of candidates to strip from the file path static QStrList stripFromPath; // list of candidates to strip from the file path
static QStrList sectionFilterList; // list of section filters to are enabled
static bool quietFlag; // generate progress messages flag static bool quietFlag; // generate progress messages flag
static bool warningFlag; // generate warnings flag static bool warningFlag; // generate warnings flag
static bool recursiveFlag; // scan directories recursively static bool recursiveFlag; // scan directories recursively
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <qfileinfo.h> #include <qfileinfo.h>
#include <qdir.h> #include <qdir.h>
#include <qtextstream.h> #include <qtextstream.h>
#include <qregexp.h>
#include "config.h" #include "config.h"
#include "version.h" #include "version.h"
...@@ -57,6 +58,7 @@ void warn(const char *fmt, ...) ...@@ -57,6 +58,7 @@ void warn(const char *fmt, ...)
#endif #endif
#define YY_NEVER_INTERACTIVE 1 #define YY_NEVER_INTERACTIVE 1
#define YY_NO_UNPUT
/* ----------------------------------------------------------------- /* -----------------------------------------------------------------
* *
...@@ -100,6 +102,7 @@ QStrList Config::extDocPathList; ...@@ -100,6 +102,7 @@ QStrList Config::extDocPathList;
QStrList Config::predefined; QStrList Config::predefined;
QStrList Config::extraPackageList; QStrList Config::extraPackageList;
QStrList Config::stripFromPath; QStrList Config::stripFromPath;
QStrList Config::sectionFilterList;
bool Config::quietFlag = FALSE; bool Config::quietFlag = FALSE;
bool Config::recursiveFlag = FALSE; bool Config::recursiveFlag = FALSE;
bool Config::allExtFlag = FALSE; bool Config::allExtFlag = FALSE;
...@@ -162,7 +165,7 @@ static QCString * s=0; ...@@ -162,7 +165,7 @@ static QCString * s=0;
static bool * b=0; static bool * b=0;
static QStrList * l=0; static QStrList * l=0;
static int lastState; static int lastState;
static int lastEnvState; //static int lastEnvState;
static QCString elemStr; static QCString elemStr;
static QCString tabSizeString; static QCString tabSizeString;
static QCString colsInAlphaIndexString; static QCString colsInAlphaIndexString;
...@@ -238,6 +241,7 @@ static int yyread(char *buf,int max_size) ...@@ -238,6 +241,7 @@ static int yyread(char *buf,int max_size)
<Start>"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; } <Start>"PREDEFINED"[ \t]*"=" { BEGIN(GetStrList); l=&Config::predefined; l->clear(); elemStr=""; }
<Start>"EXTRA_PACKAGES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extraPackageList; l->clear(); elemStr=""; } <Start>"EXTRA_PACKAGES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::extraPackageList; l->clear(); elemStr=""; }
<Start>"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::stripFromPath; l->clear(); elemStr=""; } <Start>"STRIP_FROM_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&Config::stripFromPath; l->clear(); elemStr=""; }
<Start>"ENABLED_SECTIONS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::sectionFilterList; l->clear(); elemStr=""; }
<Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; } <Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; }
<Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; } <Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; }
<Start>"RECURSIVE"[ \t]*"=" { BEGIN(GetBool); b=&Config::recursiveFlag; } <Start>"RECURSIVE"[ \t]*"=" { BEGIN(GetBool); b=&Config::recursiveFlag; }
...@@ -283,6 +287,7 @@ static int yyread(char *buf,int max_size) ...@@ -283,6 +287,7 @@ static int yyread(char *buf,int max_size)
<Start>"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; } <Start>"SHOW_INCLUDE_FILES"[ \t]*"=" { BEGIN(GetBool); b=&Config::showIncFileFlag; }
<Start>"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; } <Start>"STRIP_CODE_COMMENTS"[ \t]*"=" { BEGIN(GetBool); b=&Config::stripCommentsFlag; }
<Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; } <Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; }
<Start>"LATEX_BATCHMODE"[ \t]*"=" { BEGIN(GetBool); b=&Config::latexBatchModeFlag; }
<Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); } <Start>[a-z_A-Z0-9]+ { err("Warning: ignoring unknown tag `%s' at line %d\n",yytext,yyLineNr); }
<GetString,GetBool>\n { yyLineNr++; BEGIN(Start); } <GetString,GetBool>\n { yyLineNr++; BEGIN(Start); }
<GetStrList>\n { <GetStrList>\n {
...@@ -302,11 +307,12 @@ static int yyread(char *buf,int max_size) ...@@ -302,11 +307,12 @@ static int yyread(char *buf,int max_size)
} }
elemStr.resize(0); elemStr.resize(0);
} }
<GetString>[^ \"\$\t\r\n]+ { (*s)+=yytext; } <GetString>[^ \"\t\r\n]+ { (*s)+=yytext; }
<GetString,GetStrList>"\"" { lastState=YY_START; <GetString,GetStrList>"\"" { lastState=YY_START;
BEGIN(GetQuotedString); BEGIN(GetQuotedString);
tmpString.resize(0); tmpString.resize(0);
} }
/*
<GetString,GetStrList,GetQuotedString>"\$\(" { <GetString,GetStrList,GetQuotedString>"\$\(" {
//printf(">> Enter env\n"); //printf(">> Enter env\n");
lastEnvState=YY_START; lastEnvState=YY_START;
...@@ -321,6 +327,7 @@ static int yyread(char *buf,int max_size) ...@@ -321,6 +327,7 @@ static int yyread(char *buf,int max_size)
for (i=l-1;i>=0;i--) unput(env[i]); for (i=l-1;i>=0;i--) unput(env[i]);
BEGIN(lastEnvState); BEGIN(lastEnvState);
} }
*/
<GetQuotedString>"\""|"\n" { <GetQuotedString>"\""|"\n" {
//printf("Quoted String = `%s'\n",tmpString.data()); //printf("Quoted String = `%s'\n",tmpString.data());
if (lastState==GetString) if (lastState==GetString)
...@@ -353,7 +360,7 @@ static int yyread(char *buf,int max_size) ...@@ -353,7 +360,7 @@ static int yyread(char *buf,int max_size)
bs.data(),yyLineNr); bs.data(),yyLineNr);
} }
} }
<GetStrList>[^ \#\"\$\t\r\n]+ { <GetStrList>[^ \#\"\t\r\n]+ {
elemStr+=yytext; elemStr+=yytext;
} }
<SkipComment>\n { yyLineNr++; BEGIN(Start); } <SkipComment>\n { yyLineNr++; BEGIN(Start); }
...@@ -455,6 +462,7 @@ void Config::init() ...@@ -455,6 +462,7 @@ void Config::init()
Config::predefined.clear(); Config::predefined.clear();
Config::extraPackageList.clear(); Config::extraPackageList.clear();
Config::stripFromPath.clear(); Config::stripFromPath.clear();
Config::sectionFilterList.clear();
Config::tabSize=8; Config::tabSize=8;
Config::colsInAlphaIndex=5; Config::colsInAlphaIndex=5;
Config::quietFlag = FALSE; Config::quietFlag = FALSE;
...@@ -890,6 +898,16 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -890,6 +898,16 @@ void writeTemplateConfig(QFile *f,bool sl)
writeIntValue(t,Config::tabSize); writeIntValue(t,Config::tabSize);
t << "\n"; t << "\n";
if (!sl) if (!sl)
{
t << "\n";
t << "# The ENABLE_SECTIONS tag can be used to enable conditional\n";
t << "# documentation sections, marked by \\if sectionname ... \\endif.\n";
t << "\n";
}
t << "ENABLED_SECTIONS = ";
writeStringList(t,Config::sectionFilterList);
t << "\n";
if (!sl)
{ {
t << "\n"; t << "\n";
} }
...@@ -1224,10 +1242,7 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1224,10 +1242,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# running if errors occur, instead of asking the user for help.\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"; t << "# This option is also used when generating formulas in HTML.\n";
} }
if (!sl) t << "LATEX_BATCHMODE = ";
{
t << "LATEX_BATCHMODE = ";
}
writeBoolValue(t,Config::latexBatchModeFlag); writeBoolValue(t,Config::latexBatchModeFlag);
t << "\n"; t << "\n";
t << "#---------------------------------------------------------------------------\n"; t << "#---------------------------------------------------------------------------\n";
...@@ -1574,13 +1589,8 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1574,13 +1589,8 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n"; t << "\n";
} }
void checkConfig() void configStrToVal()
{ {
//if (!projectName.isEmpty())
//{
// projectName[0]=toupper(projectName[0]);
//}
if (tabSizeString.isEmpty()) if (tabSizeString.isEmpty())
{ {
Config::tabSize=8; Config::tabSize=8;
...@@ -1613,7 +1623,94 @@ void checkConfig() ...@@ -1613,7 +1623,94 @@ void checkConfig()
} }
Config::colsInAlphaIndex=cols; Config::colsInAlphaIndex=cols;
} }
}
static void substEnvVarsInString(QCString &s)
{
QRegExp re("\\$([a-z_A-Z0-9]+)");
int p=0;
int i,l;
//printf("substEnvVarInString(%s) start\n",s.data());
while ((i=re.match(s,p,&l))!=-1)
{
//printf("Found environment var s.mid(%d,%d)=`%s'\n",i+2,l-3,s.mid(i+2,l-3).data());
const char *env=getenv(s.mid(i+2,l-3));
s = s.left(i)+QCString(env)+s.right(s.length()-i-l);
p=i+l;
}
//printf("substEnvVarInString(%s) end\n",s.data());
}
static void substEnvVarsInStrList(QStrList &sl)
{
char *s = sl.first();
while (s)
{
QCString result(s);
substEnvVarsInString(result);
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result); // insert new item before current item.
sl.next(); // current item is now the old item
int i=sl.at();
sl.remove(); // current item index changes if the last element is removed.
if (sl.at()==i) // not last item
s = sl.current();
else // just removed last item
s = 0;
}
}
void substituteEnvironmentVars()
{
substEnvVarsInString( Config::projectName );
substEnvVarsInString( Config::projectNumber );
substEnvVarsInString( Config::outputDir );
substEnvVarsInString( Config::htmlOutputDir );
substEnvVarsInString( Config::latexOutputDir );
substEnvVarsInString( Config::manOutputDir );
substEnvVarsInString( Config::rtfOutputDir );
substEnvVarsInString( Config::outputLanguage );
substEnvVarsInString( Config::headerFile );
substEnvVarsInString( Config::latexHeaderFile );
substEnvVarsInString( Config::footerFile );
substEnvVarsInString( Config::cgiName );
substEnvVarsInString( Config::cgiURL );
substEnvVarsInString( Config::docURL );
substEnvVarsInString( Config::binAbsPath );
substEnvVarsInString( Config::docAbsPath );
substEnvVarsInString( Config::perlPath );
substEnvVarsInString( Config::genTagFile );
substEnvVarsInString( Config::inputFilter );
substEnvVarsInString( Config::paperType );
substEnvVarsInString( Config::manExtension );
substEnvVarsInString( Config::htmlStyleSheet );
substEnvVarsInStrList( Config::ignorePrefixList );
substEnvVarsInStrList( Config::includePath );
substEnvVarsInStrList( Config::examplePath );
substEnvVarsInStrList( Config::imagePath );
substEnvVarsInStrList( Config::inputSources );
substEnvVarsInStrList( Config::excludeSources );
substEnvVarsInStrList( Config::filePatternList );
substEnvVarsInStrList( Config::excludePatternList );
substEnvVarsInStrList( Config::examplePatternList );
substEnvVarsInStrList( Config::imagePatternList );
substEnvVarsInStrList( Config::tagFileList );
substEnvVarsInStrList( Config::extDocPathList );
substEnvVarsInStrList( Config::predefined );
substEnvVarsInStrList( Config::extraPackageList );
substEnvVarsInStrList( Config::stripFromPath );
substEnvVarsInStrList( Config::sectionFilterList );
}
void checkConfig()
{
//if (!projectName.isEmpty())
//{
// projectName[0]=toupper(projectName[0]);
//}
// set default man page extension if non is given by the user // set default man page extension if non is given by the user
if (Config::manExtension.isEmpty()) if (Config::manExtension.isEmpty())
{ {
......
...@@ -273,8 +273,11 @@ void DotNode::deleteNode() ...@@ -273,8 +273,11 @@ void DotNode::deleteNode()
void DotNode::writeBox(QTextStream &t,bool hasNonReachableChildren) void DotNode::writeBox(QTextStream &t,bool hasNonReachableChildren)
{ {
const char *labCol = (hasNonReachableChildren) ? "red" : const char *labCol =
(m_url.isEmpty() ? "grey" : "black"); m_url.isEmpty() ? "grey" : // non link
(
(hasNonReachableChildren) ? "red" : "black"
);
t << " Node" << m_number << " [shape=\"box\",label=\"" << m_label t << " Node" << m_number << " [shape=\"box\",label=\"" << m_label
<< "\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\""; << "\",fontsize=10,height=0.2,width=0.4,fontname=\"doxfont\"";
t << ",color=\"" << labCol << "\""; t << ",color=\"" << labCol << "\"";
...@@ -528,10 +531,23 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper) ...@@ -528,10 +531,23 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
if (bClass->isVisibleInHierarchy() && hasVisibleRoot(bClass->baseClasses())) if (bClass->isVisibleInHierarchy() && hasVisibleRoot(bClass->baseClasses()))
{ {
DotNode *bn; DotNode *bn;
//printf("Found visible class=`%s'\n",bClass->name().data()); //printf("Node `%s' Found visible class=`%s'\n",n->m_label.data(),
// bClass->name().data());
if ((bn=m_usedNodes->find(bClass->name()))) // node already present if ((bn=m_usedNodes->find(bClass->name()))) // node already present
{ {
if (n->m_children==0 || n->m_children->findRef(bn)==0) // no arrow yet //printf("Base node `%s'\n",bn->m_label.data());
//if (n->m_children)
//{
// QListIterator<DotNode> dnli(*n->m_children);
// DotNode *cn;
// for (dnli.toFirst();(cn=dnli.current());++dnli)
// {
// printf("Child node `%s'\n",cn->m_label.data());
// }
// printf("ref node = %p\n",n->m_children->findRef(bn));
//}
if (n->m_children==0 || n->m_children->findRef(bn)==-1) // no arrow yet
{ {
n->addChild(bn,bcd->prot); n->addChild(bn,bcd->prot);
bn->addParent(n); bn->addParent(n);
...@@ -542,6 +558,10 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper) ...@@ -542,6 +558,10 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
// bn->m_parents ? bn->m_parents->count() : 0 // bn->m_parents ? bn->m_parents->count() : 0
// ); // );
} }
//else
//{
// printf("Class already has an arrow!\n");
//}
} }
else else
{ {
...@@ -598,6 +618,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable() ...@@ -598,6 +618,7 @@ DotGfxHierarchyTable::DotGfxHierarchyTable()
(cd->getReference()+"$"+cd->getOutputFileBase()).data() : (cd->getReference()+"$"+cd->getOutputFileBase()).data() :
0 0
); );
//m_usedNodes->clear(); //m_usedNodes->clear();
m_usedNodes->insert(cd->name(),n); m_usedNodes->insert(cd->name(),n);
m_rootNodes->insert(0,n); m_rootNodes->insert(0,n);
......
...@@ -84,7 +84,7 @@ StringDict excludeNameDict(1009); // sections ...@@ -84,7 +84,7 @@ StringDict excludeNameDict(1009); // sections
FileNameDict includeNameDict(1009); // include names FileNameDict includeNameDict(1009); // include names
FileNameDict exampleNameDict(1009); // examples FileNameDict exampleNameDict(1009); // examples
FileNameDict imageNameDict(257); // images FileNameDict imageNameDict(257); // images
DefineDict defineDict(10007); // all defines //DefineDict defineDict(10007); // all defines
StringDict typedefDict(1009); // all typedefs StringDict typedefDict(1009); // all typedefs
GroupDict groupDict(257); // all groups GroupDict groupDict(257); // all groups
FormulaDict formulaDict(1009); // all formulas FormulaDict formulaDict(1009); // all formulas
...@@ -122,7 +122,7 @@ void clearAll() ...@@ -122,7 +122,7 @@ void clearAll()
includeNameDict.clear(); includeNameDict.clear();
exampleNameDict.clear(); exampleNameDict.clear();
imageNameDict.clear(); imageNameDict.clear();
defineDict.clear(); //defineDict.clear();
typedefDict.clear(); typedefDict.clear();
groupDict.clear(); groupDict.clear();
formulaDict.clear(); formulaDict.clear();
...@@ -475,7 +475,6 @@ static void addMemberToGroups(Entry *root,MemberDef *md) ...@@ -475,7 +475,6 @@ static void addMemberToGroups(Entry *root,MemberDef *md)
} }
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// build a list of all classes mentioned in the documentation // build a list of all classes mentioned in the documentation
// and all classes that have a documentation block before their definition. // and all classes that have a documentation block before their definition.
...@@ -956,7 +955,11 @@ static MemberDef *addVariableToFile(Entry *root,MemberDef::MemberType mtype, ...@@ -956,7 +955,11 @@ static MemberDef *addVariableToFile(Entry *root,MemberDef::MemberType mtype,
NamespaceDef *nd = 0; NamespaceDef *nd = 0;
if (!scope.isEmpty()) if (!scope.isEmpty())
{ {
nd = namespaceDict[scope]; QCString nscope=removeAnnonymousScopes(scope);
if (!nscope.isEmpty())
{
nd = namespaceDict[nscope];
}
} }
if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
{ {
...@@ -3516,7 +3519,7 @@ void generateFileDocs() ...@@ -3516,7 +3519,7 @@ void generateFileDocs()
{ {
fd->writeDocumentation(*outputList); fd->writeDocumentation(*outputList);
} }
if (src && !fd->isReference()) // TODO: can this be TRUE for tag files? if (src && !fd->isReference())
{ {
fd->writeSource(*outputList); fd->writeSource(*outputList);
} }
...@@ -3739,6 +3742,7 @@ void findDefineDocumentation(Entry *root) ...@@ -3739,6 +3742,7 @@ void findDefineDocumentation(Entry *root)
bool ambig; bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
addMemberToGroups(root,md);
} }
md=mn->next(); md=mn->next();
} }
...@@ -3769,6 +3773,7 @@ void findDefineDocumentation(Entry *root) ...@@ -3769,6 +3773,7 @@ void findDefineDocumentation(Entry *root)
bool ambig; bool ambig;
md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig));
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
addMemberToGroups(root,md);
} }
} }
md=mn->next(); md=mn->next();
...@@ -3969,7 +3974,9 @@ void buildExampleList(Entry *root) ...@@ -3969,7 +3974,9 @@ void buildExampleList(Entry *root)
else else
{ {
PageInfo *pi=new PageInfo(root->name,root->doc,root->args); PageInfo *pi=new PageInfo(root->name,root->doc,root->args);
setFileNameForSections(root->anchors,root->name); setFileNameForSections(root->anchors,
convertSlashes(pi->name,TRUE)+"-example"
);
exampleList.inSort(pi); exampleList.inSort(pi);
exampleDict.insert(root->name,pi); exampleDict.insert(root->name,pi);
} }
...@@ -4788,6 +4795,7 @@ int main(int argc,char **argv) ...@@ -4788,6 +4795,7 @@ int main(int argc,char **argv)
} }
parseConfig(config); parseConfig(config);
configStrToVal();
if (updateConfig) if (updateConfig)
{ {
...@@ -4795,6 +4803,7 @@ int main(int argc,char **argv) ...@@ -4795,6 +4803,7 @@ int main(int argc,char **argv)
exit(1); exit(1);
} }
substituteEnvironmentVars();
checkConfig(); checkConfig();
/************************************************************************** /**************************************************************************
......
...@@ -97,7 +97,7 @@ extern MemberNameDict functionNameDict; ...@@ -97,7 +97,7 @@ extern MemberNameDict functionNameDict;
extern StringDict substituteDict; extern StringDict substituteDict;
extern FileList fileList; extern FileList fileList;
extern FileDict fileDict; extern FileDict fileDict;
extern DefineDict defineDict; //extern DefineDict defineDict;
extern ClassDef unrelatedClass; extern ClassDef unrelatedClass;
extern QTextStream tagFile; extern QTextStream tagFile;
extern SectionDict sectionDict; extern SectionDict sectionDict;
......
...@@ -24,7 +24,7 @@ HEADERS = doxygen.h scanner.h classdef.h classlist.h memberdef.h \ ...@@ -24,7 +24,7 @@ HEADERS = doxygen.h scanner.h classdef.h classlist.h memberdef.h \
namespacedef.h version.h language.h translator.h \ namespacedef.h version.h language.h translator.h \
translator_nl.h translator_se.h translator_cz.h translator_fr.h \ translator_nl.h translator_se.h translator_cz.h translator_fr.h \
translator_it.h formula.h debug.h membergroup.h htmlhelp.h \ translator_it.h formula.h debug.h membergroup.h htmlhelp.h \
dot.h rtfgen.h translator_ru.h dot.h rtfgen.h
SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp \ SOURCES = doxygen.cpp scanner.cpp classdef.cpp classlist.cpp memberdef.cpp \
membername.cpp index.cpp memberlist.cpp \ membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \ entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......
...@@ -53,7 +53,7 @@ FileDef::FileDef(const char *p,const char *nm,const char *ref) ...@@ -53,7 +53,7 @@ FileDef::FileDef(const char *p,const char *nm,const char *ref)
srcDefDict = 0; srcDefDict = 0;
srcAnchorDict = 0; srcAnchorDict = 0;
usingList = 0; usingList = 0;
isSource = Config::extractAllFlag; isSource = FALSE; /*Config::extractAllFlag*/;
docname = nm; docname = nm;
if (Config::fullPathNameFlag) if (Config::fullPathNameFlag)
{ {
......
...@@ -139,6 +139,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -139,6 +139,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.startMemberHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trFiles()); parseText(ol,theTranslator->trFiles());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList();
FileDef *fd=fileList->first(); FileDef *fd=fileList->first();
while (fd) while (fd)
{ {
...@@ -156,6 +157,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -156,6 +157,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
} }
fd=fileList->next(); fd=fileList->next();
} }
ol.endMemberList();
} }
if (classList->count()>0) if (classList->count()>0)
{ {
...@@ -168,6 +170,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -168,6 +170,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.startMemberHeader(); ol.startMemberHeader();
parseText(ol,theTranslator->trCompounds()); parseText(ol,theTranslator->trCompounds());
ol.endMemberHeader(); ol.endMemberHeader();
ol.startMemberList();
found=TRUE; found=TRUE;
} }
QCString type; QCString type;
...@@ -193,6 +196,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -193,6 +196,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
} }
cd=classList->next(); cd=classList->next();
} }
if (found) ol.endMemberList();
} }
if (allMemberList->count()>0) if (allMemberList->count()>0)
{ {
......
...@@ -107,7 +107,13 @@ class HtmlGenerator : public OutputGenerator ...@@ -107,7 +107,13 @@ class HtmlGenerator : public OutputGenerator
void writeAnchor(const char *name) void writeAnchor(const char *name)
{ t << "<a name=\"" << name <<"\"></a>"; } { t << "<a name=\"" << name <<"\"></a>"; }
void startCodeFragment() { t << "<div class=\"fragment\"><pre>"; } void startCodeFragment() { t << "<div class=\"fragment\"><pre>"; }
void endCodeFragment() { t << "</div></pre>"; } void endCodeFragment() { t << "</div></pre>"; } // <- I know this is
// ordered the wrong
// way, but it is
// the only way I know
// to prevent an extra
// blank line
// (with netscape)
void startCodeLine() { col=0; } void startCodeLine() { col=0; }
void endCodeLine() { codify("\n"); } void endCodeLine() { codify("\n"); }
void writeBoldString(const char *text) void writeBoldString(const char *text)
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "translator_jp.h" #include "translator_jp.h"
#include "translator_es.h" #include "translator_es.h"
#include "translator_fi.h" #include "translator_fi.h"
#include "translator_ru.h"
#endif #endif
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -74,6 +75,10 @@ bool setTranslator(const char *langName) ...@@ -74,6 +75,10 @@ bool setTranslator(const char *langName)
{ {
theTranslator=new TranslatorFinnish; theTranslator=new TranslatorFinnish;
} }
else if (L_EQUAL("russian"))
{
theTranslator=new TranslatorRussian;
}
#endif #endif
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
...@@ -177,10 +177,10 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -177,10 +177,10 @@ void LatexGenerator::startIndexSection(IndexSections is)
t << "}\n"; t << "}\n";
if (Config::paperType=="a4wide") t << "\\usepackage{a4wide}\n"; if (Config::paperType=="a4wide") t << "\\usepackage{a4wide}\n";
t << "\\usepackage{makeidx}\n" t << "\\usepackage{makeidx}\n"
"\\usepackage{fancyheadings}\n" "\\usepackage{fancyheadings}\n"
"\\usepackage{epsfig}\n" "\\usepackage{epsfig}\n"
"\\usepackage{float}\n" "\\usepackage{float}\n"
"\\usepackage{doxygen}\n"; "\\usepackage{doxygen}\n";
if (Config::pdfHyperFlag) if (Config::pdfHyperFlag)
{ {
t << "\\usepackage{times}" << endl t << "\\usepackage{times}" << endl
...@@ -192,8 +192,13 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -192,8 +192,13 @@ void LatexGenerator::startIndexSection(IndexSections is)
} }
if (!theTranslator->latexBabelPackage().isEmpty()) if (!theTranslator->latexBabelPackage().isEmpty())
{ {
if (theTranslator->latexBabelPackage()=="russian")
{
t << "\\usepackage{inputenc}\n";
}
t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n"; t << "\\usepackage[" << theTranslator->latexBabelPackage() << "]{babel}\n";
} }
const char *s=Config::extraPackageList.first(); const char *s=Config::extraPackageList.first();
while (s) while (s)
{ {
...@@ -619,24 +624,24 @@ void LatexGenerator::writeStyleInfo(int part) ...@@ -619,24 +624,24 @@ void LatexGenerator::writeStyleInfo(int part)
t << "\\setlength{\\parindent}{0cm}\n"; t << "\\setlength{\\parindent}{0cm}\n";
t << "\\setlength{\\parskip}{0.2cm}\n"; t << "\\setlength{\\parskip}{0.2cm}\n";
t << "\\addtocounter{secnumdepth}{1}\n"; t << "\\addtocounter{secnumdepth}{1}\n";
if (!Config::compactLatexFlag) //if (!Config::compactLatexFlag)
{ //{
t << "\\renewcommand{\\subsection}{\\@startsection{subsection}{2}{\\z@}\n"; // t << "\\renewcommand{\\subsection}{\\@startsection{subsection}{2}{\\z@}\n";
t << " {-3.25ex \\@plus -1ex \\@minus -.2ex}\n"; // t << " {-3.25ex \\@plus -1ex \\@minus -.2ex}\n";
t << " {1.5ex \\@plus.2ex}\n"; // t << " {1.5ex \\@plus.2ex}\n";
t << " {\\normalfont\\large\\bfseries\\medskip\n"; // t << " {\\normalfont\\large\\bfseries\\medskip\n";
t << " \\vspace{0.6cm}\\hrule\\vspace{-0.6cm}}\n"; // t << " \\vspace{0.6cm}\\hrule\\vspace{-0.6cm}}\n";
t << " }\n"; // t << " }\n";
} //}
else //else
{ //{
t << "\\renewcommand{\\subsubsection}{\\@startsection{subsubsection}{3}{\\z@}\n"; // t << "\\renewcommand{\\subsubsection}{\\@startsection{subsubsection}{3}{\\z@}\n";
t << " {-3.25ex \\@plus -1ex \\@minus -.2ex}\n"; // t << " {-3.25ex \\@plus -1ex \\@minus -.2ex}\n";
t << " {1.5ex \\@plus.2ex}\n"; // t << " {1.5ex \\@plus.2ex}\n";
t << " {\\normalfont\\normalsize\\bfseries\\medskip\n"; // t << " {\\normalfont\\normalsize\\bfseries\\medskip\n";
t << " \\vspace{0.6cm}\\hrule\\vspace{-0.6cm}}\n"; // t << " \\vspace{0.6cm}\\hrule\\vspace{-0.6cm}}\n";
t << " }\n"; // t << " }\n";
} //}
t << "\\sloppy\n"; t << "\\sloppy\n";
endPlainFile(); endPlainFile();
} }
...@@ -678,19 +683,25 @@ void LatexGenerator::writeIndexItem(const char *ref,const char *fn, ...@@ -678,19 +683,25 @@ void LatexGenerator::writeIndexItem(const char *ref,const char *fn,
void LatexGenerator::writeHtmlLink(const char *url,const char *text) void LatexGenerator::writeHtmlLink(const char *url,const char *text)
{ {
if (Config::pdfHyperFlag)
{
t << "\\href{";
t << url;
t << "}";
}
t << "{\\tt "; t << "{\\tt ";
docify(text); docify(text);
t << "}"; t << "}";
if (url)
{
// t << " {\\tt (";
// docify(url);
// t << ")}";
}
} }
void LatexGenerator::writeMailLink(const char *url) void LatexGenerator::writeMailLink(const char *url)
{ {
if (Config::pdfHyperFlag)
{
t << "\\href{mailto:";
t << url;
t << "}";
}
t << "{\\tt "; t << "{\\tt ";
docify(url); docify(url);
t << "}"; t << "}";
...@@ -817,6 +828,16 @@ void LatexGenerator::endGroupHeader() ...@@ -817,6 +828,16 @@ void LatexGenerator::endGroupHeader()
t << "}" << endl; t << "}" << endl;
} }
void LatexGenerator::startMemberHeader()
{
if (Config::compactLatexFlag) t << "\\subsubsection*{"; else t << "\\subsection*{";
}
void LatexGenerator::endMemberHeader()
{
t << "}" << endl;
}
void LatexGenerator::startMemberDoc(const char *clname, void LatexGenerator::startMemberDoc(const char *clname,
const char *memname, const char *memname,
const char *, const char *,
...@@ -942,6 +963,7 @@ void LatexGenerator::writeSectionRefAnchor(const char *,const char *lab, ...@@ -942,6 +963,7 @@ void LatexGenerator::writeSectionRefAnchor(const char *,const char *lab,
void LatexGenerator::docify(const char *str) void LatexGenerator::docify(const char *str)
{ {
static bool isJapanese = theTranslator->latexBabelPackage()=="a4j"; static bool isJapanese = theTranslator->latexBabelPackage()=="a4j";
static bool isRussian = theTranslator->latexBabelPackage()=="russian";
if (str) if (str)
{ {
const unsigned char *p=(const unsigned char *)str; const unsigned char *p=(const unsigned char *)str;
...@@ -1009,7 +1031,19 @@ void LatexGenerator::docify(const char *str) ...@@ -1009,7 +1031,19 @@ void LatexGenerator::docify(const char *str)
t << (char)c; t << (char)c;
} }
} }
else // language is other than japanese else if (isRussian)
{
if (c>=128)
{
t << (char)c;
}
else
{
if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
t << (char)c;
}
}
else // language is other than russian or japanese
{ {
switch(c) switch(c)
{ {
......
...@@ -85,8 +85,8 @@ class LatexGenerator : public OutputGenerator ...@@ -85,8 +85,8 @@ class LatexGenerator : public OutputGenerator
void startMemberSections() {} void startMemberSections() {}
void endMemberSections() {} void endMemberSections() {}
void startMemberHeader() { startGroupHeader(); } void startMemberHeader();
void endMemberHeader() { endGroupHeader(); } void endMemberHeader();
void startMemberSubtitle() {} void startMemberSubtitle() {}
void endMemberSubtitle() {} void endMemberSubtitle() {}
void startMemberList(); void startMemberList();
......
...@@ -99,11 +99,24 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -99,11 +99,24 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
} }
} }
//printf("~~~ %s cName=%s\n",md->name().data(),cName.data()); //printf("~~~ %s cName=%s\n",md->name().data(),cName.data());
// You can set the next to TRUE to experiment with multiline parameter lists.
// I'll add this in some form in a future release.
bool multiLineArgs = FALSE; /* argList->count()>2; */
while (a) while (a)
{ {
QRegExp re(")("); QRegExp re(")(");
int vp; int vp;
if (!a->attrib.isEmpty()) if (multiLineArgs)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.lineBreak();
ol.writeNonBreakableSpace();
ol.writeNonBreakableSpace();
ol.popGeneratorState();
}
if (!a->attrib.isEmpty()) // argument has an IDL attribute
{ {
ol.docify(a->attrib+" "); ol.docify(a->attrib+" ");
} }
...@@ -149,6 +162,13 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -149,6 +162,13 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
a=argList->next(); a=argList->next();
if (a) ol.docify(", "); // there are more arguments if (a) ol.docify(", "); // there are more arguments
} }
if (multiLineArgs)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.lineBreak();
ol.popGeneratorState();
}
ol.docify(")"); // end argument list ol.docify(")"); // end argument list
if (argList->constSpecifier) if (argList->constSpecifier)
{ {
...@@ -746,7 +766,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -746,7 +766,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
ol.startMemberDescription(); ol.startMemberDescription();
parseDoc(ol,cname,name(),briefDescription()); parseDoc(ol,cname,name(),briefDescription());
if (!documentation().isEmpty()) if (/*!documentation().isEmpty()*/ detailsAreVisible())
{ {
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.endEmphasis(); ol.endEmphasis();
...@@ -1297,7 +1317,8 @@ bool MemberDef::detailsAreVisible() const ...@@ -1297,7 +1317,8 @@ bool MemberDef::detailsAreVisible() const
(!Config::briefMemDescFlag || Config::alwaysDetailsFlag) && (!Config::briefMemDescFlag || Config::alwaysDetailsFlag) &&
Config::repeatBriefFlag // has brief description inside detailed area Config::repeatBriefFlag // has brief description inside detailed area
) || ) ||
(initLines>0 && initLines<maxInitLines) (initLines>0 && initLines<maxInitLines) ||
(argList!=0 && argList->hasDocumentation())
; ;
} }
...@@ -1305,3 +1326,8 @@ void MemberDef::setEnumDecl(OutputList &ed) ...@@ -1305,3 +1326,8 @@ void MemberDef::setEnumDecl(OutputList &ed)
{ {
enumDeclList=new OutputList(&ed); enumDeclList=new OutputList(&ed);
} }
bool MemberDef::hasDocumentation()
{
return Definition::hasDocumentation() || (argList!=0 && argList->hasDocumentation());
}
...@@ -109,9 +109,7 @@ class MemberDef : public Definition ...@@ -109,9 +109,7 @@ class MemberDef : public Definition
void setMemberClass(ClassDef *cd) { classDef=cd; } void setMemberClass(ClassDef *cd) { classDef=cd; }
void makeRelated() { related=TRUE; } void makeRelated() { related=TRUE; }
void setGroupDef(GroupDef *gd) { group=gd; } void setGroupDef(GroupDef *gd) { group=gd; }
bool hasDocumentation() // overrides hasDocumentation in definition.h bool hasDocumentation(); // overrides hasDocumentation in definition.h
{ return Definition::hasDocumentation(); }
bool isLinkableInProject(); bool isLinkableInProject();
bool isLinkable(); bool isLinkable();
...@@ -242,6 +240,7 @@ class MemberDef : public Definition ...@@ -242,6 +240,7 @@ class MemberDef : public Definition
int grpId; // group id int grpId; // group id
QCString grpHeader; // group header QCString grpHeader; // group header
MemberGroup *memberGroup; // group's member definition MemberGroup *memberGroup; // group's member definition
GroupDef *group; // group in which this member is in GroupDef *group; // group in which this member is in
// disable copying of member defs // disable copying of member defs
......
...@@ -38,7 +38,7 @@ int MemberList::compareItems(GCI item1, GCI item2) ...@@ -38,7 +38,7 @@ int MemberList::compareItems(GCI item1, GCI item2)
{ {
MemberDef *c1=(MemberDef *)item1; MemberDef *c1=(MemberDef *)item1;
MemberDef *c2=(MemberDef *)item2; MemberDef *c2=(MemberDef *)item2;
return stricmp(c1->name(),c2->name()); return strcmp(c1->name(),c2->name());
} }
void MemberList::countDecMembers() void MemberList::countDecMembers()
......
...@@ -37,9 +37,9 @@ int MemberName::compareItems(GCI item1, GCI item2) ...@@ -37,9 +37,9 @@ int MemberName::compareItems(GCI item1, GCI item2)
FileDef *f1=m1->getFileDef(); FileDef *f1=m1->getFileDef();
FileDef *f2=m2->getFileDef(); FileDef *f2=m2->getFileDef();
if (c1 && c2) if (c1 && c2)
return stricmp(c1->name(),c2->name()); return strcmp(c1->name(),c2->name());
else if (f1 && f2) else if (f1 && f2)
return stricmp(f1->name(),f2->name()); return strcmp(f1->name(),f2->name());
else else
return 0; return 0;
} }
...@@ -59,9 +59,9 @@ int MemberNameInfo::compareItems(GCI item1, GCI item2) ...@@ -59,9 +59,9 @@ int MemberNameInfo::compareItems(GCI item1, GCI item2)
FileDef *f1=m1->memberDef->getFileDef(); FileDef *f1=m1->memberDef->getFileDef();
FileDef *f2=m2->memberDef->getFileDef(); FileDef *f2=m2->memberDef->getFileDef();
if (c1 && c2) if (c1 && c2)
return stricmp(c1->name(),c2->name()); return strcmp(c1->name(),c2->name());
else if (f1 && f2) else if (f1 && f2)
return stricmp(f1->name(),f2->name()); return strcmp(f1->name(),f2->name());
else else
return 0; return 0;
} }
......
...@@ -92,9 +92,9 @@ class MemberNameInfoList : public QList<MemberNameInfo> ...@@ -92,9 +92,9 @@ class MemberNameInfoList : public QList<MemberNameInfo>
~MemberNameInfoList() {} ~MemberNameInfoList() {}
int compareItems(GCI item1,GCI item2) int compareItems(GCI item1,GCI item2)
{ return stricmp( { return stricmp(
((MemberNameInfo *)item1)->memberName(), ((MemberNameInfo *)item1)->memberName(),
((MemberNameInfo *)item2)->memberName() ((MemberNameInfo *)item2)->memberName()
); );
} }
}; };
......
...@@ -110,6 +110,16 @@ void OutputList::enableAll() ...@@ -110,6 +110,16 @@ void OutputList::enableAll()
} }
} }
void OutputList::disableAll()
{
OutputGenerator *og=outputs->first();
while (og)
{
og->disable();
og=outputs->next();
}
}
void OutputList::disable(OutputGenerator::OutputType o) void OutputList::disable(OutputGenerator::OutputType o)
{ {
OutputGenerator *og=outputs->first(); OutputGenerator *og=outputs->first();
......
...@@ -49,6 +49,7 @@ class OutputList ...@@ -49,6 +49,7 @@ class OutputList
void disableAllBut(OutputGenerator::OutputType o); void disableAllBut(OutputGenerator::OutputType o);
void enableAll(); void enableAll();
void disableAll();
void disable(OutputGenerator::OutputType o); void disable(OutputGenerator::OutputType o);
void enable(OutputGenerator::OutputType o); void enable(OutputGenerator::OutputType o);
bool isEnabled(OutputGenerator::OutputType o); bool isEnabled(OutputGenerator::OutputType o);
......
...@@ -779,8 +779,8 @@ void addDefine() ...@@ -779,8 +779,8 @@ void addDefine()
mn->append(md); mn->append(md);
if (g_yyFileDef) g_yyFileDef->insertMember(md); if (g_yyFileDef) g_yyFileDef->insertMember(md);
Define *d; //Define *d;
if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine()); //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine());
} }
static void outputChar(char c) static void outputChar(char c)
...@@ -1659,7 +1659,7 @@ void initPreprocessor() ...@@ -1659,7 +1659,7 @@ void initPreprocessor()
addSearchDir("."); addSearchDir(".");
//defineNameList.setAutoDelete(TRUE); //defineNameList.setAutoDelete(TRUE);
//defineNameList.clear(); //defineNameList.clear();
defineDict.clear(); //defineDict.clear();
//fileDefineCache = new DefineCache(1009); //fileDefineCache = new DefineCache(1009);
g_expandedDict = new DefineDict(17); g_expandedDict = new DefineDict(17);
g_fileDefineDict = new DefineDict(1009); g_fileDefineDict = new DefineDict(1009);
......
...@@ -151,6 +151,7 @@ static QCString formulaText; ...@@ -151,6 +151,7 @@ static QCString formulaText;
static QCString sectionRef; static QCString sectionRef;
static bool insideIDL = FALSE; static bool insideIDL = FALSE;
static bool insideCppQuote = FALSE; static bool insideCppQuote = FALSE;
static int depthIf;
// state variable for reading the argument list of a function // state variable for reading the argument list of a function
static int argRoundCount; static int argRoundCount;
...@@ -1001,6 +1002,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"") ...@@ -1001,6 +1002,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
%x DocEmphasis %x DocEmphasis
%x DocBold %x DocBold
%x DocCode %x DocCode
%x DocIf
%x DocCodeBlock %x DocCodeBlock
%x DocInternal %x DocInternal
%x DocLink %x DocLink
...@@ -1584,6 +1586,29 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"") ...@@ -1584,6 +1586,29 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>{CMD}"refitem" { <DocScan>{CMD}"refitem" {
BEGIN(DocRefItem); BEGIN(DocRefItem);
} }
<DocScan>{CMD}"if"/{BN} {
outDoc->pushGeneratorState();
depthIf++;
BEGIN(DocIf);
}
<DocScan>{CMD}"endif"/[^a-z_A-Z0-9] {
if (--depthIf<0)
{
warn("Warning: documentation block contains \\endif without "
"matching \\if found in documentation of %s!",refName.data());
}
else
{
outDoc->popGeneratorState();
}
}
<DocIf>[^\n\t ]+ {
if (Config::sectionFilterList.find(yytext)==-1)
{
outDoc->disableAll();
}
BEGIN(DocScan);
}
<DocRefName>{SCOPENAME} { <DocRefName>{SCOPENAME} {
QCString ref=yytext; QCString ref=yytext;
SectionInfo *sec; SectionInfo *sec;
...@@ -4153,7 +4178,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"") ...@@ -4153,7 +4178,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
); );
BEGIN(lastMemberGroupContext); BEGIN(lastMemberGroupContext);
} }
<Doc,PageDoc,JavaDoc,ClassDoc>{CMD}"anchor"{B}+ { <ExampleDoc,Doc,PageDoc,JavaDoc,ClassDoc>{CMD}"anchor"{B}+ {
lastAnchorContext = YY_START; lastAnchorContext = YY_START;
sectionType=SectionInfo::Anchor; sectionType=SectionInfo::Anchor;
BEGIN(AnchorLabel); BEGIN(AnchorLabel);
...@@ -4261,7 +4286,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"") ...@@ -4261,7 +4286,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<ExampleDoc,PageDoc,ClassDoc>[a-z_A-Z0-9 \t]+ { current->doc += yytext; } <ExampleDoc,PageDoc,ClassDoc>[a-z_A-Z0-9 \t]+ { current->doc += yytext; }
<ExampleDoc,PageDoc,ClassDoc>. { current->doc += yytext; } <ExampleDoc,PageDoc,ClassDoc>. { current->doc += yytext; }
<Doc,JavaDoc,LineDoc,ExampleDoc,PageDoc,ClassDoc>^{B}*"//" <Doc,JavaDoc,LineDoc,ExampleDoc,PageDoc,ClassDoc>^{B}*"//"
<Doc,JavaDoc,LineDoc,ExampleDoc,PageDoc,ClassDoc>"//" { current->doc += yytext; } <Doc,ExampleDoc,PageDoc,ClassDoc>"//" { current->doc += yytext; }
<LineDoc,JavaDoc>"//" { current->brief += yytext; }
<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc>("\\\\"|"@@")"f"[$\[\]] { <Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc>("\\\\"|"@@")"f"[$\[\]] {
current->doc += &yytext[1]; current->doc += &yytext[1];
} }
...@@ -4695,6 +4721,7 @@ void parseDocument(OutputList &ol,const QCString &docString) ...@@ -4695,6 +4721,7 @@ void parseDocument(OutputList &ol,const QCString &docString)
{ {
//inParamBlock=inSeeBlock=inReturnBlock=FALSE; //inParamBlock=inSeeBlock=inReturnBlock=FALSE;
curTable = 0; curTable = 0;
depthIf = 0;
outDoc = new OutputList(&ol); outDoc = new OutputList(&ol);
currentIncludeFile.resize(0); currentIncludeFile.resize(0);
includeFileOffset=0; includeFileOffset=0;
...@@ -4732,6 +4759,10 @@ void parseDocument(OutputList &ol,const QCString &docString) ...@@ -4732,6 +4759,10 @@ void parseDocument(OutputList &ol,const QCString &docString)
"of a list (indent level %d)!\n",currentListIndentLevel); "of a list (indent level %d)!\n",currentListIndentLevel);
} }
} }
if (depthIf!=0)
{
warn("Warning: Documentation block contains \\if without matching \\endif: %d\n",depthIf);
}
ol+=*outDoc; ol+=*outDoc;
delete outDoc; outDoc=0; delete outDoc; outDoc=0;
return; return;
......
...@@ -402,7 +402,7 @@ class TranslatorGerman : public Translator ...@@ -402,7 +402,7 @@ class TranslatorGerman : public Translator
QCString trNamespaceList() QCString trNamespaceList()
// used as the title of page containing all the index of all namespaces. // used as the title of page containing all the index of all namespaces.
{ return ""; } { return "Liste der Namensbereiche"; }
QCString trNamespaceListDescription(bool extractAll) QCString trNamespaceListDescription(bool extractAll)
// used as an introduction to the namespace list // used as an introduction to the namespace list
{ {
......
...@@ -845,6 +845,45 @@ static QCString trimBaseClassScope(BaseClassList *bcl,const QCString &s,int leve ...@@ -845,6 +845,45 @@ static QCString trimBaseClassScope(BaseClassList *bcl,const QCString &s,int leve
return s; return s;
} }
/*! if either t1 or t2 contains a namespace scope, then remove that
* scope. If neither or both have a namespace scope, t1 and t2 remain
* unchanged.
*/
static void trimNamespaceScope(QCString &t1,QCString &t2)
{
int p1=t1.length();
int p2=t2.length();
for (;;)
{
int i1=t1.findRev("::",p1);
int i2=t2.findRev("::",p2);
if (i1==-1 && i2==-1)
{
return;
}
if (i1!=-1 && i2==-1) // only t1 has a scope
{
QCString scope=t1.left(i1);
if (!scope.isEmpty() && namespaceDict[scope]!=0) // scope is a namespace
{
t1 = t1.right(t1.length()-i1-2);
return;
}
}
else if (i1==-1 && i2!=-1) // only t2 has a scope
{
QCString scope=t2.left(i2);
if (!scope.isEmpty() && namespaceDict[scope]!=0) // scope is a namespace
{
t2 = t2.right(t2.length()-i2-2);
return;
}
}
p1 = QMAX(i1-2,0);
p2 = QMAX(i2-2,0);
}
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// Matches the arguments list srcAl with the argument list dstAl // Matches the arguments list srcAl with the argument list dstAl
// Returns TRUE if the argument lists are equal. Two argument list are // Returns TRUE if the argument lists are equal. Two argument list are
...@@ -921,6 +960,10 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, ...@@ -921,6 +960,10 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
{ {
//printf("scope=`%s': `%s' <=> `%s'\n",className.data(),srcAType.data(),dstAType.data()); //printf("scope=`%s': `%s' <=> `%s'\n",className.data(),srcAType.data(),dstAType.data());
// remove a namespace scope that is only in one type
// (assuming a using statement was used)
trimNamespaceScope(srcAType,dstAType);
QCString srcScope; QCString srcScope;
QCString dstScope; QCString dstScope;
......
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