Commit 26ded37d authored by dimitri's avatar dimitri

Release-1.2.1-20000829

parent 8726fc64
DOXYGEN Version 1.2.1 DOXYGEN Version 1.2.1-20000829
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (13 August 2000) Dimitri van Heesch (29 August 2000)
DOXYGEN Version 1.2.1 DOXYGEN Version 1.2.1-20000829
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 (13 August 2000) Dimitri van Heesch (29 August 2000)
1.2.1 1.2.1-20000829
...@@ -812,6 +812,20 @@ void checkConfig() ...@@ -812,6 +812,20 @@ void checkConfig()
#endif #endif
s=Config::includePath.next(); s=Config::includePath.next();
} }
// check aliases
s=Config::aliasList.first();
while (s)
{
QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*=");
QCString alias=s;
alias=alias.stripWhiteSpace();
if (alias.find(re)!=0)
{
err("Illegal alias format `%s'. Use \"name=value\"\n",alias.data());
}
s=Config::aliasList.next();
}
// check dot path // check dot path
if (!Config::dotPath.isEmpty()) if (!Config::dotPath.isEmpty())
......
...@@ -1014,6 +1014,18 @@ void init() ...@@ -1014,6 +1014,18 @@ void init()
"disable (NO) the test list. This list is created by putting \\test \n" "disable (NO) the test list. This list is created by putting \\test \n"
"commands in the documentation.\n" "commands in the documentation.\n"
); );
ConfigList::add( "aliasList",
"ALIASES",
"",
"list of aliases",
"This tag can be used to specify a number of aliases that acts \n"
"as commands in the documentation. An alias has the form \"\\name=value\". \n"
"For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n"
"put the command \\sideeffect (or @sideeffect) in the documentation, which \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"
"Predefined commands cannot be overwritten using aliases. \n"
);
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
ConfigInfo::add( "Messages","configuration options related to warning and progress messages"); ConfigInfo::add( "Messages","configuration options related to warning and progress messages");
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
......
...@@ -282,7 +282,7 @@ Doxygen. Unrecognized commands are treated as normal text. ...@@ -282,7 +282,7 @@ Doxygen. Unrecognized commands are treated as normal text.
(either global or as a member of a class). This command is needed if a (either global or as a member of a class). This command is needed if a
comment block is \e not located before the function declaration comment block is \e not located before the function declaration
or definition. A full function declaration should be specified after the or definition. A full function declaration should be specified after the
\fn command. The argument ends at the end of the line. \\fn command. The argument ends at the end of the line.
\par Example: \par Example:
\verbinclude func.h \verbinclude func.h
......
...@@ -39,12 +39,12 @@ You should use the \\mainpage command inside a comment block like this: ...@@ -39,12 +39,12 @@ You should use the \\mainpage command inside a comment block like this:
In order for global functions, variables, enums, typedefs, and defines In order for global functions, variables, enums, typedefs, and defines
to be documented you should document the file in which these commands are to be documented you should document the file in which these commands are
located using a comment block containing a \file (or @file) located using a comment block containing a \\file (or \@file)
command. command.
Alternatively, you can put all members in a group (or module) Alternatively, you can put all members in a group (or module)
using the \ingroup command and then document the group using a comment using the \\ingroup command and then document the group using a comment
block containing the \defgroup command. block containing the \\defgroup command.
<li><b>How can I avoid that some code fragment is parsed by Doxyen?</b> <li><b>How can I avoid that some code fragment is parsed by Doxyen?</b>
<p> <p>
......
...@@ -111,7 +111,7 @@ ...@@ -111,7 +111,7 @@
special <code>//!</code> C++ line comments. special <code>//!</code> C++ line comments.
<li>Unrelated members can now be documented. A page containing a <li>Unrelated members can now be documented. A page containing a
list of these members is generated. list of these members is generated.
<li>Added an <code>\include</code> command to insert blocks of source code <li>Added an <code>\\include</code> command to insert blocks of source code
into the documentation. into the documentation.
<li>Warnings are generated for members that are undocumented. <li>Warnings are generated for members that are undocumented.
<li>You can now specify your own HTML headers and footers for the <li>You can now specify your own HTML headers and footers for the
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
documentation, because of possible ambiguities or lack of documentation, because of possible ambiguities or lack of
information about the context in which the code fragment is found. information about the context in which the code fragment is found.
<li>It is not possible to insert a non-member function f in a class A <li>It is not possible to insert a non-member function f in a class A
using the \relates command, if class A already has a member with name f using the \\relates command, if class A already has a member with name f
and the same argument list. and the same argument list.
<li>There is only very limited support for member specialization at the <li>There is only very limited support for member specialization at the
moment. It only works if there is a specialized template class as moment. It only works if there is a specialized template class as
......
Name: doxygen Name: doxygen
Version: 1.2.1 Version: 1.2.1-20000829
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
......
...@@ -1200,9 +1200,11 @@ void ClassDef::writeMemberList(OutputList &ol) ...@@ -1200,9 +1200,11 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.writeString(")"); ol.writeString(")");
memberWritten=TRUE; memberWritten=TRUE;
} }
if ((protect!=Public || md->isStatic() || virt!=Normal || if ((protect!=Public || virt!=Normal ||
md->isFriend() || md->isRelated() || md->isFriend() || md->isRelated() || md->isExplicit() ||
md->getMemberSpecifiers()!=0 md->isMutable() || (md->isInline() && Config::inlineInfoFlag) ||
md->isSignal() || md->isSlot() ||
md->isStatic()
) )
&& memberWritten) && memberWritten)
{ {
......
...@@ -447,7 +447,9 @@ static bool getLink(const char *className, ...@@ -447,7 +447,9 @@ static bool getLink(const char *className,
{ {
md->addSourceReference(g_currentMemberDef); md->addSourceReference(g_currentMemberDef);
} }
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data()); //printf("d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getOutputFileBase().data(),d->name().data(),md->name().data());
//printf("g_classVar=`%s' type=`%s'\n",g_classVar ? g_classVar->name().data() : "none",md->typeString());
writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(), writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(),
md->anchor(),text ? text : memberName); md->anchor(),text ? text : memberName);
return TRUE; return TRUE;
...@@ -559,8 +561,36 @@ static void generateMemberLink(OutputList &ol,const char *varName, ...@@ -559,8 +561,36 @@ static void generateMemberLink(OutputList &ol,const char *varName,
ClassDef *vcd = getResolvedClass(g_classScope); ClassDef *vcd = getResolvedClass(g_classScope);
if (vcd && vcd->isLinkable()) if (vcd && vcd->isLinkable())
{ {
//printf("Found class for variable `%s'\n",varName); //printf("Found class %s for variable `%s'\n",g_classScope.data(),varName);
MemberName *vmn=memberNameDict[varName]; MemberName *vmn=memberNameDict[varName];
if (vmn==0)
{
int vi;
QCString vn=varName;
QCString scope;
if ((vi=vn.findRev("::"))!=-1) // explicit scope A::b(), probably static member
{
ClassDef *jcd = getClass(vn.left(vi));
vn=vn.right(vn.length()-vi-2);
vmn=memberNameDict[vn];
//printf("Trying name `%s' scope=%s\n",vn.data(),scope.data());
MemberNameIterator vmni(*vmn);
MemberDef *vmd;
for (;(vmd=vmni.current());++vmni)
{
if ((vmd->isVariable() || vmd->isFunction()) &&
vmd->getClassDef()==jcd)
{
//printf("Found variable type=%s\n",vmd->typeString());
ClassDef *mcd=stripClassName(vmd->typeString());
if (mcd && mcd->isLinkable())
{
if (generateClassMemberLink(ol,mcd,memName)) return;
}
}
}
}
}
if (vmn) if (vmn)
{ {
//printf("There is a variable with name `%s'\n",varName); //printf("There is a variable with name `%s'\n",varName);
......
/* This file was generated by configgen on Sat Aug 12 16:16:35 2000 /* This file was generated by configgen on Fri Aug 25 21:22:11 2000
* from config_templ.h * from config_templ.h
* *
* DO NOT EDIT! * DO NOT EDIT!
...@@ -68,6 +68,7 @@ struct Config ...@@ -68,6 +68,7 @@ struct Config
static QStrList sectionFilterList; // list of section filters that are enabled static QStrList sectionFilterList; // list of section filters that are enabled
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 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 warningUndocFlag; // generate undocumented warnings static bool warningUndocFlag; // generate undocumented warnings
......
/* This file was generated by configgen on Sun Aug 13 14:05:26 2000 /* This file was generated by configgen on Fri Aug 25 21:22:11 2000
* from config_templ.l * from config_templ.l
* *
* DO NOT EDIT! * DO NOT EDIT!
...@@ -105,6 +105,7 @@ int Config::tabSize = 8; ...@@ -105,6 +105,7 @@ int Config::tabSize = 8;
QStrList Config::sectionFilterList; QStrList Config::sectionFilterList;
bool Config::generateTodoList = TRUE; bool Config::generateTodoList = TRUE;
bool Config::generateTestList = TRUE; bool Config::generateTestList = TRUE;
QStrList Config::aliasList;
bool Config::quietFlag = FALSE; bool Config::quietFlag = FALSE;
bool Config::warningFlag = TRUE; bool Config::warningFlag = TRUE;
bool Config::warningUndocFlag = TRUE; bool Config::warningUndocFlag = TRUE;
...@@ -361,6 +362,8 @@ static void readIncludeFile(const char *incName) ...@@ -361,6 +362,8 @@ static void readIncludeFile(const char *incName)
<Start>"ENABLED_SECTIONS"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::sectionFilterList; elemStr=""; } <Start>"ENABLED_SECTIONS"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::sectionFilterList; elemStr=""; }
<Start>"GENERATE_TODOLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTodoList; } <Start>"GENERATE_TODOLIST"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateTodoList; }
<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; 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>"WARN_IF_UNDOCUMENTED"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningUndocFlag; } <Start>"WARN_IF_UNDOCUMENTED"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningUndocFlag; }
...@@ -595,6 +598,14 @@ void dumpConfig() ...@@ -595,6 +598,14 @@ void dumpConfig()
} }
printf("generateTodoList=`%d'\n",Config::generateTodoList); printf("generateTodoList=`%d'\n",Config::generateTodoList);
printf("generateTestList=`%d'\n",Config::generateTestList); printf("generateTestList=`%d'\n",Config::generateTestList);
{
char *is=Config::aliasList.first();
while (is)
{
printf("aliasList=`%s'\n",is);
is=Config::aliasList.next();
}
}
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);
printf("warningFlag=`%d'\n",Config::warningFlag); printf("warningFlag=`%d'\n",Config::warningFlag);
...@@ -817,6 +828,7 @@ void Config::init() ...@@ -817,6 +828,7 @@ void Config::init()
Config::sectionFilterList.clear(); Config::sectionFilterList.clear();
Config::generateTodoList = TRUE; Config::generateTodoList = TRUE;
Config::generateTestList = TRUE; Config::generateTestList = TRUE;
Config::aliasList.clear();
Config::quietFlag = FALSE; Config::quietFlag = FALSE;
Config::warningFlag = TRUE; Config::warningFlag = TRUE;
Config::warningUndocFlag = TRUE; Config::warningUndocFlag = TRUE;
...@@ -1308,6 +1320,20 @@ void writeTemplateConfig(QFile *f,bool sl) ...@@ -1308,6 +1320,20 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::generateTestList); writeBoolValue(t,Config::generateTestList);
t << "\n"; t << "\n";
if (!sl) if (!sl)
{
t << "\n";
t << "# This tag can be used to specify a number of aliases that acts \n";
t << "# as commands in the documentation. An alias has the form \"\\name=value\". \n";
t << "# For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to \n";
t << "# put the command \\sideeffect (or @sideeffect) in the documentation, which \n";
t << "# will result in a user defined paragraph with heading \"Side Effects:\". \n";
t << "# Predefined commands cannot be overwritten using aliases. \n";
t << "\n";
}
t << "ALIASES = ";
writeStringList(t,Config::aliasList);
t << "\n";
if (!sl)
{ {
t << "\n"; t << "\n";
} }
...@@ -2374,6 +2400,7 @@ void substituteEnvironmentVars() ...@@ -2374,6 +2400,7 @@ void substituteEnvironmentVars()
substEnvVarsInString( Config::outputLanguage ); substEnvVarsInString( Config::outputLanguage );
substEnvVarsInStrList( Config::stripFromPath ); substEnvVarsInStrList( Config::stripFromPath );
substEnvVarsInStrList( Config::sectionFilterList ); substEnvVarsInStrList( Config::sectionFilterList );
substEnvVarsInStrList( Config::aliasList );
substEnvVarsInString( Config::warnFormat ); substEnvVarsInString( Config::warnFormat );
substEnvVarsInStrList( Config::inputSources ); substEnvVarsInStrList( Config::inputSources );
substEnvVarsInStrList( Config::filePatternList ); substEnvVarsInStrList( Config::filePatternList );
...@@ -2635,6 +2662,20 @@ void checkConfig() ...@@ -2635,6 +2662,20 @@ void checkConfig()
#endif #endif
s=Config::includePath.next(); s=Config::includePath.next();
} }
// check aliases
s=Config::aliasList.first();
while (s)
{
QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*=");
QCString alias=s;
alias=alias.stripWhiteSpace();
if (alias.find(re)!=0)
{
err("Illegal alias format `%s'. Use \"name=value\"\n",alias.data());
}
s=Config::aliasList.next();
}
// check dot path // check dot path
if (!Config::dotPath.isEmpty()) if (!Config::dotPath.isEmpty())
......
...@@ -1246,8 +1246,8 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path, ...@@ -1246,8 +1246,8 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path,
} }
void ClassDiagram::writeImageMap(QTextStream &t,const char *path, void ClassDiagram::writeImage(QTextStream &t,const char *path,
const char *fileName, bool generateMap) const char *fileName, bool generateMap)
{ {
uint baseRows=base->computeRows(); uint baseRows=base->computeRows();
uint superRows=super->computeRows(); uint superRows=super->computeRows();
......
...@@ -123,7 +123,7 @@ class ClassDiagram ...@@ -123,7 +123,7 @@ class ClassDiagram
~ClassDiagram(); ~ClassDiagram();
void writeFigure(QTextStream &t,const char *path, void writeFigure(QTextStream &t,const char *path,
const char *file); const char *file);
void writeImageMap(QTextStream &t,const char *path, void writeImage(QTextStream &t,const char *path,
const char *file,bool generateMap=TRUE); const char *file,bool generateMap=TRUE);
private: private:
TreeDiagram *base; TreeDiagram *base;
......
This diff is collapsed.
...@@ -1043,13 +1043,27 @@ static void findMaximalDotGraph(DotNode *root, ...@@ -1043,13 +1043,27 @@ static void findMaximalDotGraph(DotNode *root,
QCString DotClassGraph::diskName() const QCString DotClassGraph::diskName() const
{ {
return m_diskName + "_coll_graph"; QString result=m_diskName.copy();
switch (m_graphType)
{
case Implementation:
result+="_coll_graph";
break;
case Interface:
result+="_intf_graph";
break;
case Inheritance:
result+="_inherit_graph";
break;
}
return result;
} }
void DotClassGraph::writeGraph(QTextStream &out, void DotClassGraph::writeGraph(QTextStream &out,
GraphOutputFormat format, GraphOutputFormat format,
const char *path, const char *path,
bool isTBRank) bool isTBRank,
bool generateImageMap)
{ {
QDir d(path); QDir d(path);
// store the original directory // store the original directory
...@@ -1094,34 +1108,37 @@ void DotClassGraph::writeGraph(QTextStream &out, ...@@ -1094,34 +1108,37 @@ void DotClassGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return; return;
} }
// run dot again to create an image map if (generateImageMap)
dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"",
Config::dotPath.data(),baseName.data(),baseName.data());
if (iSystem(dotCmd)!=0)
{ {
err("Error: Problems running dot. Check your installation!\n"); // run dot again to create an image map
QDir::setCurrent(oldDir); dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"",
return; Config::dotPath.data(),baseName.data(),baseName.data());
} if (iSystem(dotCmd)!=0)
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#" {
err("Error: Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
}
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
<< m_startNode->m_label << "_" << mapName << "\" alt=\""; << m_startNode->m_label << "_" << mapName << "\" alt=\"";
switch (m_graphType) switch (m_graphType)
{ {
case Implementation: case Implementation:
out << "Collaboration graph"; out << "Collaboration graph";
break; break;
case Interface: case Interface:
out << "Interface dependency graph"; out << "Interface dependency graph";
break; break;
case Inheritance: case Inheritance:
out << "Inheritance graph"; out << "Inheritance graph";
break; break;
}
out << "\"></center>" << endl;
out << "<map name=\"" << m_startNode->m_label << "_" << mapName << "\">" << endl;
convertMapFile(out,baseName+".map");
out << "</map>" << endl;
thisDir.remove(baseName+".map");
} }
out << "\"></center>" << endl;
out << "<map name=\"" << m_startNode->m_label << "_" << mapName << "\">" << endl;
convertMapFile(out,baseName+".map");
out << "</map><p>" << endl;
thisDir.remove(baseName+".map");
} }
else if (format==EPS) // run dot to create a .eps image else if (format==EPS) // run dot to create a .eps image
{ {
...@@ -1251,12 +1268,16 @@ DotInclDepGraph::~DotInclDepGraph() ...@@ -1251,12 +1268,16 @@ DotInclDepGraph::~DotInclDepGraph()
QCString DotInclDepGraph::diskName() const QCString DotInclDepGraph::diskName() const
{ {
return m_diskName + "_incldep"; QCString result=m_diskName.copy();
if (m_inverse) result+="_dep";
result+="_incl";
return result;
} }
void DotInclDepGraph::writeGraph(QTextStream &out, void DotInclDepGraph::writeGraph(QTextStream &out,
GraphOutputFormat format, GraphOutputFormat format,
const char *path const char *path,
bool generateImageMap
) )
{ {
QDir d(path); QDir d(path);
...@@ -1292,25 +1313,28 @@ void DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1292,25 +1313,28 @@ void DotInclDepGraph::writeGraph(QTextStream &out,
return; return;
} }
// run dot again to create an image map if (generateImageMap)
dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"",
Config::dotPath.data(),baseName.data(),baseName.data());
if (iSystem(dotCmd)!=0)
{ {
err("Problems running dot. Check your installation!\n"); // run dot again to create an image map
QDir::setCurrent(oldDir); dotCmd.sprintf("%sdot -Timap \"%s.dot\" -o \"%s.map\"",
return; Config::dotPath.data(),baseName.data(),baseName.data());
} if (iSystem(dotCmd)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return;
}
out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#" out << "<p><center><img src=\"" << baseName << ".gif\" border=\"0\" usemap=\"#"
<< mapName << "_map\" alt=\""; << mapName << "_map\" alt=\"";
if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph"; if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph";
out << "\">"; out << "\">";
out << "</center>" << endl; out << "</center>" << endl;
out << "<map name=\"" << mapName << "_map\">" << endl; out << "<map name=\"" << mapName << "_map\">" << endl;
convertMapFile(out,baseName+".map"); convertMapFile(out,baseName+".map");
out << "</map><p>" << endl; out << "</map>" << endl;
thisDir.remove(baseName+".map"); thisDir.remove(baseName+".map");
}
} }
else if (format==EPS) else if (format==EPS)
{ {
......
...@@ -120,7 +120,7 @@ class DotClassGraph ...@@ -120,7 +120,7 @@ class DotClassGraph
~DotClassGraph(); ~DotClassGraph();
bool isTrivial() const; bool isTrivial() const;
void writeGraph(QTextStream &t,GraphOutputFormat f,const char *path, void writeGraph(QTextStream &t,GraphOutputFormat f,const char *path,
bool TBRank=TRUE); bool TBRank=TRUE,bool imageMap=TRUE);
QCString diskName() const; QCString diskName() const;
private: private:
...@@ -141,7 +141,8 @@ class DotInclDepGraph ...@@ -141,7 +141,8 @@ class DotInclDepGraph
public: public:
DotInclDepGraph(FileDef *fd,bool inverse=FALSE); DotInclDepGraph(FileDef *fd,bool inverse=FALSE);
~DotInclDepGraph(); ~DotInclDepGraph();
void writeGraph(QTextStream &t, GraphOutputFormat f,const char *path); void writeGraph(QTextStream &t, GraphOutputFormat f,const char *path,
bool writeImageMap=TRUE);
bool isTrivial() const; bool isTrivial() const;
QCString diskName() const; QCString diskName() const;
......
This diff is collapsed.
...@@ -99,6 +99,7 @@ extern FormulaList formulaList; ...@@ -99,6 +99,7 @@ extern FormulaList formulaList;
extern FormulaDict formulaDict; extern FormulaDict formulaDict;
extern FormulaDict formulaNameDict; extern FormulaDict formulaNameDict;
extern StringDict tagDestinationDict; extern StringDict tagDestinationDict;
extern StringDict aliasDict;
extern QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading extern QIntDict<QCString> memberHeaderDict; // dictionary of the member groups heading
extern QIntDict<QCString> memberDocDict; // dictionary of the member groups heading extern QIntDict<QCString> memberDocDict; // dictionary of the member groups heading
extern QDict<void> expandAsDefinedDict; extern QDict<void> expandAsDefinedDict;
......
...@@ -26,7 +26,7 @@ HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.h \ ...@@ -26,7 +26,7 @@ HEADERS = doxygen.h scanner.h doc.h classdef.h classlist.h memberdef.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 \
translator_ru.h translator_pl.h dot.h rtfgen.h xml.h xml_dtd.h \ translator_ru.h translator_pl.h dot.h rtfgen.h xml.h xml_dtd.h \
reflist.h page.h sortdict.h reflist.h page.h sortdict.h translator_hu.h
SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \ SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \
memberdef.cpp membername.cpp index.cpp memberlist.cpp \ memberdef.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 \
......
...@@ -577,7 +577,7 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d, ...@@ -577,7 +577,7 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d,
<< " border=\"0\"></center>" << endl << " border=\"0\"></center>" << endl
<< "<map name=\"" << name << "_map\">" << endl; << "<map name=\"" << name << "_map\">" << endl;
d.writeImageMap(t,dir,fileName); d.writeImage(t,dir,fileName);
} }
void HtmlGenerator::startColorFont(uchar red,uchar green,uchar blue) void HtmlGenerator::startColorFont(uchar red,uchar green,uchar blue)
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "translator_hr.h" #include "translator_hr.h"
#include "translator_pl.h" #include "translator_pl.h"
#include "translator_pt.h" #include "translator_pt.h"
#include "translator_hu.h"
#endif #endif
#define L_EQUAL(a) !stricmp(langName,a) #define L_EQUAL(a) !stricmp(langName,a)
...@@ -100,6 +101,10 @@ bool setTranslator(const char *langName) ...@@ -100,6 +101,10 @@ bool setTranslator(const char *langName)
{ {
theTranslator=new TranslatorPortuguese; theTranslator=new TranslatorPortuguese;
} }
else if (L_EQUAL("hungarian"))
{
theTranslator=new TranslatorHungarian;
}
#endif #endif
else // use the default language (i.e. english) else // use the default language (i.e. english)
{ {
......
...@@ -108,7 +108,7 @@ class LatexGenerator : public OutputGenerator ...@@ -108,7 +108,7 @@ class LatexGenerator : public OutputGenerator
void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ } void writeRuler() { t << endl << endl; /*t << "\\vspace{0.4cm}\\hrule\\vspace{0.2cm}" << endl; */ }
void writeAnchor(const char *fileName,const char *name); void writeAnchor(const char *fileName,const char *name);
void startCodeFragment() { t << "\\small\\begin{verbatim}"; } void startCodeFragment() { t << "\\footnotesize\\begin{verbatim}"; }
void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; } void endCodeFragment() { t << "\\end{verbatim}\\normalsize " << endl; }
void startPreFragment() { t << "\\small\\begin{alltt}"; } void startPreFragment() { t << "\\small\\begin{alltt}"; }
void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl; } void endPreFragment() { t << "\\end{alltt}\\normalsize " << endl; }
......
...@@ -972,10 +972,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -972,10 +972,11 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
rmd = rmd->reimplements(); rmd = rmd->reimplements();
} }
if (isStatic() || protection()!=Public || if (protection()!=Public || lvirt!=Normal ||
lvirt!=Normal || isSignal() || isFriend() || isFriend() || isRelated() || isExplicit() ||
isRelated() || isSlot() || isMutable() || (isInline() && Config::inlineInfoFlag) ||
getMemberSpecifiers()!=0 isSignal() || isSlot() ||
isStatic()
) )
{ {
// write the member specifier list // write the member specifier list
......
...@@ -1737,7 +1737,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d, ...@@ -1737,7 +1737,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d,
newParagraph(); newParagraph();
// create a gif file // create a gif file
d.writeImageMap(t,dir,fileName,FALSE); d.writeImage(t,dir,fileName,FALSE);
// display the file // display the file
t << "{" << endl; t << "{" << endl;
...@@ -2160,11 +2160,8 @@ void RTFGenerator::startDotGraph() ...@@ -2160,11 +2160,8 @@ void RTFGenerator::startDotGraph()
void RTFGenerator::endDotGraph(DotClassGraph &g) void RTFGenerator::endDotGraph(DotClassGraph &g)
{ {
newParagraph(); newParagraph();
DBG_RTF(t <<"{\\comment This would be an image map..." << endl)
g.writeGraph(t,GIF,Config::rtfOutputDir); g.writeGraph(t,GIF,Config::rtfOutputDir,TRUE,FALSE);
t << "}" << endl;
// display the file // display the file
t << "{" << endl; t << "{" << endl;
...@@ -2182,11 +2179,8 @@ void RTFGenerator::startInclDepGraph() ...@@ -2182,11 +2179,8 @@ void RTFGenerator::startInclDepGraph()
void RTFGenerator::endInclDepGraph(DotInclDepGraph &g) void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
{ {
newParagraph(); newParagraph();
DBG_RTF(t <<"{\\comment This would be an image map..." << endl)
g.writeGraph(t,GIF,Config::rtfOutputDir); g.writeGraph(t,GIF,Config::rtfOutputDir,FALSE);
t << "}" << endl;
//QCString diskName = g.diskName(); //QCString diskName = g.diskName();
......
This diff is collapsed.
This diff is collapsed.
/****************************************************************************** /******************************************************************************
*
*
* *
* Copyright (C) 1997-2000 by Dimitri van Heesch. * Copyright (C) 1997-2000 by Dimitri van Heesch.
* *
* Initial Italian Translation by Ahmed Aldo Faisal * Initial Italian Translation by Ahmed Aldo Faisal
* Revised and completed by Alessandro Falappa (June 1999) * Revised and completed by Alessandro Falappa (June 1999)
* Updates: * Updates:
* 2000/08: translated new items used since version 1.1.3, 1.1.4, 1.1.5 and 1.2.0
* 2000/03: translated new items used since version 1.0 and 1.1.0 * 2000/03: translated new items used since version 1.0 and 1.1.0
* 1999/19: entirely rewritten the translation to correct small variations due * 1999/19: entirely rewritten the translation to correct small variations due
* to feature additions and to conform to the layout of the latest * to feature additions and to conform to the layout of the latest
...@@ -179,8 +178,7 @@ class TranslatorItalian : public Translator ...@@ -179,8 +178,7 @@ class TranslatorItalian : public Translator
/*! This is an introduction to the annotated compound list. */ /*! This is an introduction to the annotated compound list. */
QCString trCompoundListDescription() QCString trCompoundListDescription()
{ return "Queste sono le classi, structs, " { return "Queste sono le classi, structs, unions e interfacce con una loro breve descrizione:";
"unions e interfacce con una loro breve descrizione:";
} }
/*! This is an introduction to the page with all class members. */ /*! This is an introduction to the page with all class members. */
...@@ -427,7 +425,7 @@ class TranslatorItalian : public Translator ...@@ -427,7 +425,7 @@ class TranslatorItalian : public Translator
/*! this text is generated when the \warning command is used. */ /*! this text is generated when the \warning command is used. */
QCString trWarning() QCString trWarning()
{ return "Attenzione"; } { return "Avvertimento"; }
/*! this text is generated when the \bug command is used. */ /*! this text is generated when the \bug command is used. */
QCString trBugsAndLimitations() QCString trBugsAndLimitations()
...@@ -728,7 +726,7 @@ class TranslatorItalian : public Translator ...@@ -728,7 +726,7 @@ class TranslatorItalian : public Translator
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.0.0 // new since 0.49-991205
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
QCString trDeprecated() QCString trDeprecated()
...@@ -737,7 +735,7 @@ class TranslatorItalian : public Translator ...@@ -737,7 +735,7 @@ class TranslatorItalian : public Translator
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// new since 1.1.0 // new since 1.0.0
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! this text is put before a collaboration diagram */ /*! this text is put before a collaboration diagram */
...@@ -753,7 +751,7 @@ class TranslatorItalian : public Translator ...@@ -753,7 +751,7 @@ class TranslatorItalian : public Translator
/*! header that is put before the list of constructor/destructors. */ /*! header that is put before the list of constructor/destructors. */
QCString trConstructorDocumentation() QCString trConstructorDocumentation()
{ {
return "Documentazione dei costruttori e dei distruttori"; return "Documentazione dei costruttori e dei distruttori";
} }
/*! Used in the file documentation to point to the corresponding sources. */ /*! Used in the file documentation to point to the corresponding sources. */
QCString trGotoSourceCode() QCString trGotoSourceCode()
...@@ -806,11 +804,15 @@ class TranslatorItalian : public Translator ...@@ -806,11 +804,15 @@ class TranslatorItalian : public Translator
{ {
return "Indice delle pagine"; return "Indice delle pagine";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
QCString trNote() QCString trNote()
{ {
return "Nota"; return "Nota";
} }
QCString trPublicTypes() QCString trPublicTypes()
{ {
return "Tipi pubblici"; return "Tipi pubblici";
...@@ -847,6 +849,127 @@ class TranslatorItalian : public Translator ...@@ -847,6 +849,127 @@ class TranslatorItalian : public Translator
{ {
return "Attributi privati statici"; return "Attributi privati statici";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a todo item */
virtual QCString trTodo()
{
return "Da Fare";
}
/*! Used as the header of the todo list */
virtual QCString trTodoList()
{
return "Lista di cose da fare";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////
virtual QCString trReferencedBy()
{
return "Referenziato da";
}
virtual QCString trRemarks()
{
return "Osservazioni";
}
virtual QCString trAttention()
{
return "Attenzione";
}
virtual QCString trInclByDepGraph()
{
return "Queato grafo mostra quali files includono direttamente o indirettamente questo file:";
}
virtual QCString trSince()
{
return "A partire da";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
virtual QCString trLegendTitle()
{
return "Legenda del grafo";
}
/*! page explaining how the dot graph's should be interpreted */
virtual QCString trLegendDocs()
{
return
"Questa pagina spiega come interpretare i grafi generati da doxygen.<p>\n"
"Considerate l'esempio seguente:\n"
"\\code\n"
"/*! Invisible class because of truncation */\n"
"class Invisible { };\n\n"
"/*! Truncated class, inheritance relation is hidden */\n"
"class Truncated : public Invisible { };\n\n"
"/* Class not documented with doxygen comments */\n"
"class Undocumented { };\n\n"
"/*! Class that is inherited using public inheritance */\n"
"class PublicBase : public Truncated { };\n\n"
"/*! Class that is inherited using protected inheritance */\n"
"class ProtectedBase { };\n\n"
"/*! Class that is inherited using private inheritance */\n"
"class PrivateBase { };\n\n"
"/*! Class that is used by the Inherited class */\n"
"class Used { };\n\n"
"/*! Super class that inherits a number of other classes */\n"
"class Inherited : public PublicBase,\n"
" protected ProtectedBase,\n"
" private PrivateBase,\n"
" public Undocumented\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Se il tag \\c MAX_DOT_GRAPH_HEIGHT nel file di configurazione "
"è impostato a 200 verrà prodotto il grafo seguente:"
"<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p>\n"
"I riquadri nel grafo qui sopra hanno il seguente significato:\n"
"<ul>\n"
"<li>Il riquadro nero pieno rappresenta la struct o la classe per la quale il grafo è stato generato.\n"
"<li>Un riquadro con un bordo nero denota una struct o una classe documentata.\n"
"<li>Un riquadro con un bordo grigio indica una struct o una classe non documentata.\n"
"<li>Un riquadro con un bordo rosso indica una struct o una classe per la quale non sono mostrate tutte le relazioni di ereditarietà/contenimento (un grafo viene troncato se non rientra nei limiti prestabiliti)."
"</ul>\n"
"Le frecce hanno il seguente significato:\n"
"<ul>\n"
"<li>Una freccia blu scuro indica una relazione di ereditarietà pubblica tra due classi.\n"
"<li>Una freccia verde indica un'ereditarietà protetta.\n"
"<li>Una freccia rossa indica un'ereditarietà privata.\n"
"<li>Una freccia viola tratteggiata indica che una classe è contenuta o usata da un'altra classe."
" La freccia viene etichettata con la o le variabili attraverso cui la struct o la classe puntata dalla freccia è accessibile.\n"
"</ul>\n";
}
/*! text for the link to the legend page */
virtual QCString trLegend()
{
return "legenda";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.0
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a test item */
virtual QCString trTest()
{
return "Test";
}
/*! Used as the header of the test list */
virtual QCString trTestList()
{
return "Lista dei test";
}
}; };
#endif #endif
...@@ -897,6 +897,94 @@ class TranslatorPolish : public Translator ...@@ -897,6 +897,94 @@ class TranslatorPolish : public Translator
{ {
return "Od"; return "Od";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
QCString trLegendTitle()
{
return "Legenda Wykresu";
}
/*! page explaining how the dot graph's should be interpreted */
QCString trLegendDocs()
{
return
"Ta strona wyja¶nia jak interpretowaæ wykresy, które s± wygenerowane "
"przez doxygen.<p>\n"
"Rozwa¿ nastêpuj±cy przyk³ad:\n"
"\\code\n"
"/*! Klasa Niewidzialna z powodu okrojenia */\n"
"class Niewidzialna { };\n\n"
"/*! Klasa Okrojona, relacja dziedziczenia jest ukryta */\n"
"class Okrojona : public Niewidzialna { };\n\n"
"/* Klasa nie udokumentowana komentarzami doxygen */\n"
"class Nieudokumentowana { };\n\n"
"/*! Klasa, która jest dziedziczona publicznie */\n"
"class PublicznaBaza : public Okrojona { };\n\n"
"/*! Klasa, która jest dziedziczona przy u¿yciu dziedziczenia chronionego */\n"
"class ChronionaBaza { };\n\n"
"/*! Klasa, która jest dziedziczona prywatnie */\n"
"class PrywatnaBaza { };\n\n"
"/*! Klasa, która jest u¿yta przez klasê Dziedziczona */\n"
"class Uzyta { };\n\n"
"/*! Superklasa, która dziedziczy kilka innych klas */\n"
"class Dziedziczona : public PublicznaBaza,\n"
" protected ChronionaBaza,\n"
" private PrywatnaBaza,\n"
" public Nieudokumentowana\n"
"{\n"
" private:\n"
" Uzyta *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Je¶li znacznik \\c MAX_DOT_GRAPH_HEIGHT w pliku konfiguracji "
"jest ustawiony na 200, odniesie to rezultat w nastêpuj±cym wykresie:"
"<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p>\n"
"Pude³ka w powy¿szym wykresie maj± nastêpuj±ce znaczenie:\n"
"<ul>\n"
"<li>Wype³nione czarne pude³ko reprezentuje strukturê lub klasê dla "
"której zosta³ wygenerowany wykres.\n"
"<li>Pude³ko z czarn± obwolut± oznacza udokumentowan± strukturê lub klasê.\n"
"<li>Pude³ko z szar± obwolut± oznacza nieudokumentowan± strukturê lub klasê.\n"
"<li>Pude³ko z czerwon± obwolut± oznacza udokumentowan± strukturê lub klasê dla\n"
"której nie s± pokazane wszystkie relacje dziedziczenia/zawierania. Wykres jest "
"okrojony, je¶li nie mie¶ci siê w okre¶lonych brzegach."
"</ul>\n"
"Strza³ki maj± nastêpuj±ce znaczenie:\n"
"<ul>\n"
"<li>Ciemno niebieska strza³ka jest u¿ywana do wizualizacji relacji "
"dziedziczenia publicznego pomiêdzy dwiema klasami.\n"
"<li>Ciemno zielona strza³ka jest u¿ywana dla dziedziczenia chronionego.\n"
"<li>Ciemno czerwona strza³ka jest u¿ywana dla dziedziczenia prywatnego.\n"
"<li>Fioletowa przerywana strza³ka jest u¿ywana je¶li klasa jest zawarta "
"lub u¿yta przez inn± klasê. Strza³ka jest podpisana zmienn±(ymi) "
"przez które wskazywana klasa lub struktura jest dostêpna. \n"
"</ul>\n";
}
/*! text for the link to the legend page */
QCString trLegend()
{
return "legenda";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.0
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a test item */
QCString trTest()
{
return "Test";
}
/*! Used as the header of the test list */
QCString trTestList()
{
return "Lista Testu";
}
}; };
#endif #endif
...@@ -871,8 +871,9 @@ void endFile(OutputList &ol,bool external) ...@@ -871,8 +871,9 @@ void endFile(OutputList &ol,bool external)
void setAnchors(char id,MemberList *ml,int groupId) void setAnchors(char id,MemberList *ml,int groupId)
{ {
int count=0; int count=0;
MemberDef *md=ml->first(); MemberListIterator mli(*ml);
while (md) MemberDef *md;
for (;(md=mli.current());++mli)
{ {
QCString anchor; QCString anchor;
if (groupId==-1) if (groupId==-1)
...@@ -881,7 +882,6 @@ void setAnchors(char id,MemberList *ml,int groupId) ...@@ -881,7 +882,6 @@ void setAnchors(char id,MemberList *ml,int groupId)
anchor.sprintf("%c%d_%d",id,groupId,count++); anchor.sprintf("%c%d_%d",id,groupId,count++);
//printf("Member %s anchor %s\n",md->name(),anchor.data()); //printf("Member %s anchor %s\n",md->name(),anchor.data());
md->setAnchor(anchor); md->setAnchor(anchor);
md=ml->next();
} }
} }
...@@ -1605,7 +1605,8 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1605,7 +1605,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
) )
{ {
//printf(" Found fcd=%p\n",fcd); //printf(" Found fcd=%p\n",fcd);
MemberDef *mmd=mn->first(); MemberListIterator mmli(*mn);
MemberDef *mmd;
int mdist=maxInheritanceDepth; int mdist=maxInheritanceDepth;
ArgumentList *argList=0; ArgumentList *argList=0;
if (args) if (args)
...@@ -1613,7 +1614,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1613,7 +1614,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
argList=new ArgumentList; argList=new ArgumentList;
stringToArgumentList(args,argList); stringToArgumentList(args,argList);
} }
while (mmd) for (mmli.toFirst();(mmd=mmli.current());++mmli)
{ {
if (mmd->isLinkable()) if (mmd->isLinkable())
{ {
...@@ -1631,7 +1632,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1631,7 +1632,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
} }
} }
} }
mmd=mn->next();
} }
if (argList) if (argList)
{ {
...@@ -1641,8 +1641,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1641,8 +1641,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
// no exact match found, but if args="()" an arbitrary member will do // no exact match found, but if args="()" an arbitrary member will do
{ {
//printf(" >Searching for arbitrary member\n"); //printf(" >Searching for arbitrary member\n");
mmd=mn->first(); for (mmli.toFirst();(mmd=mmli.current());++mmli)
while (mmd)
{ {
if (//(mmd->protection()!=Private || Config::extractPrivateFlag) && if (//(mmd->protection()!=Private || Config::extractPrivateFlag) &&
//( //(
...@@ -1664,7 +1663,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1664,7 +1663,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
md=mmd; md=mmd;
} }
} }
mmd=mn->next();
} }
} }
//printf(" >Succes=%d\n",mdist<maxInheritanceDepth); //printf(" >Succes=%d\n",mdist<maxInheritanceDepth);
...@@ -1711,15 +1709,13 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1711,15 +1709,13 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
//printf("Function inside existing namespace `%s'\n",namespaceName.data()); //printf("Function inside existing namespace `%s'\n",namespaceName.data());
bool found=FALSE; bool found=FALSE;
MemberDef *mmd=mn->first(); MemberListIterator mmli(*mn);
while (mmd && !found) MemberDef *mmd;
for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
{ {
//printf("mmd->getNamespaceDef()=%p fnd=%p\n", //printf("mmd->getNamespaceDef()=%p fnd=%p\n",
// mmd->getNamespaceDef(),fnd); // mmd->getNamespaceDef(),fnd);
if (mmd->getNamespaceDef()==fnd && if (mmd->getNamespaceDef()==fnd && mmd->isLinkable())
//(mmd->isReference() || mmd->hasDocumentation())
mmd->isLinkable()
)
{ // namespace is found { // namespace is found
bool match=TRUE; bool match=TRUE;
ArgumentList *argList=0; ArgumentList *argList=0;
...@@ -1740,25 +1736,19 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1740,25 +1736,19 @@ bool getDefs(const QCString &scName,const QCString &memberName,
delete argList; argList=0; delete argList; argList=0;
} }
} }
mmd=mn->next();
} }
if (!found && !strcmp(args,"()")) if (!found && !strcmp(args,"()"))
// no exact match found, but if args="()" an arbitrary // no exact match found, but if args="()" an arbitrary
// member will do // member will do
{ {
MemberDef *mmd=mn->first(); for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
while (mmd && !found)
{ {
if (mmd->getNamespaceDef()==fnd && if (mmd->getNamespaceDef()==fnd && mmd->isLinkable())
//(mmd->isReference() || mmd->hasDocumentation())
mmd->isLinkable()
)
{ {
nd=fnd; nd=fnd;
md=mmd; md=mmd;
found=TRUE; found=TRUE;
} }
mmd=mn->next();
} }
} }
if (found) return TRUE; if (found) return TRUE;
...@@ -1766,8 +1756,8 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1766,8 +1756,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
else // no scope => global function else // no scope => global function
{ {
//printf("Function with global scope `%s' args=`%s'\n",namespaceName.data(),args); //printf("Function with global scope `%s' args=`%s'\n",namespaceName.data(),args);
md=mn->first(); MemberListIterator mli(*mn);
while (md) for (mli.toFirst();(md=mli.current());++mli)
{ {
if (md->isLinkable()) if (md->isLinkable())
{ {
...@@ -1798,7 +1788,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -1798,7 +1788,6 @@ bool getDefs(const QCString &scName,const QCString &memberName,
} }
} }
} }
md=mn->next();
} }
if (!strcmp(args,"()")) if (!strcmp(args,"()"))
{ {
...@@ -2256,21 +2245,21 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) ...@@ -2256,21 +2245,21 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
{ {
if (fn->count()==1) if (fn->count()==1)
{ {
return fn->first(); return fn->getFirst();
} }
else // file name alone is ambigious else // file name alone is ambigious
{ {
int count=0; int count=0;
FileDef *fd=fn->first(); FileNameIterator fni(*fn);
FileDef *fd;
FileDef *lastMatch=0; FileDef *lastMatch=0;
while (fd) for (fni.toFirst();(fd=fni.current());++fni)
{ {
if (path.isEmpty() || fd->getPath().right(path.length())==path) if (path.isEmpty() || fd->getPath().right(path.length())==path)
{ {
count++; count++;
lastMatch=fd; lastMatch=fd;
} }
fd=fn->next();
} }
ambig=(count>1); ambig=(count>1);
return lastMatch; return lastMatch;
...@@ -2295,14 +2284,14 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n) ...@@ -2295,14 +2284,14 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n)
FileName *fn; FileName *fn;
if ((fn=(*fnDict)[name])) if ((fn=(*fnDict)[name]))
{ {
FileDef *fd=fn->first(); FileNameIterator fni(*fn);
while (fd) FileDef *fd;
for (fni.toFirst();(fd=fni.current());++fni)
{ {
if (path.isEmpty() || fd->getPath().right(path.length())==path) if (path.isEmpty() || fd->getPath().right(path.length())==path)
{ {
result+=" "+fd->absFilePath()+"\n"; result+=" "+fd->absFilePath()+"\n";
} }
fd=fn->next();
} }
} }
return result; return result;
......
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