Commit 1b90a1cf authored by dimitri's avatar dimitri

Release-1.2.5

parent f676cb79
DOXYGEN Version 1.2.4-20010128 DOXYGEN Version 1.2.5
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (28 January 2001) Dimitri van Heesch (04 February 2001)
DOXYGEN Version 1.2.4-20010128 DOXYGEN Version 1.2.5
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 (28 January 2001) Dimitri van Heesch (04 February 2001)
1.2.4-20010128 1.2.5
...@@ -519,6 +519,31 @@ void configStrToVal() ...@@ -519,6 +519,31 @@ void configStrToVal()
} }
Config::maxDotGraphHeight=height; Config::maxDotGraphHeight=height;
} }
if (maxInitLinesString.isEmpty())
{
Config::maxInitLines=30;
}
else
{
bool ok;
int maxLines =maxInitLinesString.toInt(&ok);
if (!ok)
{
warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n"
"Using the default of 1024 pixels!\n");
maxLines=30;
}
else if (maxLines<0) // clip to lower bound
{
maxLines=0;
}
else if (maxLines>10000) // clip to upper bound
{
maxLines=10000;
}
Config::maxInitLines=maxLines;
}
} }
static void substEnvVarsInString(QCString &s) static void substEnvVarsInString(QCString &s)
......
...@@ -1046,6 +1046,19 @@ void init() ...@@ -1046,6 +1046,19 @@ void init()
"will result in a user defined paragraph with heading \"Side Effects:\". \n" "will result in a user defined paragraph with heading \"Side Effects:\". \n"
"You can put \\n's in the value part of an alias to insert newlines. \n" "You can put \\n's in the value part of an alias to insert newlines. \n"
); );
ConfigInt::add( "maxInitLines",
"MAX_INITIALIZER_LINES",
"30",
"when do we hide values of variable and defines?",
"The MAX_INITIALIZER_LINES tag determines the maximum number of lines \n"
"the initial value of a variable or define consist of for it to appear in \n"
"the documentation. If the initializer consists of more lines than specified \n"
"here it will be hidden. Use a value of 0 to hide initializers completely. \n"
"The appearance of the initializer of individual variables and defines in the \n"
"documentation can be controlled using \\showinitializer or \\hideinitializer \n"
"command in the documentation regardless of this setting. \n",
0,10000
);
ConfigBool::add( "optimizeForCFlag", ConfigBool::add( "optimizeForCFlag",
"OPTIMIZE_OUTPUT_FOR_C", "OPTIMIZE_OUTPUT_FOR_C",
"FALSE", "FALSE",
......
/****************************************************************************** /******************************************************************************
* *
* $Id$ *
* *
* Copyright (C) 1997-2001 by Dimitri van Heesch. * Copyright (C) 1997-2001 by Dimitri van Heesch.
* *
...@@ -63,7 +63,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -63,7 +63,7 @@ followed by the descriptions of the tags grouped by category.
\endhtmlonly \endhtmlonly
\latexonly \latexonly
\footnotesize \footnotesize
\begin{multicols}{3} \begin{multicols}{2}
\begin{CompactList} \begin{CompactList}
\endlatexonly \endlatexonly
<li> \refitem cfg_aliases ALIASES <li> \refitem cfg_aliases ALIASES
...@@ -140,6 +140,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -140,6 +140,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_man_output MAN_OUTPUT <li> \refitem cfg_man_output MAN_OUTPUT
<li> \refitem cfg_max_dot_graph_height MAX_DOT_GRAPH_HEIGHT <li> \refitem cfg_max_dot_graph_height MAX_DOT_GRAPH_HEIGHT
<li> \refitem cfg_max_dot_graph_width MAX_DOT_GRAPH_WIDTH <li> \refitem cfg_max_dot_graph_width MAX_DOT_GRAPH_WIDTH
<li> \refitem cfg_max_initializer_lines MAX_INITIALIZER_LINES
<li> \refitem cfg_optimize_output_for_c OPTIMIZE_OUTPUT_FOR_C <li> \refitem cfg_optimize_output_for_c OPTIMIZE_OUTPUT_FOR_C
<li> \refitem cfg_output_directory OUTPUT_DIRECTORY <li> \refitem cfg_output_directory OUTPUT_DIRECTORY
<li> \refitem cfg_output_language OUTPUT_LANGUAGE <li> \refitem cfg_output_language OUTPUT_LANGUAGE
...@@ -446,6 +447,16 @@ followed by the descriptions of the tags grouped by category. ...@@ -446,6 +447,16 @@ followed by the descriptions of the tags grouped by category.
will result in a user defined paragraph with heading "Side Effects:". will result in a user defined paragraph with heading "Side Effects:".
You can put \\n's in the value part of an alias to insert newlines. You can put \\n's in the value part of an alias to insert newlines.
\anchor cfg_max_initializer_lines
<dt>\c MAX_INITIALIZER_LINES <dd>
\addindex MAX_INITIALIZER_LINES
The \c MAX_INITIALIZER_LINES tag determines the maximum number of lines
that the initial value of a variable or define can be. If the initializer
consists of more lines than specified here it will be hidden. Use a value
of 0 to hide initializers completely. The appearance of the value of
individual variables and defines can be controlled using \ref cmdshowinitializer "\\showinitializer"
or \ref cmdhideinitializer "\hideinitializer" command in the documentation.
\anchor cfg_optimize_output_for_c \anchor cfg_optimize_output_for_c
<dt>\c OPTIMIZE_OUTPUT_FOR_C <dd> <dt>\c OPTIMIZE_OUTPUT_FOR_C <dd>
\addindex OPTIMIZE_OUTPUT_FOR_C \addindex OPTIMIZE_OUTPUT_FOR_C
......
Name: doxygen Name: doxygen
Version: 1.2.4-20010128 Version: 1.2.5
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 1 Release: 1
Source0: doxygen-%{version}.src.tar.gz Source0: doxygen-%{version}.src.tar.gz
......
...@@ -67,7 +67,7 @@ ClassDef::ClassDef( ...@@ -67,7 +67,7 @@ ClassDef::ClassDef(
{ {
//url="href=\""+fileName; //url="href=\""+fileName;
exampleList = new ExampleList; exampleList = new ExampleList;
exampleDict = new ExampleDict(29); exampleDict = new ExampleDict(17);
} }
memListFileName=compoundName+"_"+nameToFile(nm)+"-members"; memListFileName=compoundName+"_"+nameToFile(nm)+"-members";
inherits = new BaseClassList; inherits = new BaseClassList;
...@@ -76,7 +76,7 @@ ClassDef::ClassDef( ...@@ -76,7 +76,7 @@ ClassDef::ClassDef(
inheritedBy->setAutoDelete(TRUE); inheritedBy->setAutoDelete(TRUE);
allMemberNameInfoList = new MemberNameInfoList; allMemberNameInfoList = new MemberNameInfoList;
allMemberNameInfoList->setAutoDelete(TRUE); allMemberNameInfoList->setAutoDelete(TRUE);
allMemberNameInfoDict = new MemberNameInfoDict(1009); allMemberNameInfoDict = new MemberNameInfoDict(257);
visited=FALSE; visited=FALSE;
setReference(lref); setReference(lref);
incInfo=0; incInfo=0;
...@@ -88,7 +88,7 @@ ClassDef::ClassDef( ...@@ -88,7 +88,7 @@ ClassDef::ClassDef(
usesIntfClassDict=0; usesIntfClassDict=0;
memberGroupList = new MemberGroupList; memberGroupList = new MemberGroupList;
memberGroupList->setAutoDelete(TRUE); memberGroupList->setAutoDelete(TRUE);
memberGroupDict = new MemberGroupDict(257); memberGroupDict = new MemberGroupDict(17);
int i=name().findRev("::"); int i=name().findRev("::");
if (i==-1) if (i==-1)
{ {
...@@ -130,12 +130,12 @@ QCString ClassDef::displayName() const ...@@ -130,12 +130,12 @@ QCString ClassDef::displayName() const
} }
// inserts a base class in the inheritance list // inserts a base class in the inheritance list
void ClassDef::insertBaseClass(ClassDef *cd,Protection p, void ClassDef::insertBaseClass(ClassDef *cd,const char *n,Protection p,
Specifier s,const char *t) Specifier s,const char *t)
{ {
//printf("*** insert base class %s into %s\n",cd->name().data(),name().data()); //printf("*** insert base class %s into %s\n",cd->name().data(),name().data());
//inherits->inSort(new BaseClassDef(cd,p,s,t)); //inherits->inSort(new BaseClassDef(cd,p,s,t));
inherits->append(new BaseClassDef(cd,p,s,t)); inherits->append(new BaseClassDef(cd,n,p,s,t));
} }
// inserts a super class in the inherited list // inserts a super class in the inherited list
...@@ -143,7 +143,7 @@ void ClassDef::insertSuperClass(ClassDef *cd,Protection p, ...@@ -143,7 +143,7 @@ void ClassDef::insertSuperClass(ClassDef *cd,Protection p,
Specifier s,const char *t) Specifier s,const char *t)
{ {
//printf("*** insert super class %s into %s\n",cd->name().data(),name().data()); //printf("*** insert super class %s into %s\n",cd->name().data(),name().data());
inheritedBy->inSort(new BaseClassDef(cd,p,s,t)); inheritedBy->inSort(new BaseClassDef(cd,0,p,s,t));
} }
void ClassDef::addMemberListToGroup(MemberList *ml) void ClassDef::addMemberListToGroup(MemberList *ml)
......
...@@ -46,6 +46,10 @@ class QTextStream; ...@@ -46,6 +46,10 @@ class QTextStream;
class PackageDef; class PackageDef;
struct IncludeInfo; struct IncludeInfo;
/*! \brief This class contains all information about a compound.
*
* A compound can be a class, struct, union, interface, or exception
*/
class ClassDef : public Definition class ClassDef : public Definition
{ {
public: public:
...@@ -64,7 +68,7 @@ class ClassDef : public Definition ...@@ -64,7 +68,7 @@ class ClassDef : public Definition
QCString displayName() const; QCString displayName() const;
CompoundType compoundType() const { return compType; } CompoundType compoundType() const { return compType; }
QCString compoundTypeString() const; QCString compoundTypeString() const;
void insertBaseClass(ClassDef *,Protection p,Specifier s,const char *t=0); void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0);
BaseClassList *baseClasses() { return inherits; } BaseClassList *baseClasses() { return inherits; }
void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0); void insertSuperClass(ClassDef *,Protection p,Specifier s,const char *t=0);
BaseClassList *superClasses() { return inheritedBy; } BaseClassList *superClasses() { return inheritedBy; }
...@@ -202,6 +206,8 @@ class ClassDef : public Definition ...@@ -202,6 +206,8 @@ class ClassDef : public Definition
// groups? // groups?
}; };
/*! \brief Class that contains information about a usage relation.
*/
struct UsesClassDef struct UsesClassDef
{ {
UsesClassDef(ClassDef *cd) : classDef(cd) UsesClassDef(ClassDef *cd) : classDef(cd)
...@@ -220,12 +226,22 @@ struct UsesClassDef ...@@ -220,12 +226,22 @@ struct UsesClassDef
accessors->insert(s,(void *)666); accessors->insert(s,(void *)666);
} }
} }
/*! Class definition that this relation uses. */
ClassDef *classDef; ClassDef *classDef;
/*! Dictionary of member variable names that form the edge labels of the
* usage relation.
*/
QDict<void> *accessors; QDict<void> *accessors;
/*! Template arguments used for the base class */
QCString templSpecifiers; QCString templSpecifiers;
bool containment; bool containment;
}; };
/*! \brief Dictionary of usage relations.
*/
class UsesClassDict : public QDict<UsesClassDef> class UsesClassDict : public QDict<UsesClassDef>
{ {
public: public:
...@@ -233,6 +249,8 @@ class UsesClassDict : public QDict<UsesClassDef> ...@@ -233,6 +249,8 @@ class UsesClassDict : public QDict<UsesClassDef>
~UsesClassDict() {} ~UsesClassDict() {}
}; };
/*! \brief Iterator class to iterate over a dictionary of usage relations.
*/
class UsesClassDictIterator : public QDictIterator<UsesClassDef> class UsesClassDictIterator : public QDictIterator<UsesClassDef>
{ {
public: public:
...@@ -241,16 +259,40 @@ class UsesClassDictIterator : public QDictIterator<UsesClassDef> ...@@ -241,16 +259,40 @@ class UsesClassDictIterator : public QDictIterator<UsesClassDef>
~UsesClassDictIterator() {} ~UsesClassDictIterator() {}
}; };
/*! \brief Class that contains information about an inheritance relation.
*/
struct BaseClassDef struct BaseClassDef
{ {
BaseClassDef(ClassDef *cd,Protection p,Specifier v,const char *t) : BaseClassDef(ClassDef *cd,const char *n,Protection p,
classDef(cd), prot(p), virt(v), templSpecifiers(t) {} Specifier v,const char *t) :
classDef(cd), usedName(n), prot(p), virt(v), templSpecifiers(t) {}
/*! Class definition that this relation inherits from. */
ClassDef *classDef; ClassDef *classDef;
Protection prot;
/*! name used in the inheritance list
* (may be a typedef name instead of the class name)
*/
QCString usedName;
/*! Protection level of the inheritance relation:
* Public, Protected, or Private
*/
Protection prot;
/*! Virtualness of the inheritance relation:
* Normal, or Virtual
*/
Specifier virt; Specifier virt;
/*! Template arguments used for the base class */
QCString templSpecifiers; QCString templSpecifiers;
}; };
/*! \brief list of base classes
*
* The classes are alphabetically sorted on name if inSort() is used.
*/
class BaseClassList : public QList<BaseClassDef> class BaseClassList : public QList<BaseClassDef>
{ {
public: public:
...@@ -266,6 +308,8 @@ class BaseClassList : public QList<BaseClassDef> ...@@ -266,6 +308,8 @@ class BaseClassList : public QList<BaseClassDef>
} }
}; };
/*! \brief Iterator for a list of base classes
*/
class BaseClassListIterator : public QListIterator<BaseClassDef> class BaseClassListIterator : public QListIterator<BaseClassDef>
{ {
public: public:
......
...@@ -86,7 +86,7 @@ typedef QList<CodeVarDef> CodeVarList; ...@@ -86,7 +86,7 @@ typedef QList<CodeVarDef> CodeVarList;
*/ */
static OutputDocInterface * g_code; static OutputDocInterface * g_code;
static CodeClassList g_codeClassList; //static CodeClassList g_codeClassList;
static CodeClassDict g_codeClassDict(1009); static CodeClassDict g_codeClassDict(1009);
static CodeVarList g_codeVarList; static CodeVarList g_codeVarList;
static CodeVarList g_codeParmList; static CodeVarList g_codeParmList;
...@@ -909,7 +909,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -909,7 +909,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
pushScope(g_ccd.name); pushScope(g_ccd.name);
//g_classScope=g_ccd.name.copy(); //g_classScope=g_ccd.name.copy();
CodeClassDef *cd=new CodeClassDef(g_ccd); CodeClassDef *cd=new CodeClassDef(g_ccd);
g_codeClassList.append(cd); //g_codeClassList.append(cd);
g_codeClassDict.insert(cd->name,cd); g_codeClassDict.insert(cd->name,cd);
//printf("g_codeClassList.count()=%d\n",g_codeClassList.count()); //printf("g_codeClassList.count()=%d\n",g_codeClassList.count());
} }
...@@ -1555,11 +1555,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1555,11 +1555,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
void initParseCodeContext() void initParseCodeContext()
{ {
g_codeClassList.setAutoDelete(TRUE); g_codeClassDict.setAutoDelete(TRUE);
g_codeVarList.setAutoDelete(TRUE); g_codeVarList.setAutoDelete(TRUE);
g_codeParmList.setAutoDelete(TRUE); g_codeParmList.setAutoDelete(TRUE);
g_codeClassDict.clear(); g_codeClassDict.clear();
g_codeClassList.clear();
g_codeVarList.clear(); g_codeVarList.clear();
g_codeParmList.clear(); g_codeParmList.clear();
g_ccd.bases.clear(); g_ccd.bases.clear();
......
/* This file was generated by configgen on Sat Jan 27 18:27:32 2001 /* This file was generated by configgen on Sat Feb 3 18:53:37 2001
* from config_templ.h * from config_templ.h
* *
* DO NOT EDIT! * DO NOT EDIT!
...@@ -70,6 +70,7 @@ struct Config ...@@ -70,6 +70,7 @@ struct Config
static bool generateTodoList; // do we want a todo list? static bool generateTodoList; // do we want a todo list?
static bool generateTestList; // do we want a test list? static bool generateTestList; // do we want a test list?
static QStrList aliasList; // list of aliases static QStrList aliasList; // list of aliases
static int maxInitLines; // when do we hide values of variable and defines?
static bool optimizeForCFlag; // do we parse C code? static bool optimizeForCFlag; // do we parse C code?
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
......
/* This file was generated by configgen on Sat Jan 27 18:27:33 2001 /* This file was generated by configgen on Sat Feb 3 18:53:38 2001
* from config_templ.l * from config_templ.l
* *
* DO NOT EDIT! * DO NOT EDIT!
...@@ -107,6 +107,7 @@ QStrList Config::sectionFilterList; ...@@ -107,6 +107,7 @@ QStrList Config::sectionFilterList;
bool Config::generateTodoList = TRUE; bool Config::generateTodoList = TRUE;
bool Config::generateTestList = TRUE; bool Config::generateTestList = TRUE;
QStrList Config::aliasList; QStrList Config::aliasList;
int Config::maxInitLines = 30;
bool Config::optimizeForCFlag = FALSE; bool Config::optimizeForCFlag = FALSE;
bool Config::quietFlag = FALSE; bool Config::quietFlag = FALSE;
bool Config::warningFlag = TRUE; bool Config::warningFlag = TRUE;
...@@ -214,6 +215,7 @@ static QStack<ConfigFileState> includeStack; ...@@ -214,6 +215,7 @@ static QStack<ConfigFileState> includeStack;
static int includeDepth; static int includeDepth;
static QCString tabSizeString; static QCString tabSizeString;
static QCString maxInitLinesString;
static QCString colsInAlphaIndexString; static QCString colsInAlphaIndexString;
static QCString enumValuesPerLineString; static QCString enumValuesPerLineString;
static QCString treeViewWidthString; static QCString treeViewWidthString;
...@@ -379,6 +381,7 @@ static void readIncludeFile(const char *incName) ...@@ -379,6 +381,7 @@ static void readIncludeFile(const char *incName)
<Start>"GENERATE_TESTLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTestList; } <Start>"GENERATE_TESTLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTestList; }
<Start>"ALIASES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::aliasList; l->clear(); elemStr=""; } <Start>"ALIASES"[ \t]*"=" { BEGIN(GetStrList); l=&Config::aliasList; l->clear(); elemStr=""; }
<Start>"ALIASES"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::aliasList; elemStr=""; } <Start>"ALIASES"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::aliasList; elemStr=""; }
<Start>"MAX_INITIALIZER_LINES"[ \t]*"=" { BEGIN(GetString); s=&maxInitLinesString; s->resize(0); }
<Start>"OPTIMIZE_OUTPUT_FOR_C"[ \t]*"=" { BEGIN(GetBool); b=&Config::optimizeForCFlag; } <Start>"OPTIMIZE_OUTPUT_FOR_C"[ \t]*"=" { BEGIN(GetBool); b=&Config::optimizeForCFlag; }
<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; }
...@@ -628,6 +631,7 @@ void dumpConfig() ...@@ -628,6 +631,7 @@ void dumpConfig()
is=Config::aliasList.next(); is=Config::aliasList.next();
} }
} }
printf("maxInitLines=`%d'\n",Config::maxInitLines);
printf("optimizeForCFlag=`%d'\n",Config::optimizeForCFlag); printf("optimizeForCFlag=`%d'\n",Config::optimizeForCFlag);
printf("# configuration options related to warning and progress messages\n"); printf("# configuration options related to warning and progress messages\n");
printf("quietFlag=`%d'\n",Config::quietFlag); printf("quietFlag=`%d'\n",Config::quietFlag);
...@@ -857,6 +861,7 @@ void Config::init() ...@@ -857,6 +861,7 @@ void Config::init()
Config::generateTodoList = TRUE; Config::generateTodoList = TRUE;
Config::generateTestList = TRUE; Config::generateTestList = TRUE;
Config::aliasList.clear(); Config::aliasList.clear();
Config::maxInitLines = 30;
Config::optimizeForCFlag = FALSE; Config::optimizeForCFlag = FALSE;
Config::quietFlag = FALSE; Config::quietFlag = FALSE;
Config::warningFlag = TRUE; Config::warningFlag = TRUE;
...@@ -1382,6 +1387,21 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1382,6 +1387,21 @@ void writeTemplateConfig(QFile *f,bool sl)
writeStringList(t,Config::aliasList); writeStringList(t,Config::aliasList);
t << "\n"; t << "\n";
if (!sl) if (!sl)
{
t << "\n";
t << "# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \n";
t << "# the initial value of a variable or define consist of for it to appear in \n";
t << "# the documentation. If the initializer consists of more lines than specified \n";
t << "# here it will be hidden. Use a value of 0 to hide initializers completely. \n";
t << "# The appearance of the initializer of individual variables and defines in the \n";
t << "# documentation can be controlled using \\showinitializer or \\hideinitializer \n";
t << "# command in the documentation regardless of this setting. \n";
t << "\n";
}
t << "MAX_INITIALIZER_LINES = ";
writeIntValue(t,Config::maxInitLines);
t << "\n";
if (!sl)
{ {
t << "\n"; t << "\n";
t << "# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources \n"; t << "# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources \n";
...@@ -2430,6 +2450,31 @@ void configStrToVal() ...@@ -2430,6 +2450,31 @@ void configStrToVal()
} }
Config::maxDotGraphHeight=height; Config::maxDotGraphHeight=height;
} }
if (maxInitLinesString.isEmpty())
{
Config::maxInitLines=30;
}
else
{
bool ok;
int maxLines =maxInitLinesString.toInt(&ok);
if (!ok)
{
warn_cont("Warning: argument of MAX_DOT_GRAPH_WIDTH is not a valid number in the range [100..30000]!\n"
"Using the default of 1024 pixels!\n");
maxLines=30;
}
else if (maxLines<0) // clip to lower bound
{
maxLines=0;
}
else if (maxLines>10000) // clip to upper bound
{
maxLines=10000;
}
Config::maxInitLines=maxLines;
}
} }
static void substEnvVarsInString(QCString &s) static void substEnvVarsInString(QCString &s)
......
...@@ -782,16 +782,24 @@ DotGfxHierarchyTable::~DotGfxHierarchyTable() ...@@ -782,16 +782,24 @@ DotGfxHierarchyTable::~DotGfxHierarchyTable()
int DotClassGraph::m_curNodeNumber; int DotClassGraph::m_curNodeNumber;
void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot, void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot,
const char *label,int distance,const char *templSpec,bool base) const char *label,int distance,const char *usedName,const char *templSpec,bool base)
{ {
//printf(":: DoxGfxUsageGraph::addClass(class=%s,parent=%s,prot=%d,label=%s,dist=%d)\n", //printf(":: DoxGfxUsageGraph::addClass(class=%s,parent=%s,prot=%d,label=%s,dist=%d)\n",
// cd->name().data(),n->m_label.data(),prot,label,distance); // cd->name().data(),n->m_label.data(),prot,label,distance);
int edgeStyle = label ? EdgeInfo::Dashed : EdgeInfo::Solid; int edgeStyle = label ? EdgeInfo::Dashed : EdgeInfo::Solid;
QCString className; QCString className;
if (templSpec) if (usedName) // name is a typedef
{
className=usedName;
}
else if (templSpec) // name has a template part
{
className=insertTemplateSpecifierInScope(cd->name(),templSpec); className=insertTemplateSpecifierInScope(cd->name(),templSpec);
else }
className=cd->name().copy(); else // just a normal name
{
className=cd->name();
}
DotNode *bn = m_usedNodes->find(className); DotNode *bn = m_usedNodes->find(className);
if (bn) // class already inserted if (bn) // class already inserted
{ {
...@@ -810,7 +818,7 @@ void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot, ...@@ -810,7 +818,7 @@ void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot,
} }
else // new class else // new class
{ {
QCString displayName=className.copy(); QCString displayName=className;
if (Config::hideScopeNames) displayName=stripScope(displayName); if (Config::hideScopeNames) displayName=stripScope(displayName);
QCString tmp_url; QCString tmp_url;
if (cd->isLinkable()) tmp_url=cd->getReference()+"$"+cd->getOutputFileBase(); if (cd->isLinkable()) tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
...@@ -846,7 +854,7 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base) ...@@ -846,7 +854,7 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base)
// cd->name().data(),bcd->templSpecifiers.data()); // cd->name().data(),bcd->templSpecifiers.data());
QCString templSpec; QCString templSpec;
if (base) templSpec = bcd->templSpecifiers; if (base) templSpec = bcd->templSpecifiers;
addClass(bcd->classDef,n,bcd->prot,0,distance,templSpec,base); addClass(bcd->classDef,n,bcd->prot,0,distance,bcd->usedName,templSpec,base);
} }
if (m_graphType != Inheritance) if (m_graphType != Inheritance)
{ {
...@@ -876,7 +884,7 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base) ...@@ -876,7 +884,7 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,int distance,bool base)
} }
} }
//printf("Found label=`%s'\n",label.data()); //printf("Found label=`%s'\n",label.data());
addClass(ucd->classDef,n,EdgeInfo::Black,label,distance,ucd->templSpecifiers,base); addClass(ucd->classDef,n,EdgeInfo::Black,label,distance,0,ucd->templSpecifiers,base);
} }
} }
} }
......
...@@ -126,7 +126,8 @@ class DotClassGraph ...@@ -126,7 +126,8 @@ class DotClassGraph
private: private:
void buildGraph(ClassDef *cd,DotNode *n,int level,bool base); void buildGraph(ClassDef *cd,DotNode *n,int level,bool base);
void addClass(ClassDef *cd,DotNode *n,int prot,const char *label, void addClass(ClassDef *cd,DotNode *n,int prot,const char *label,
int level,const char *templSpec,bool base); int level,const char *usedName,const char *templSpec,
bool base);
DotNode *m_startNode; DotNode *m_startNode;
QDict<DotNode> *m_usedNodes; QDict<DotNode> *m_usedNodes;
static int m_curNodeNumber; static int m_curNodeNumber;
......
...@@ -2183,7 +2183,8 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2183,7 +2183,8 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
{ {
baseClassName.prepend(scopeName.left(scopeOffset)+"::"); baseClassName.prepend(scopeName.left(scopeOffset)+"::");
} }
ClassDef *baseClass=getResolvedClass(baseClassName); bool baseClassIsTypeDef;
ClassDef *baseClass=getResolvedClass(baseClassName,&baseClassIsTypeDef);
//printf("baseClassName=`%s' baseClass=%p\n",baseClassName.data(),baseClass); //printf("baseClassName=`%s' baseClass=%p\n",baseClassName.data(),baseClass);
if (baseClassName!=root->name) // check for base class with the same name, if (baseClassName!=root->name) // check for base class with the same name,
// look in the outer scope for a match // look in the outer scope for a match
...@@ -2333,7 +2334,9 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2333,7 +2334,9 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
{ {
Debug::print(Debug::Classes,0," Documented base class `%s'\n",bi->name.data()); Debug::print(Debug::Classes,0," Documented base class `%s'\n",bi->name.data());
// add base class to this class // add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec); QCString usedName;
if (baseClassIsTypeDef) usedName=bi->name;
cd->insertBaseClass(baseClass,usedName,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class // add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec); baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec);
return TRUE; return TRUE;
...@@ -2347,7 +2350,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd, ...@@ -2347,7 +2350,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
baseClass=new ClassDef(root->fileName,root->startLine, baseClass=new ClassDef(root->fileName,root->startLine,
baseClassName,ClassDef::Class); baseClassName,ClassDef::Class);
// add base class to this class // add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec); cd->insertBaseClass(baseClass,bi->name,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class // add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec); baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec);
// the undocumented base was found in this file // the undocumented base was found in this file
...@@ -2544,9 +2547,12 @@ static void addTodoTestReferences() ...@@ -2544,9 +2547,12 @@ static void addTodoTestReferences()
if (d) scopeName=d->name(); if (d) scopeName=d->name();
if (d==0) d=md->getFileDef(); if (d==0) d=md->getFileDef();
if (d==0) d=md->getGroupDef(); if (d==0) d=md->getGroupDef();
// TODO: i18n this
QCString memLabel="member";
if (Config::optimizeForCFlag) memLabel="field";
if (d) if (d)
{ {
addRefItem(md->todoId(),md->testId(),"member",d->getOutputFileBase()+":"+md->anchor(),scopeName+"::"+md->name(),md->argsString()); addRefItem(md->todoId(),md->testId(),memLabel,d->getOutputFileBase()+":"+md->anchor(),scopeName+"::"+md->name(),md->argsString());
} }
} }
} }
...@@ -2562,9 +2568,12 @@ static void addTodoTestReferences() ...@@ -2562,9 +2568,12 @@ static void addTodoTestReferences()
if (d) scopeName=d->name(); if (d) scopeName=d->name();
if (d==0) d=md->getBodyDef(); if (d==0) d=md->getBodyDef();
if (d==0) d=md->getGroupDef(); if (d==0) d=md->getGroupDef();
// TODO: i18n this
QCString memLabel="member";
if (Config::optimizeForCFlag) memLabel="global";
if (d) if (d)
{ {
addRefItem(md->todoId(),md->testId(),"member",d->getOutputFileBase()+":"+md->anchor(),scopeName+"::"+md->name(),md->argsString()); addRefItem(md->todoId(),md->testId(),memLabel,d->getOutputFileBase()+":"+md->anchor(),md->name(),md->argsString());
} }
} }
} }
...@@ -4278,7 +4287,7 @@ static void generateFileSources() ...@@ -4278,7 +4287,7 @@ static void generateFileSources()
{ {
if (fd->generateSourceFile()) if (fd->generateSourceFile())
{ {
msg("Generating code for file %s...\n",fd->name().data()); msg("Generating code for file %s...\n",fd->docName().data());
fd->writeSource(*outputList); fd->writeSource(*outputList);
} }
} }
...@@ -4305,10 +4314,9 @@ static void generateFileDocs() ...@@ -4305,10 +4314,9 @@ static void generateFileDocs()
bool doc = fd->isLinkableInProject(); bool doc = fd->isLinkableInProject();
if (doc) if (doc)
{ {
msg("Generating docs for file %s...\n",fd->name().data()); msg("Generating docs for file %s...\n",fd->docName().data());
fd->writeDocumentation(*outputList); fd->writeDocumentation(*outputList);
} }
} }
} }
} }
...@@ -4607,6 +4615,7 @@ static void findDefineDocumentation(Entry *root) ...@@ -4607,6 +4615,7 @@ static void findDefineDocumentation(Entry *root)
md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
md->setMaxInitLines(root->initLines); md->setMaxInitLines(root->initLines);
md->setRefItems(root->todoId,root->testId);
if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId); if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId);
addMemberToGroups(root,md); addMemberToGroups(root,md);
} }
...@@ -4639,6 +4648,7 @@ static void findDefineDocumentation(Entry *root) ...@@ -4639,6 +4648,7 @@ static void findDefineDocumentation(Entry *root)
bool ambig; bool ambig;
md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig)); md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
md->setRefItems(root->todoId,root->testId);
if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId); if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId);
addMemberToGroups(root,md); addMemberToGroups(root,md);
} }
......
...@@ -46,7 +46,6 @@ static const char *defaultStyleSheet = ...@@ -46,7 +46,6 @@ static const char *defaultStyleSheet =
"A.codeRef { font-weight: normal; color: #4444ee }\n" "A.codeRef { font-weight: normal; color: #4444ee }\n"
"DL.el { margin-left: -1cm }\n" "DL.el { margin-left: -1cm }\n"
"DIV.fragment { width: 100%; border: none; background-color: #eeeeee }\n" "DIV.fragment { width: 100%; border: none; background-color: #eeeeee }\n"
//"DIV.in { margin-left: 16 }\n"
"DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }\n" "DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }\n"
"TD.md { background-color: #f2f2ff }\n" "TD.md { background-color: #f2f2ff }\n"
"DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }\n" "DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }\n"
...@@ -59,17 +58,18 @@ static const char *defaultStyleSheet = ...@@ -59,17 +58,18 @@ static const char *defaultStyleSheet =
"FONT.stringliteral { color: #002080 }\n" "FONT.stringliteral { color: #002080 }\n"
"FONT.charliteral { color: #008080 }\n"; "FONT.charliteral { color: #008080 }\n";
static QCString g_header;
static QCString g_footer;
HtmlGenerator::HtmlGenerator() : OutputGenerator() HtmlGenerator::HtmlGenerator() : OutputGenerator()
{ {
if (!Config::headerFile.isEmpty()) header=fileToString(Config::headerFile);
if (!Config::footerFile.isEmpty()) footer=fileToString(Config::footerFile);
dir=Config::htmlOutputDir; dir=Config::htmlOutputDir;
col=0; col=0;
} }
HtmlGenerator::~HtmlGenerator() HtmlGenerator::~HtmlGenerator()
{ {
//printf("HtmlGenerator::~HtmlGenerator()\n");
} }
void HtmlGenerator::append(const OutputGenerator *g) void HtmlGenerator::append(const OutputGenerator *g)
...@@ -87,7 +87,8 @@ void HtmlGenerator::init() ...@@ -87,7 +87,8 @@ void HtmlGenerator::init()
exit(1); exit(1);
} }
writeLogo(Config::htmlOutputDir); writeLogo(Config::htmlOutputDir);
//writeNullImage(Config::htmlOutputDir); if (!Config::headerFile.isEmpty()) g_header=fileToString(Config::headerFile);
if (!Config::footerFile.isEmpty()) g_footer=fileToString(Config::footerFile);
} }
void HtmlGenerator::writeStyleSheetFile(QFile &file) void HtmlGenerator::writeStyleSheetFile(QFile &file)
...@@ -139,7 +140,7 @@ void HtmlGenerator::writeFooterFile(QFile &file) ...@@ -139,7 +140,7 @@ void HtmlGenerator::writeFooterFile(QFile &file)
QTextStream t(&file); QTextStream t(&file);
t << "<hr><address><small>\n"; t << "<hr><address><small>\n";
t << "Generated at $datetime for $projectname "; t << "Generated at $datetime for $projectname ";
t << " by <a href=\"http://www.stack.nl/~dimitri/doxygen/index.html\">\n" t << " by <a href=\"http://www.doxygen.org/index.html\">\n"
<< "<img src=\"doxygen.gif\" alt=\"doxygen\" " << "<img src=\"doxygen.gif\" alt=\"doxygen\" "
<< "align=\"middle\" border=0 width=110 height=53>\n" << "align=\"middle\" border=0 width=110 height=53>\n"
<< "</a> $doxygenversion written by" << "</a> $doxygenversion written by"
...@@ -162,13 +163,13 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external) ...@@ -162,13 +163,13 @@ void HtmlGenerator::startFile(const char *name,const char *title,bool external)
} }
lastFile = fileName; lastFile = fileName;
if (header.isEmpty()) if (g_header.isEmpty())
{ {
writeDefaultHeaderFile(t,title,external); writeDefaultHeaderFile(t,title,external);
} }
else else
{ {
t << substituteKeywords(header,lastTitle); t << substituteKeywords(g_header,lastTitle);
} }
t << "<!-- Generated by Doxygen " << versionString << " on " t << "<!-- Generated by Doxygen " << versionString << " on "
<< dateToString(TRUE) << " -->" << endl; << dateToString(TRUE) << " -->" << endl;
...@@ -208,15 +209,15 @@ void HtmlGenerator::writeFooter(int part,bool external) ...@@ -208,15 +209,15 @@ void HtmlGenerator::writeFooter(int part,bool external)
switch (part) switch (part)
{ {
case 0: case 0:
if (footer.isEmpty()) if (g_footer.isEmpty())
t << "<hr><address><small>"; t << "<hr><address><small>";
else else
t << substituteKeywords(footer,lastTitle); t << substituteKeywords(g_footer,lastTitle);
break; break;
case 1: case 1:
if (footer.isEmpty()) if (g_footer.isEmpty())
{ {
t << endl << "<a href=\"http://www.stack.nl/~dimitri/doxygen/index.html\">"; t << endl << "<a href=\"http://www.doxygen.org/index.html\">";
t << endl << "<img "; t << endl << "<img ";
if (external) if (external)
{ {
...@@ -233,7 +234,7 @@ void HtmlGenerator::writeFooter(int part,bool external) ...@@ -233,7 +234,7 @@ void HtmlGenerator::writeFooter(int part,bool external)
} }
break; break;
default: default:
if (footer.isEmpty()) if (g_footer.isEmpty())
t << " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n &copy;&nbsp;" t << " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n &copy;&nbsp;"
"1997-2001</small></address>\n</body>\n</html>\n"; "1997-2001</small></address>\n</body>\n</html>\n";
break; break;
...@@ -987,6 +988,7 @@ void HtmlGenerator::startIndent() ...@@ -987,6 +988,7 @@ void HtmlGenerator::startIndent()
" </td>\n" " </td>\n"
" <td>\n"; " <td>\n";
} }
void HtmlGenerator::endIndent() void HtmlGenerator::endIndent()
{ {
t << " </td>\n" t << " </td>\n"
...@@ -994,3 +996,7 @@ void HtmlGenerator::endIndent() ...@@ -994,3 +996,7 @@ void HtmlGenerator::endIndent()
"</table>\n"; "</table>\n";
//t << "</div>" << endl; //t << "</div>" << endl;
} }
void HtmlGenerator::addIndexItem(const char *,const char *)
{
}
...@@ -27,7 +27,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -27,7 +27,7 @@ class HtmlGenerator : public OutputGenerator
{ {
public: public:
HtmlGenerator(); HtmlGenerator();
~HtmlGenerator(); virtual ~HtmlGenerator();
static void init(); static void init();
static void writeStyleSheetFile(QFile &f); static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f); static void writeHeaderFile(QFile &f);
...@@ -187,7 +187,7 @@ class HtmlGenerator : public OutputGenerator ...@@ -187,7 +187,7 @@ class HtmlGenerator : public OutputGenerator
void writeSectionRef(const char *,const char *,const char *,const char *); void writeSectionRef(const char *,const char *,const char *,const char *);
void writeSectionRefItem(const char *,const char *,const char *); void writeSectionRefItem(const char *,const char *,const char *);
//void writeSectionRefAnchor(const char *,const char *,const char *); //void writeSectionRefAnchor(const char *,const char *,const char *);
void addIndexItem(const char *,const char *) {} void addIndexItem(const char *,const char *);
void startIndent(); void startIndent();
void endIndent(); void endIndent();
void writeSynopsis() {} void writeSynopsis() {}
...@@ -239,8 +239,6 @@ class HtmlGenerator : public OutputGenerator ...@@ -239,8 +239,6 @@ class HtmlGenerator : public OutputGenerator
void endFontClass() { t << "</font>"; } void endFontClass() { t << "</font>"; }
private: private:
QCString header;
QCString footer;
QCString lastTitle; QCString lastTitle;
QCString lastFile; QCString lastFile;
......
...@@ -306,6 +306,8 @@ void HtmlHelp::createProjectFile() ...@@ -306,6 +306,8 @@ void HtmlHelp::createProjectFile()
"Default Window=main\n" "Default Window=main\n"
"Default topic=" << indexName << "\n" "Default topic=" << indexName << "\n"
"Index file=index.hhk\n" "Index file=index.hhk\n"
"Binary TOC=YES\n"
"Create CHI file=YES\n"
"Title=" << Config::projectName << endl << endl; "Title=" << Config::projectName << endl << endl;
t << "[WINDOWS]" << endl; t << "[WINDOWS]" << endl;
......
...@@ -279,7 +279,8 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -279,7 +279,8 @@ MemberDef::MemberDef(const char *df,int dl,
indDepth=0; indDepth=0;
section=0; section=0;
explExt=FALSE; explExt=FALSE;
maxInitLines=defMaxInitLines; maxInitLines=Config::maxInitLines;
userInitLines=-1;
docEnumValues=FALSE; docEnumValues=FALSE;
// copy function template arguments (if any) // copy function template arguments (if any)
if (tal) if (tal)
...@@ -793,7 +794,9 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -793,7 +794,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace()); linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace());
} }
else if (!init.isEmpty() && initLines==0 && maxInitLines>0) // add initializer else if (!init.isEmpty() && initLines==0 && // one line initializer
((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
) // add initializer
{ {
if (!isDefine()) if (!isDefine())
{ {
...@@ -1004,7 +1007,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1004,7 +1007,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.startMemberDocName(); ol.startMemberDocName();
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef); linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef);
writeDefArgumentList(ol,cd,scopeName,this); writeDefArgumentList(ol,cd,scopeName,this);
if (!init.isEmpty() && initLines==0 && maxInitLines>0) // add initializer if (!init.isEmpty() && initLines==0 && // one line initializer
((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
) // add initializer
{ {
if (!isDefine()) if (!isDefine())
{ {
...@@ -1081,10 +1086,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1081,10 +1086,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.popGeneratorState(); ol.popGeneratorState();
/* write multi-line initializer (if any) */ /* write multi-line initializer (if any) */
if (initLines>0 && initLines<maxInitLines) if (initLines>0 && ((initLines<maxInitLines && userInitLines==-1) // implicitly enabled
|| initLines<userInitLines // explicitly enabled
)
)
{ {
ol.startBold(); ol.startBold();
parseText(ol,theTranslator->trInitialValue()); if (mtype==Define)
parseText(ol,theTranslator->trDefineValue());
else
parseText(ol,theTranslator->trInitialValue());
ol.endBold(); ol.endBold();
initParseCodeContext(); initParseCodeContext();
ol.startCodeFragment(); ol.startCodeFragment();
......
...@@ -62,12 +62,6 @@ class MemberDef : public Definition ...@@ -62,12 +62,6 @@ class MemberDef : public Definition
Property Property
}; };
enum
{
defMaxInitLines = 30 // default maximum number of lines shown for member
// initializer
};
MemberDef(const char *defFileName,int defLine, MemberDef(const char *defFileName,int defLine,
const char *type,const char *name,const char *args, const char *type,const char *name,const char *args,
const char *excp,Protection prot,Specifier virt,bool stat, const char *excp,Protection prot,Specifier virt,bool stat,
...@@ -135,11 +129,11 @@ class MemberDef : public Definition ...@@ -135,11 +129,11 @@ class MemberDef : public Definition
void setMemberSpecifiers(int s) { memSpec=s; } void setMemberSpecifiers(int s) { memSpec=s; }
void mergeMemberSpecifiers(int s) { memSpec|=s; } void mergeMemberSpecifiers(int s) { memSpec|=s; }
void setInitializer(const char *i) { init=i; void setInitializer(const char *i) { init=i;
init=init.stripWhiteSpace(); //init=init.stripWhiteSpace();
initLines=init.contains('\n'); initLines=init.contains('\n');
} }
void setBitfields(const char *s) { bitfields = s; } void setBitfields(const char *s) { bitfields = s; }
void setMaxInitLines(int lines) { if (lines!=-1) maxInitLines=lines; } void setMaxInitLines(int lines) { userInitLines=lines; }
void setMemberClass(ClassDef *cd) { classDef=cd; } void setMemberClass(ClassDef *cd) { classDef=cd; }
void setSectionList(MemberList *sl) { section=sl; } void setSectionList(MemberList *sl) { section=sl; }
void setGroupDef(GroupDef *gd) { group=gd; } void setGroupDef(GroupDef *gd) { group=gd; }
...@@ -261,6 +255,7 @@ class MemberDef : public Definition ...@@ -261,6 +255,7 @@ class MemberDef : public Definition
bool annShown; bool annShown;
int indDepth; // indentation depth for this member if inside an annonymous scope int indDepth; // indentation depth for this member if inside an annonymous scope
int maxInitLines; // when the initializer will be displayed int maxInitLines; // when the initializer will be displayed
int userInitLines; // result of explicit \hideinitializer or \showinitializer
MemberList *section; // declation list containing this member MemberList *section; // declation list containing this member
MemberDef *annMemb; MemberDef *annMemb;
ArgumentList *argList; // argument list of this member ArgumentList *argList; // argument list of this member
......
...@@ -94,5 +94,6 @@ void OutputGenerator::popGeneratorState() ...@@ -94,5 +94,6 @@ void OutputGenerator::popGeneratorState()
ASSERT(lb!=0); ASSERT(lb!=0);
if (lb==0) return; // for some robustness against superfluous \endhtmlonly commands. if (lb==0) return; // for some robustness against superfluous \endhtmlonly commands.
if (*lb) enable(); else disable(); if (*lb) enable(); else disable();
delete lb;
} }
...@@ -378,6 +378,8 @@ class OutputGenerator : public BaseOutputDocInterface ...@@ -378,6 +378,8 @@ class OutputGenerator : public BaseOutputDocInterface
class OutputDocInterface : public BaseOutputDocInterface class OutputDocInterface : public BaseOutputDocInterface
{ {
public: public:
virtual ~OutputDocInterface() {}
/*! Create a new output generator. This can later by appended /*! Create a new output generator. This can later by appended
* to the current one using append(). * to the current one using append().
*/ */
......
...@@ -54,6 +54,7 @@ OutputList::OutputList(const OutputList *olist) ...@@ -54,6 +54,7 @@ OutputList::OutputList(const OutputList *olist)
OutputList::~OutputList() OutputList::~OutputList()
{ {
//printf("OutputList::~OutputList()\n");
delete outputs; delete outputs;
} }
......
...@@ -821,6 +821,21 @@ void addDefine() ...@@ -821,6 +821,21 @@ void addDefine()
md->setArgumentList(argList); md->setArgumentList(argList);
} }
//printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data()); //printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data());
int l=g_defLitText.find('\n');
if (l>0 && g_defLitText.left(l).stripWhiteSpace()=="\\")
{
// strip first line if it only contains a slash
g_defLitText = g_defLitText.right(g_defLitText.length()-l-1);
}
else if (l>0)
{
// align the items on the first line with the items on the second line
int k=l+1;
const char *p=g_defLitText.data()+k;
char c;
while ((c=*p++) && (c==' ' || c=='\t')) k++;
g_defLitText=g_defLitText.mid(l+1,k-l-1)+g_defLitText.stripWhiteSpace();
}
md->setInitializer(g_defLitText); md->setInitializer(g_defLitText);
//md->setDefFile(g_yyFileName); //md->setDefFile(g_yyFileName);
......
...@@ -358,7 +358,7 @@ static int yyread(char *buf,int max_size) ...@@ -358,7 +358,7 @@ static int yyread(char *buf,int max_size)
%} %}
CMD ("\\"|"@") CMD ("\\"|"@")
SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"ingroup"|"latexonly"|"htmlonly"|"{") SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"ingroup"|"latexonly"|"htmlonly"|"{"|"verbatim")
BN [ \t\n\r] BN [ \t\n\r]
BL [ \t\r]*"\n" BL [ \t\r]*"\n"
B [ \t] B [ \t]
...@@ -757,7 +757,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -757,7 +757,7 @@ TITLE [tT][iI][tT][lL][eE]
lineCount(); lineCount();
BEGIN( CompoundName ); BEGIN( CompoundName );
} }
<FindMembers>{B}*(("typedef"{BN}+)?)"class"{BN}+ { <FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"class"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1; isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::CLASS_SEC; current->section = Entry::CLASS_SEC;
addType( current ) ; addType( current ) ;
...@@ -777,7 +777,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -777,7 +777,7 @@ TITLE [tT][iI][tT][lL][eE]
lineCount() ; lineCount() ;
BEGIN( CompoundName ) ; BEGIN( CompoundName ) ;
} }
<FindMembers>{B}*(("typedef"{BN}+)?)"struct"{BN}+ { <FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1; isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::STRUCT_SEC ; current->section = Entry::STRUCT_SEC ;
addType( current ) ; addType( current ) ;
...@@ -797,7 +797,7 @@ TITLE [tT][iI][tT][lL][eE] ...@@ -797,7 +797,7 @@ TITLE [tT][iI][tT][lL][eE]
lineCount() ; lineCount() ;
BEGIN( CompoundName ) ; BEGIN( CompoundName ) ;
} }
<FindMembers>{B}*(("typedef"{BN}+)?)"union"{BN}+ { <FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"union"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1; isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::UNION_SEC ; current->section = Entry::UNION_SEC ;
addType( current ) ; addType( current ) ;
......
...@@ -954,7 +954,7 @@ class Translator ...@@ -954,7 +954,7 @@ class Translator
/*! Text shown before a multi-line variable/enum initialization */ /*! Text shown before a multi-line variable/enum initialization */
virtual QCString trInitialValue() virtual QCString trInitialValue()
{ {
return "Initializer:"; return "Initial value:";
} }
/*! Text used the source code in the file index */ /*! Text used the source code in the file index */
virtual QCString trCode() virtual QCString trCode()
...@@ -1222,6 +1222,11 @@ class Translator ...@@ -1222,6 +1222,11 @@ class Translator
{ {
return "Package Documentation"; return "Package Documentation";
} }
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
return "Value:";
}
}; };
#endif #endif
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* *
*/ */
/** /*
* translator_es.h modified by Lucas Cruz (7-julio-2000) * translator_es.h modified by Lucas Cruz (7-julio-2000)
* Some notes: * Some notes:
* - It's posible that some sentences haven't got meaning because * - It's posible that some sentences haven't got meaning because
......
...@@ -378,12 +378,13 @@ NamespaceDef *getResolvedNamespace(const char *name) ...@@ -378,12 +378,13 @@ NamespaceDef *getResolvedNamespace(const char *name)
} }
} }
ClassDef *getResolvedClass(const char *name) ClassDef *getResolvedClass(const char *name,bool *pIsTypeDef)
{ {
if (name==0 || name[0]=='\0') return 0; if (name==0 || name[0]=='\0') return 0;
QCString *subst = Doxygen::typedefDict[name]; QCString *subst = Doxygen::typedefDict[name];
if (subst) // there is a typedef with this name if (subst) // there is a typedef with this name
{ {
if (pIsTypeDef) *pIsTypeDef=TRUE;
//printf("getResolvedClass `%s'->`%s'\n",name,subst->data()); //printf("getResolvedClass `%s'->`%s'\n",name,subst->data());
if (*subst==name) // avoid resolving typedef struct foo foo; if (*subst==name) // avoid resolving typedef struct foo foo;
{ {
...@@ -419,6 +420,7 @@ ClassDef *getResolvedClass(const char *name) ...@@ -419,6 +420,7 @@ ClassDef *getResolvedClass(const char *name)
} }
else else
{ {
if (pIsTypeDef) *pIsTypeDef=FALSE;
return Doxygen::classDict[name]; return Doxygen::classDict[name];
} }
} }
......
...@@ -101,7 +101,7 @@ extern QCString convertFileName(const QCString &s); ...@@ -101,7 +101,7 @@ extern QCString convertFileName(const QCString &s);
extern QCString substitute(const char *s,const char *src,const char *dst); extern QCString substitute(const char *s,const char *src,const char *dst);
extern QCString resolveDefines(const char *n); extern QCString resolveDefines(const char *n);
extern ClassDef *getClass(const char *key); extern ClassDef *getClass(const char *key);
extern ClassDef *getResolvedClass(const char *key); extern ClassDef *getResolvedClass(const char *key,bool *pIsTypeDef=0);
extern NamespaceDef *getResolvedNamespace(const char *key); extern NamespaceDef *getResolvedNamespace(const char *key);
extern FileDef *findFileDef(const FileNameDict *fnDict,const char *n, extern FileDef *findFileDef(const FileNameDict *fnDict,const char *n,
bool &ambig); bool &ambig);
......
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