Commit 9e1745a1 authored by dimitri's avatar dimitri

Release-1.3-20030524

parent 64200b5e
DOXYGEN Version 1.3-20030514 DOXYGEN Version 1.3-20030524
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (14 May 2003) Dimitri van Heesch (24 May 2003)
DOXYGEN Version 1.3_20030514 DOXYGEN Version 1.3_20030524
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (14 May 2003) Dimitri van Heesch (dimitri@stack.nl) (24 May 2003)
1.3-20030514 1.3-20030524
...@@ -1439,10 +1439,14 @@ ALIASES = "english=\if english" \ ...@@ -1439,10 +1439,14 @@ ALIASES = "english=\if english" \
duplicated or it can be used to extend the documentation of an inherited duplicated or it can be used to extend the documentation of an inherited
member. member.
The link object can point to a member, a class, a namespace, a group, The link object can point to a member (of a class, file or group),
a page, or a file (checked in that order). To copy the a class, a namespace, a group, a page, or a file (checked in that order).
documentation for a member of a class for instance one can put the Note that if the object pointed to is a member (function, variable,
following in the documentation typedef, etc), the compound (class, file, or group) containing it
should also be documented for the copying to work.
To copy the documentation for a member of a
class for instance one can put the following in the documentation
\verbatim \verbatim
/*! @copydoc MyClass::myfunction() /*! @copydoc MyClass::myfunction()
......
...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means ...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time. languages other than English (the default) at configuration time.
Currently (version 1.2.14-20020317), 28 languages Currently (version 1.3-20030430), 28 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish, Czech, Danish, Dutch, English, Finnish,
...@@ -55,7 +55,7 @@ when the translator was updated. ...@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD> <TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD> <TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD> <TD>chino@NOSPAM.icmc.sc.usp.br</TD>
<TD>strange</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Catalan</TD> <TD>Catalan</TD>
...@@ -79,13 +79,13 @@ when the translator was updated. ...@@ -79,13 +79,13 @@ when the translator was updated.
<TD>Croatian</TD> <TD>Croatian</TD>
<TD>Boris Bralo</TD> <TD>Boris Bralo</TD>
<TD>boris.bralo@NOSPAM.zg.tel.hr</TD> <TD>boris.bralo@NOSPAM.zg.tel.hr</TD>
<TD>strange</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Czech</TD> <TD>Czech</TD>
<TD>Petr P&#x0159;ikryl</TD> <TD>Petr P&#x0159;ikryl</TD>
<TD>prikrylp@NOSPAM.skil.cz</TD> <TD>prikrylp@NOSPAM.skil.cz</TD>
<TD>strange</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Danish</TD> <TD>Danish</TD>
...@@ -115,13 +115,13 @@ when the translator was updated. ...@@ -115,13 +115,13 @@ when the translator was updated.
<TD>French</TD> <TD>French</TD>
<TD>Xavier Outhier</TD> <TD>Xavier Outhier</TD>
<TD>xouthier@NOSPAM.yahoo.fr</TD> <TD>xouthier@NOSPAM.yahoo.fr</TD>
<TD>strange</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>German</TD> <TD>German</TD>
<TD>Jens Seidel</TD> <TD>Jens Seidel</TD>
<TD>jensseidel@NOSPAM.users.sf.net</TD> <TD>jensseidel@NOSPAM.users.sf.net</TD>
<TD>strange</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Greek</TD> <TD>Greek</TD>
...@@ -139,7 +139,7 @@ when the translator was updated. ...@@ -139,7 +139,7 @@ when the translator was updated.
<TD>Italian</TD> <TD>Italian</TD>
<TD>Alessandro Falappa<br>Ahmed Aldo Faisal</TD> <TD>Alessandro Falappa<br>Ahmed Aldo Faisal</TD>
<TD>alessandro@NOSPAM.falappa.net<br>aaf23@NOSPAM.cam.ac.uk</TD> <TD>alessandro@NOSPAM.falappa.net<br>aaf23@NOSPAM.cam.ac.uk</TD>
<TD>strange</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Japanese</TD> <TD>Japanese</TD>
...@@ -230,7 +230,7 @@ when the translator was updated. ...@@ -230,7 +230,7 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\ {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline \hline
\hline \hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & strange \\ Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\
\hline \hline
Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\ Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\
\hline \hline
...@@ -239,9 +239,9 @@ when the translator was updated. ...@@ -239,9 +239,9 @@ when the translator was updated.
\hline \hline
Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\ Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\
\hline \hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & strange \\ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
\hline \hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & strange \\ Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
\hline \hline
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & strange \\ Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & strange \\
\hline \hline
...@@ -251,15 +251,15 @@ when the translator was updated. ...@@ -251,15 +251,15 @@ when the translator was updated.
\hline \hline
Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\ Finnish & Olli Korhonen & {\tt Olli.Korhonen@ccc.fi} & obsolete \\
\hline \hline
French & Xavier Outhier & {\tt xouthier@yahoo.fr} & strange \\ French & Xavier Outhier & {\tt xouthier@yahoo.fr} & up-to-date \\
\hline \hline
German & Jens Seidel & {\tt jensseidel@users.sf.net} & strange \\ German & Jens Seidel & {\tt jensseidel@users.sf.net} & up-to-date \\
\hline \hline
Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\ Greek & Harry Kalogirou & {\tt harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline \hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\ Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt foldvari@diatronltd.com} & 1.2.1 \\
\hline \hline
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & strange \\ Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\ & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline \hline
Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & strange \\ Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & strange \\
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3_20030514 Version: 1.3_20030524
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -1057,7 +1057,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1057,7 +1057,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (Config_getBool("HAVE_DOT") && Config_getBool("CLASS_GRAPH")) if (Config_getBool("HAVE_DOT") && Config_getBool("CLASS_GRAPH"))
// write class diagram using dot // write class diagram using dot
{ {
DotClassGraph inheritanceGraph(this,DotClassGraph::Inheritance,Config_getInt("MAX_DOT_GRAPH_DEPTH")); DotClassGraph inheritanceGraph(this,DotNode::Inheritance,Config_getInt("MAX_DOT_GRAPH_DEPTH"));
if (!inheritanceGraph.isTrivial()) if (!inheritanceGraph.isTrivial())
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
...@@ -1092,7 +1092,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1092,7 +1092,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (Config_getBool("HAVE_DOT") && Config_getBool("COLLABORATION_GRAPH")) if (Config_getBool("HAVE_DOT") && Config_getBool("COLLABORATION_GRAPH"))
{ {
DotClassGraph usageImplGraph(this,DotClassGraph::Implementation,Config_getInt("MAX_DOT_GRAPH_DEPTH")); DotClassGraph usageImplGraph(this,DotNode::Collaboration,Config_getInt("MAX_DOT_GRAPH_DEPTH"));
if (!usageImplGraph.isTrivial()) if (!usageImplGraph.isTrivial())
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
......
...@@ -2474,7 +2474,7 @@ void Config::create() ...@@ -2474,7 +2474,7 @@ void Config::create()
"TEMPLATE_RELATIONS", "TEMPLATE_RELATIONS",
"If set to YES, the inheritance and collaboration graphs will show the \n" "If set to YES, the inheritance and collaboration graphs will show the \n"
"relations between templates and their instances. \n", "relations between templates and their instances. \n",
TRUE FALSE
); );
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
......
...@@ -453,7 +453,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t) ...@@ -453,7 +453,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
t << " cp-documentation = <<_EnD_oF_dEf_TeXt_" << endl t << " cp-documentation = <<_EnD_oF_dEf_TeXt_" << endl
<< cd->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl; << cd->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance, DotClassGraph inheritanceGraph(cd,DotNode::Inheritance,
Config_getInt("MAX_DOT_GRAPH_DEPTH")); Config_getInt("MAX_DOT_GRAPH_DEPTH"));
if (!inheritanceGraph.isTrivial()) if (!inheritanceGraph.isTrivial())
{ {
...@@ -461,7 +461,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t) ...@@ -461,7 +461,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t)
inheritanceGraph.writeDEF(t); inheritanceGraph.writeDEF(t);
t << endl << "_EnD_oF_dEf_TeXt_;" << endl; t << endl << "_EnD_oF_dEf_TeXt_;" << endl;
} }
DotClassGraph collaborationGraph(cd,DotClassGraph::Implementation, DotClassGraph collaborationGraph(cd,DotNode::Collaboration,
Config_getInt("MAX_DOT_GRAPH_DEPTH")); Config_getInt("MAX_DOT_GRAPH_DEPTH"));
if (!collaborationGraph.isTrivial()) if (!collaborationGraph.isTrivial())
{ {
......
...@@ -279,7 +279,7 @@ OPNEW {BLANK}+"new"({BLANK}*"[]")? ...@@ -279,7 +279,7 @@ OPNEW {BLANK}+"new"({BLANK}*"[]")?
OPDEL {BLANK}+"delete"({BLANK}*"[]")? OPDEL {BLANK}+"delete"({BLANK}*"[]")?
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()" OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
OPCAST {BLANK}+[^(\r\n.,]+ OPCAST {BLANK}+[^(\r\n.,]+
OPMASK ({BLANK}*{OPNORM}({FUNCARG}?))|({OPCAST}{FUNCARG}) OPMASK ({BLANK}*{OPNORM}{FUNCARG})|({OPCAST}{FUNCARG})
LNKWORD1 ("::"|"#")?{SCOPEMASK} LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile") CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 {SCOPEPRE}*"operator"{OPMASK} LNKWORD2 {SCOPEPRE}*"operator"{OPMASK}
......
This diff is collapsed.
...@@ -47,21 +47,9 @@ struct EdgeInfo ...@@ -47,21 +47,9 @@ struct EdgeInfo
class DotNode class DotNode
{ {
friend class DotGfxHierarchyTable;
friend class DotClassGraph;
friend class DotInclDepGraph;
friend class DotNodeList;
friend void writeDotGraph(
DotNode *root,
GraphOutputFormat f,
const QCString &baseName,
bool lrRank,
bool renderParents,
int distance,
bool backArrow
);
public: public:
DotNode(int n,const char *lab,const char *url,int distance = 0,bool rootNode=FALSE); enum GraphType { Dependency, Inheritance, Collaboration, Hierarchy };
DotNode(int n,const char *lab,const char *url,int distance = 0,bool rootNode=FALSE,ClassDef *cd=0);
~DotNode(); ~DotNode();
void addChild(DotNode *n, void addChild(DotNode *n,
int edgeColor=EdgeInfo::Purple, int edgeColor=EdgeInfo::Purple,
...@@ -75,8 +63,8 @@ class DotNode ...@@ -75,8 +63,8 @@ class DotNode
void deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes=0); void deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes=0);
void removeChild(DotNode *n); void removeChild(DotNode *n);
void removeParent(DotNode *n); void removeParent(DotNode *n);
void write(QTextStream &t,GraphOutputFormat f,bool topDown,bool toChildren, void write(QTextStream &t,GraphType gt,GraphOutputFormat f,
int maxDistance,bool backArrows); bool topDown,bool toChildren,int maxDistance,bool backArrows);
int m_subgraphId; int m_subgraphId;
void clearWriteFlag(); void clearWriteFlag();
void writeXML(QTextStream &t,bool isClassGraph); void writeXML(QTextStream &t,bool isClassGraph);
...@@ -86,9 +74,9 @@ class DotNode ...@@ -86,9 +74,9 @@ class DotNode
private: private:
void colorConnectedNodes(int curColor); void colorConnectedNodes(int curColor);
void writeBox(QTextStream &t,GraphOutputFormat f, void writeBox(QTextStream &t,GraphType gt,GraphOutputFormat f,
bool hasNonReachableChildren); bool hasNonReachableChildren);
void writeArrow(QTextStream &t,GraphOutputFormat f,DotNode *cn, void writeArrow(QTextStream &t,GraphType gt,GraphOutputFormat f,DotNode *cn,
EdgeInfo *ei,bool topDown, bool pointBack=TRUE); EdgeInfo *ei,bool topDown, bool pointBack=TRUE);
const DotNode *findDocNode() const; // only works for acyclic graphs! const DotNode *findDocNode() const; // only works for acyclic graphs!
int m_number; int m_number;
...@@ -102,6 +90,22 @@ class DotNode ...@@ -102,6 +90,22 @@ class DotNode
bool m_hasDoc; //!< used to mark a node as documented bool m_hasDoc; //!< used to mark a node as documented
int m_distance; //!< distance to the root node int m_distance; //!< distance to the root node
bool m_isRoot; //!< indicates if this is a root node bool m_isRoot; //!< indicates if this is a root node
ClassDef * m_classDef; //!< class representing this node (can be 0)
friend class DotGfxHierarchyTable;
friend class DotClassGraph;
friend class DotInclDepGraph;
friend class DotNodeList;
friend void writeDotGraph(
DotNode *root,
GraphType gt,
GraphOutputFormat f,
const QCString &baseName,
bool lrRank,
bool renderParents,
int distance,
bool backArrow
);
}; };
class DotGfxHierarchyTable class DotGfxHierarchyTable
...@@ -124,8 +128,8 @@ class DotGfxHierarchyTable ...@@ -124,8 +128,8 @@ class DotGfxHierarchyTable
class DotClassGraph class DotClassGraph
{ {
public: public:
enum GraphType { Interface, Implementation, Inheritance }; //enum GraphType { Interface, Implementation, Inheritance };
DotClassGraph(ClassDef *cd,GraphType t,int maxRecusionDepth); DotClassGraph(ClassDef *cd,DotNode::GraphType t,int maxRecusionDepth);
~DotClassGraph(); ~DotClassGraph();
bool isTrivial() const; bool isTrivial() const;
QCString writeGraph(QTextStream &t,GraphOutputFormat f,const char *path, QCString writeGraph(QTextStream &t,GraphOutputFormat f,const char *path,
...@@ -140,13 +144,13 @@ class DotClassGraph ...@@ -140,13 +144,13 @@ class DotClassGraph
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 *usedName,const char *templSpec, int level,const char *usedName,const char *templSpec,
bool base); bool base);
DotNode *m_startNode; DotNode * m_startNode;
QDict<DotNode> *m_usedNodes; QDict<DotNode> * m_usedNodes;
static int m_curNodeNumber; static int m_curNodeNumber;
GraphType m_graphType; DotNode::GraphType m_graphType;
int m_recDepth; int m_recDepth;
QCString m_diskName; QCString m_diskName;
int m_maxDistance; int m_maxDistance;
}; };
class DotInclDepGraph class DotInclDepGraph
......
...@@ -2133,9 +2133,16 @@ static void buildFunctionList(Entry *root) ...@@ -2133,9 +2133,16 @@ static void buildFunctionList(Entry *root)
//printf("root->parent=`%s' cd=%p root->type.find(re,0)=%d\n", //printf("root->parent=`%s' cd=%p root->type.find(re,0)=%d\n",
// root->parent->name.data(),getClass(root->parent->name), // root->parent->name.data(),getClass(root->parent->name),
// root->type.find(re,0)); // root->type.find(re,0));
QCString scope=stripAnonymousNamespaceScope(root->parent->name.copy()); QCString scope=stripAnonymousNamespaceScope(root->parent->name);
scope=stripTemplateSpecifiersFromScope(scope,FALSE); scope=stripTemplateSpecifiersFromScope(scope,FALSE);
cd=getClass(scope);
if (cd && scope+"::"==rname.left(scope.length()+2)) // found A::f inside A
{
// strip scope from name
rname=rname.right(rname.length()-root->parent->name.length()-2);
}
bool isMember=FALSE; bool isMember=FALSE;
int memIndex=rname.find("::"); int memIndex=rname.find("::");
if (memIndex!=-1) if (memIndex!=-1)
...@@ -2154,7 +2161,7 @@ static void buildFunctionList(Entry *root) ...@@ -2154,7 +2161,7 @@ static void buildFunctionList(Entry *root)
if (root->parent && if (root->parent &&
!root->parent->name.isEmpty() && !root->parent->name.isEmpty() &&
(root->parent->section & Entry::COMPOUND_MASK) && (root->parent->section & Entry::COMPOUND_MASK) &&
(cd=getClass(scope)) && cd &&
// do some fuzzy things to exclude function pointers // do some fuzzy things to exclude function pointers
(root->type.isEmpty() || root->type.find(re,0)==-1 || (root->type.isEmpty() || root->type.find(re,0)==-1 ||
root->type.find(")(")!=-1 || root->type.find("operator")!=-1 root->type.find(")(")!=-1 || root->type.find("operator")!=-1
...@@ -4379,7 +4386,7 @@ static void findMember(Entry *root, ...@@ -4379,7 +4386,7 @@ static void findMember(Entry *root,
{ {
Debug::print(Debug::FindMembers,0, Debug::print(Debug::FindMembers,0,
"1. funcName=`%s'\n",funcName.data()); "1. funcName=`%s'\n",funcName.data());
if (funcName.left(9)=="operator ") if (funcName.left(9)=="operator ") // strip class scope from cast operator
{ {
funcName = substitute(funcName,className+"::",""); funcName = substitute(funcName,className+"::","");
} }
......
This diff is collapsed.
...@@ -75,7 +75,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr ...@@ -75,7 +75,7 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
} }
static void writeDefArgumentList(OutputList &ol,ClassDef *cd, static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
const QCString &scopeName,MemberDef *md) const QCString & /*scopeName*/,MemberDef *md)
{ {
ArgumentList *defArgList=md->isDocsForDefinition() ? ArgumentList *defArgList=md->isDocsForDefinition() ?
md->argumentList() : md->declArgumentList(); md->argumentList() : md->declArgumentList();
...@@ -96,10 +96,6 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -96,10 +96,6 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
Argument *a=defArgList->first(); Argument *a=defArgList->first();
QCString cName; QCString cName;
//if (md->scopeDefTemplateArguments())
//{
// cName=tempArgListToString(md->scopeDefTemplateArguments());
//}
if (cd) if (cd)
{ {
cName=cd->name(); cName=cd->name();
...@@ -138,13 +134,13 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -138,13 +134,13 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
//printf("a->type=`%s' a->name=`%s'\n",a->type.data(),a->name.data()); //printf("a->type=`%s' a->name=`%s'\n",a->type.data(),a->name.data());
QCString n=a->type.left(vp); QCString n=a->type.left(vp);
if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName); if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
linkifyText(TextGeneratorOLImpl(ol),scopeName,md->name(),n); linkifyText(TextGeneratorOLImpl(ol),cd,md->name(),n);
} }
else // non-function pointer type else // non-function pointer type
{ {
QCString n=a->type; QCString n=a->type;
if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName); if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
linkifyText(TextGeneratorOLImpl(ol),scopeName,md->name(),n); linkifyText(TextGeneratorOLImpl(ol),cd,md->name(),n);
} }
if (!md->isDefine()) if (!md->isDefine())
{ {
...@@ -169,7 +165,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -169,7 +165,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
if (vp!=-1) // write the part of the argument type if (vp!=-1) // write the part of the argument type
// that comes after the name // that comes after the name
{ {
linkifyText(TextGeneratorOLImpl(ol),scopeName, linkifyText(TextGeneratorOLImpl(ol),cd,
md->name(),a->type.right(a->type.length()-vp)); md->name(),a->type.right(a->type.length()-vp));
} }
if (!a->defval.isEmpty()) // write the default value if (!a->defval.isEmpty()) // write the default value
...@@ -177,7 +173,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -177,7 +173,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
QCString n=a->defval; QCString n=a->defval;
if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName); if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
ol.docify(" = "); ol.docify(" = ");
linkifyText(TextGeneratorOLImpl(ol),scopeName,md->name(),n); linkifyText(TextGeneratorOLImpl(ol),cd,md->name(),n);
} }
a=defArgList->next(); a=defArgList->next();
if (a) if (a)
...@@ -799,21 +795,21 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -799,21 +795,21 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
if (getAnonymousEnumType()) // type is an anonymous enum if (getAnonymousEnumType()) // type is an anonymous enum
{ {
linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype.left(i),TRUE); linkifyText(TextGeneratorOLImpl(ol),d,name(),ltype.left(i),TRUE);
getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd); getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd);
//ol+=*getAnonymousEnumType()->enumDecl(); //ol+=*getAnonymousEnumType()->enumDecl();
linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype.right(ltype.length()-i-l),TRUE); linkifyText(TextGeneratorOLImpl(ol),d,name(),ltype.right(ltype.length()-i-l),TRUE);
} }
else else
{ {
ltype = ltype.left(i) + " { ... } " + ltype.right(ltype.length()-i-l); ltype = ltype.left(i) + " { ... } " + ltype.right(ltype.length()-i-l);
linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype,TRUE); linkifyText(TextGeneratorOLImpl(ol),d,name(),ltype,TRUE);
} }
} }
} }
else else
{ {
linkifyText(TextGeneratorOLImpl(ol),cname,name(),ltype,TRUE); linkifyText(TextGeneratorOLImpl(ol),d,name(),ltype,TRUE);
} }
bool htmlOn = ol.isEnabled(OutputGenerator::Html); bool htmlOn = ol.isEnabled(OutputGenerator::Html);
if (htmlOn && Config_getBool("HTML_ALIGN_MEMBERS") && !ltype.isEmpty()) if (htmlOn && Config_getBool("HTML_ALIGN_MEMBERS") && !ltype.isEmpty())
...@@ -884,7 +880,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -884,7 +880,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
{ {
if (!isDefine()) ol.writeString(" "); if (!isDefine()) ol.writeString(" ");
//ol.docify(argsString()); //ol.docify(argsString());
linkifyText(TextGeneratorOLImpl(ol),cname,name(),argsString()); linkifyText(TextGeneratorOLImpl(ol),d,name(),argsString());
} }
if (excpString()) if (excpString())
...@@ -895,7 +891,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -895,7 +891,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (!bitfields.isEmpty()) // add bitfields if (!bitfields.isEmpty()) // add bitfields
{ {
linkifyText(TextGeneratorOLImpl(ol),cname,name(),bitfields.simplifyWhiteSpace()); linkifyText(TextGeneratorOLImpl(ol),d,name(),bitfields.simplifyWhiteSpace());
} }
else if (hasOneLineInitializer() else if (hasOneLineInitializer()
//!init.isEmpty() && initLines==0 && // one line initializer //!init.isEmpty() && initLines==0 && // one line initializer
...@@ -905,12 +901,12 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -905,12 +901,12 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (!isDefine()) if (!isDefine())
{ {
ol.writeString(" = "); ol.writeString(" = ");
linkifyText(TextGeneratorOLImpl(ol),cname,name(),init.simplifyWhiteSpace()); linkifyText(TextGeneratorOLImpl(ol),d,name(),init.simplifyWhiteSpace());
} }
else else
{ {
ol.writeNonBreakableSpace(3); ol.writeNonBreakableSpace(3);
linkifyText(TextGeneratorOLImpl(ol),cname,name(),init); linkifyText(TextGeneratorOLImpl(ol),d,name(),init);
} }
} }
...@@ -1087,10 +1083,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1087,10 +1083,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{ {
htmlHelp->addIndexItem(cname,name(),cfname,anchor()); htmlHelp->addIndexItem(cname,name(),cfname,anchor());
} }
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef.left(i)); linkifyText(TextGeneratorOLImpl(ol),container,name(),ldef.left(i));
//ol+=*vmd->enumDecl(); //ol+=*vmd->enumDecl();
vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef()); vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef());
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef.right(ldef.length()-i-l)); linkifyText(TextGeneratorOLImpl(ol),container,name(),ldef.right(ldef.length()-i-l));
found=TRUE; found=TRUE;
} }
...@@ -1115,7 +1111,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1115,7 +1111,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
// last ei characters of ldef contain pointer/reference specifiers // last ei characters of ldef contain pointer/reference specifiers
int ni=ldef.find("::",si); int ni=ldef.find("::",si);
if (ni>=ei) ei=ni+2; if (ni>=ei) ei=ni+2;
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef.right(ldef.length()-ei)); linkifyText(TextGeneratorOLImpl(ol),container,name(),ldef.right(ldef.length()-ei));
} }
} }
else // not an enum value else // not an enum value
...@@ -1177,25 +1173,25 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1177,25 +1173,25 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
} }
} }
ol.startMemberDocName(); ol.startMemberDocName();
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef); linkifyText(TextGeneratorOLImpl(ol),container,name(),ldef);
writeDefArgumentList(ol,cd,scopeName,this); writeDefArgumentList(ol,cd,scopeName,this);
if (hasOneLineInitializer()) // add initializer if (hasOneLineInitializer()) // add initializer
{ {
if (!isDefine()) if (!isDefine())
{ {
ol.docify(" = "); ol.docify(" = ");
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),init.simplifyWhiteSpace()); linkifyText(TextGeneratorOLImpl(ol),container,name(),init.simplifyWhiteSpace());
} }
else else
{ {
ol.writeNonBreakableSpace(3); ol.writeNonBreakableSpace(3);
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),init); linkifyText(TextGeneratorOLImpl(ol),container,name(),init);
} }
} }
if (excpString()) // add exception list if (excpString()) // add exception list
{ {
ol.docify(" "); ol.docify(" ");
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),excpString()); linkifyText(TextGeneratorOLImpl(ol),container,name(),excpString());
} }
} }
...@@ -1809,7 +1805,14 @@ void MemberDef::addListReference(Definition *d) ...@@ -1809,7 +1805,14 @@ void MemberDef::addListReference(Definition *d)
Definition *pd=getOuterScope(); Definition *pd=getOuterScope();
if (pd && pd!=Doxygen::globalScope) if (pd && pd!=Doxygen::globalScope)
{ {
memName.prepend(pd->name()+"::"); if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
memName.prepend(pd->name()+".");
}
else
{
memName.prepend(pd->name()+"::");
}
} }
} }
//printf("*** addListReference %s todo=%d test=%d bug=%d\n",name().data(),todoId(),testId(),bugId()); //printf("*** addListReference %s todo=%d test=%d bug=%d\n",name().data(),todoId(),testId(),bugId());
......
...@@ -1659,7 +1659,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1659,7 +1659,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
<SkipCComment>"/*" { <SkipCComment>"/*" {
outputChar('/');outputChar('*'); outputChar('/');outputChar('*');
g_commentCount++; //g_commentCount++;
} }
<SkipCComment>[^*\n\/]+ { <SkipCComment>[^*\n\/]+ {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
......
...@@ -1731,6 +1731,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -1731,6 +1731,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<CopyCurly>[^"'{}\/\n]+ { <CopyCurly>[^"'{}\/\n]+ {
*pCopyCurlyString+=yytext; *pCopyCurlyString+=yytext;
} }
<CopyCurly>"/" { *pCopyCurlyString+=yytext; }
<CopyCurly>\n { <CopyCurly>\n {
yyLineNr++; yyLineNr++;
*pCopyCurlyString+=*yytext; *pCopyCurlyString+=*yytext;
......
...@@ -49,11 +49,14 @@ ...@@ -49,11 +49,14 @@
// //
// 2003/02/26 // 2003/02/26
// - Added strings for 1.2.18 // - Added strings for 1.2.18
//
// 2003/04/29
// - Added strings for 1.3.0
#ifndef TRANSLATOR_HR_H #ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H #define TRANSLATOR_HR_H
class TranslatorCroatian : public TranslatorAdapter_1_3 class TranslatorCroatian : public Translator
{ {
private: private:
/*! to avoid macro redefinition from translator_cz.h */ /*! to avoid macro redefinition from translator_cz.h */
...@@ -887,12 +890,12 @@ class TranslatorCroatian : public TranslatorAdapter_1_3 ...@@ -887,12 +890,12 @@ class TranslatorCroatian : public TranslatorAdapter_1_3
/*! Used as a marker that is put before a \\bug item */ /*! Used as a marker that is put before a \\bug item */
virtual QCString trBug() virtual QCString trBug()
{ {
return decode("Greka"); return decode("Greka");
} }
/*! Used as the header of the bug list */ /*! Used as the header of the bug list */
virtual QCString trBugList() virtual QCString trBugList()
{ {
return decode("Popis greaka"); return decode("Popis greaka");
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1089,6 +1092,45 @@ class TranslatorCroatian : public TranslatorAdapter_1_3 ...@@ -1089,6 +1092,45 @@ class TranslatorCroatian : public TranslatorAdapter_1_3
{ {
return decode("Dokumentacija dogaaja"); return decode("Dokumentacija dogaaja");
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a heading for a list of Java class types with package scope.
*/
virtual QCString trPackageTypes()
{
return "Tipovi u paketu";
}
/*! Used as a heading for a list of Java class functions with package
* scope.
*/
virtual QCString trPackageMembers()
{
return "Funkcije u paketu";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
*/
virtual QCString trStaticPackageMembers()
{
return decode("Statike funkcije u paketu");
}
/*! Used as a heading for a list of Java class variables with package
* scope.
*/
virtual QCString trPackageAttribs()
{
return "Atributi u paketu";
}
/*! Used as a heading for a list of static Java class variables with
* package scope.
*/
virtual QCString trStaticPackageAttribs()
{
return decode("Statiki atributi u paketu");
}
}; };
#endif #endif
...@@ -416,10 +416,6 @@ QCString resolveTypeDef(Definition *context,const QCString &qualifiedName, ...@@ -416,10 +416,6 @@ QCString resolveTypeDef(Definition *context,const QCString &qualifiedName,
{ {
resName=qualifiedName.right(qualifiedName.length()-scopeIndex-2); resName=qualifiedName.right(qualifiedName.length()-scopeIndex-2);
} }
else
{
resName=qualifiedName;
}
MemberDef *md=0; MemberDef *md=0;
while (mContext && md==0) while (mContext && md==0)
{ {
...@@ -445,6 +441,7 @@ QCString resolveTypeDef(Definition *context,const QCString &qualifiedName, ...@@ -445,6 +441,7 @@ QCString resolveTypeDef(Definition *context,const QCString &qualifiedName,
ps=is+l; ps=is+l;
} }
} }
//printf("resScope=%s\n",resScope?resScope->name().data():"<none>");
// step 2: get the member // step 2: get the member
if (resScope) // no scope or scope found in the current context if (resScope) // no scope or scope found in the current context
...@@ -471,9 +468,14 @@ QCString resolveTypeDef(Definition *context,const QCString &qualifiedName, ...@@ -471,9 +468,14 @@ QCString resolveTypeDef(Definition *context,const QCString &qualifiedName,
// tmd->name().data(), resScope->name().data(), // tmd->name().data(), resScope->name().data(),
// tmd->getOuterScope()->name().data(), mContext); // tmd->getOuterScope()->name().data(), mContext);
if (tmd->isTypedef() /*&& tmd->getOuterScope()==resScope*/) if (tmd->isTypedef() /*&& tmd->getOuterScope()==resScope*/)
/*! TODO: look if resScope is visible within tmd->getOuterScope() */
{ {
md=tmd; // look if resScope is visible within tmd->getOuterScope()
Definition *d = tmd->getOuterScope();
while (d && d!=resScope) d=d->getOuterScope();
if (d)
{
md=tmd;
}
} }
} }
} }
...@@ -544,13 +546,13 @@ ClassDef *getResolvedClass( ...@@ -544,13 +546,13 @@ ClassDef *getResolvedClass(
QCString name = n; QCString name = n;
if (scope==0) scope=Doxygen::globalScope; if (scope==0) scope=Doxygen::globalScope;
if (name.isEmpty()) return 0; if (name.isEmpty()) return 0;
//int index = name.findRev("::");
ClassDef *cd=0; ClassDef *cd=0;
//printf("===================\n"); //printf("===================\n");
do do
{ {
Definition *typedefScope = 0; Definition *typedefScope = 0;
//printf("-----------------------------------------------------\n");
QCString subst = resolveTypeDef(scope,name,&typedefScope); QCString subst = resolveTypeDef(scope,name,&typedefScope);
//printf("trying getResolvedClass(%s,%s) => subst=%s\n", //printf("trying getResolvedClass(%s,%s) => subst=%s\n",
// scope ? scope->name().data() : "<none>", name.data(),subst.data()); // scope ? scope->name().data() : "<none>", name.data(),subst.data());
...@@ -753,11 +755,12 @@ bool leftScopeMatch(const QCString &scope, const QCString &name) ...@@ -753,11 +755,12 @@ bool leftScopeMatch(const QCString &scope, const QCString &name)
} }
void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *name,const char *text,bool autoBreak,bool external) void linkifyText(const TextGeneratorIntf &out,Definition *scope,const char * /*name*/,const char *text,bool autoBreak,bool external)
{ {
//printf("scope=`%s' name=`%s' Text: `%s'\n",scName,name,text); //printf("scope=`%s' name=`%s' Text: `%s'\n",scName,name,text);
static QRegExp regExp("[a-z_A-Z][a-z_A-Z0-9:]*"); static QRegExp regExp("[a-z_A-Z][a-z_A-Z0-9:]*");
QCString txtStr=text; QCString txtStr=text;
QCString scopeName;
int strLen = txtStr.length(); int strLen = txtStr.length();
//printf("linkifyText strtxt=%s strlen=%d\n",txtStr.data(),strLen); //printf("linkifyText strtxt=%s strlen=%d\n",txtStr.data(),strLen);
int matchLen; int matchLen;
...@@ -803,39 +806,38 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam ...@@ -803,39 +806,38 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam
NamespaceDef *nd=0; NamespaceDef *nd=0;
GroupDef *gd=0; GroupDef *gd=0;
QCString scopeName=scName; //QCString searchName=name;
QCString searchName=name; //printf("word=`%s' scope=`%s'\n",
//printf("word=`%s' scopeName=`%s' searchName=`%s'\n", // word.data(),scope ? scope->name().data() : "<none>"
// word.data(),scopeName.data(),searchName.data()
// ); // );
Definition *curScope = scope;
// check if `word' is a documented class name // check if `word' is a documented class name
if (//!word.isEmpty() && if (
//!(isdigit(word.at(0)) || word.at(0)=='-') && 1
// // do not try to link digits /* !rightScopeMatch(word,searchName) &&
// // (saves a lot of time for large arrays) !rightScopeMatch(scopeName,word) */
!rightScopeMatch(word,searchName) &&
!rightScopeMatch(scopeName,word)
) )
{ {
//printf("Searching...\n"); //printf("Searching...\n");
int scopeOffset=scopeName.length(); //int scopeOffset=scopeName.length();
bool found=FALSE; bool found=FALSE;
do // for each scope (starting with full scope and going to empty scope) do // for each scope (starting with full scope and going to empty scope)
{ {
QCString fullName = word; QCString fullName = word;
QCString prefix; QCString prefix;
replaceNamespaceAliases(fullName,fullName.length()); replaceNamespaceAliases(fullName,fullName.length());
if (scopeOffset>0) //if (scopeOffset>0)
if (curScope)
{ {
//prefix = scopeName.left(scopeOffset);
prefix = scopeName.left(scopeOffset); prefix = curScope->name();
replaceNamespaceAliases(prefix,scopeOffset); replaceNamespaceAliases(prefix,prefix.length());
fullName.prepend(prefix+"::"); fullName.prepend(prefix+"::");
} }
//printf("Trying class %s\n",fullName.data()); //printf("Trying class %s\n",fullName.data());
bool isTypeDef=FALSE; bool isTypeDef=FALSE;
if ((cd=getResolvedClass(Doxygen::globalScope,fullName,&isTypeDef))) if ((cd=getResolvedClass(scope,fullName,&isTypeDef)))
{ {
// add link to the result // add link to the result
if (external ? cd->isLinkable() : cd->isLinkableInProject()) if (external ? cd->isLinkable() : cd->isLinkableInProject())
...@@ -850,20 +852,30 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam ...@@ -850,20 +852,30 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam
goto endloop; goto endloop;
} }
if (scopeOffset==0) //if (scopeOffset==0)
{ //{
scopeOffset=-1; // scopeOffset=-1;
} //}
else if ((scopeOffset=scopeName.findRev("::",scopeOffset-1))==-1) //else if ((scopeOffset=scopeName.findRev("::",scopeOffset-1))==-1)
{ //{
scopeOffset=0; // scopeOffset=0;
} //}
} while (!found && scopeOffset>=0); if (curScope) curScope = curScope->getOuterScope();
} //while (!found && scopeOffset>=0);
while (!found && curScope);
endloop: endloop:
if (scope &&
(scope->definitionType()==Definition::TypeClass ||
scope->definitionType()==Definition::TypeNamespace
)
)
{
scopeName=scope->name();
}
//if (!found) printf("Trying to link %s in %s\n",word.data(),scName); //if (!found) printf("Trying to link %s in %s\n",word.data(),scName);
if (!found && if (!found &&
getDefs(scName,word,0,md,cd,fd,nd,gd) && getDefs(scopeName,word,0,md,cd,fd,nd,gd) &&
(md->isTypedef() || md->isEnumerate() || (md->isTypedef() || md->isEnumerate() ||
md->isReference() || md->isVariable() md->isReference() || md->isVariable()
) && ) &&
...@@ -2265,7 +2277,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2265,7 +2277,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
fd=md->getFileDef(); fd=md->getFileDef();
gd=md->getGroupDef(); gd=md->getGroupDef();
//printf("md->name()=`%s' md->args=`%s' fd=%p gd=%p\n", //printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
// md->name().data(),args,fd,gd); // md->name().data(),args,fd,gd);
if ( if (
(gd && gd->isLinkable()) || (fd && fd->isLinkable()) (gd && gd->isLinkable()) || (fd && fd->isLinkable())
...@@ -3416,14 +3428,14 @@ QCString substituteTemplateArgumentsInString( ...@@ -3416,14 +3428,14 @@ QCString substituteTemplateArgumentsInString(
if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
{ {
// replace formal argument with the actual argument of the instance // replace formal argument with the actual argument of the instance
result += actArg->type; result += actArg->type+" ";
found=TRUE; found=TRUE;
} }
else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty() && else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty() &&
formArg->defval!=name /* to prevent recursion */ formArg->defval!=name /* to prevent recursion */
) )
{ {
result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs); result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs)+" ";
found=TRUE; found=TRUE;
} }
} }
......
...@@ -76,7 +76,7 @@ class TextGeneratorOLImpl : public TextGeneratorIntf ...@@ -76,7 +76,7 @@ class TextGeneratorOLImpl : public TextGeneratorIntf
//-------------------------------------------------------------------- //--------------------------------------------------------------------
void linkifyText(const TextGeneratorIntf &ol,const char *clName,const char *name, void linkifyText(const TextGeneratorIntf &ol,Definition *scope,const char *name,
const char *text,bool autoBreak=FALSE,bool external=TRUE); const char *text,bool autoBreak=FALSE,bool external=TRUE);
void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId=-1); void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId=-1);
QCString fileToString(const char *name,bool filter=FALSE); QCString fileToString(const char *name,bool filter=FALSE);
......
...@@ -320,7 +320,7 @@ class XMLCodeGenerator : public BaseCodeDocInterface ...@@ -320,7 +320,7 @@ class XMLCodeGenerator : public BaseCodeDocInterface
}; };
static void writeTemplateArgumentList(ArgumentList *al,QTextStream &t,const char *name,int indent) static void writeTemplateArgumentList(ArgumentList *al,QTextStream &t,Definition *scope,int indent)
{ {
QCString indentStr; QCString indentStr;
indentStr.fill(' ',indent); indentStr.fill(' ',indent);
...@@ -335,7 +335,7 @@ static void writeTemplateArgumentList(ArgumentList *al,QTextStream &t,const char ...@@ -335,7 +335,7 @@ static void writeTemplateArgumentList(ArgumentList *al,QTextStream &t,const char
if (!a->type.isEmpty()) if (!a->type.isEmpty())
{ {
t << indentStr << " <type>"; t << indentStr << " <type>";
linkifyText(TextGeneratorXMLImpl(t),name,0,a->type); linkifyText(TextGeneratorXMLImpl(t),scope,0,a->type);
t << "</type>" << endl; t << "</type>" << endl;
} }
if (!a->name.isEmpty()) if (!a->name.isEmpty())
...@@ -346,7 +346,7 @@ static void writeTemplateArgumentList(ArgumentList *al,QTextStream &t,const char ...@@ -346,7 +346,7 @@ static void writeTemplateArgumentList(ArgumentList *al,QTextStream &t,const char
if (!a->defval.isEmpty()) if (!a->defval.isEmpty())
{ {
t << indentStr << " <defval>"; t << indentStr << " <defval>";
linkifyText(TextGeneratorXMLImpl(t),name,0,a->defval); linkifyText(TextGeneratorXMLImpl(t),scope,0,a->defval);
t << "</defval>" << endl; t << "</defval>" << endl;
} }
t << indentStr << " </param>" << endl; t << indentStr << " </param>" << endl;
...@@ -357,17 +357,15 @@ static void writeTemplateArgumentList(ArgumentList *al,QTextStream &t,const char ...@@ -357,17 +357,15 @@ static void writeTemplateArgumentList(ArgumentList *al,QTextStream &t,const char
static void writeMemberTemplateLists(MemberDef *md,QTextStream &t) static void writeMemberTemplateLists(MemberDef *md,QTextStream &t)
{ {
ClassDef *cd = md->getClassDef();
const char *cname = cd ? cd->name().data() : 0;
if (md->templateArguments()) // function template prefix if (md->templateArguments()) // function template prefix
{ {
writeTemplateArgumentList(md->templateArguments(),t,cname,8); writeTemplateArgumentList(md->templateArguments(),t,md->getClassDef(),8);
} }
} }
static void writeTemplateList(ClassDef *cd,QTextStream &t) static void writeTemplateList(ClassDef *cd,QTextStream &t)
{ {
writeTemplateArgumentList(cd->templateArguments(),t,cd->name(),4); writeTemplateArgumentList(cd->templateArguments(),t,cd,4);
} }
static void writeXMLDocBlock(QTextStream &t, static void writeXMLDocBlock(QTextStream &t,
...@@ -556,7 +554,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -556,7 +554,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
} }
QCString typeStr = md->typeString(); //replaceAnonymousScopes(md->typeString()); QCString typeStr = md->typeString(); //replaceAnonymousScopes(md->typeString());
t << " <type>"; t << " <type>";
linkifyText(TextGeneratorXMLImpl(t),scopeName,md->name(),typeStr); linkifyText(TextGeneratorXMLImpl(t),def,md->name(),typeStr);
t << "</type>" << endl; t << "</type>" << endl;
t << " <definition>" << convertToXML(md->definition()) << "</definition>" << endl; t << " <definition>" << convertToXML(md->definition()) << "</definition>" << endl;
t << " <argsstring>" << convertToXML(md->argsString()) << "</argsstring>" << endl; t << " <argsstring>" << convertToXML(md->argsString()) << "</argsstring>" << endl;
...@@ -604,7 +602,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -604,7 +602,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (!a->type.isEmpty()) if (!a->type.isEmpty())
{ {
t << " <type>"; t << " <type>";
linkifyText(TextGeneratorXMLImpl(t),scopeName,md->name(),a->type); linkifyText(TextGeneratorXMLImpl(t),def,md->name(),a->type);
t << "</type>" << endl; t << "</type>" << endl;
} }
if (!a->name.isEmpty()) if (!a->name.isEmpty())
...@@ -628,7 +626,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -628,7 +626,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (!a->defval.isEmpty()) if (!a->defval.isEmpty())
{ {
t << " <defval>"; t << " <defval>";
linkifyText(TextGeneratorXMLImpl(t),scopeName,md->name(),a->defval); linkifyText(TextGeneratorXMLImpl(t),def,md->name(),a->defval);
t << "</defval>" << endl; t << "</defval>" << endl;
} }
if (defArg && defArg->hasDocumentation()) if (defArg && defArg->hasDocumentation())
...@@ -656,14 +654,14 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -656,14 +654,14 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (!md->initializer().isEmpty()) if (!md->initializer().isEmpty())
{ {
t << " <initializer>"; t << " <initializer>";
linkifyText(TextGeneratorXMLImpl(t),scopeName,md->name(),md->initializer()); linkifyText(TextGeneratorXMLImpl(t),def,md->name(),md->initializer());
t << "</initializer>" << endl; t << "</initializer>" << endl;
} }
if (md->excpString()) if (md->excpString())
{ {
t << " <exceptions>"; t << " <exceptions>";
linkifyText(TextGeneratorXMLImpl(t),scopeName,md->name(),md->excpString()); linkifyText(TextGeneratorXMLImpl(t),def,md->name(),md->excpString());
t << "</exceptions>" << endl; t << "</exceptions>" << endl;
} }
...@@ -983,7 +981,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -983,7 +981,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
t << " <detaileddescription>" << endl; t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,cd->docFile(),cd->docLine(),cd->name(),0,cd->documentation()); writeXMLDocBlock(t,cd->docFile(),cd->docLine(),cd->name(),0,cd->documentation());
t << " </detaileddescription>" << endl; t << " </detaileddescription>" << endl;
DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance, DotClassGraph inheritanceGraph(cd,DotNode::Inheritance,
Config_getInt("MAX_DOT_GRAPH_DEPTH")); Config_getInt("MAX_DOT_GRAPH_DEPTH"));
if (!inheritanceGraph.isTrivial()) if (!inheritanceGraph.isTrivial())
{ {
...@@ -991,7 +989,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -991,7 +989,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
inheritanceGraph.writeXML(t); inheritanceGraph.writeXML(t);
t << " </inheritancegraph>" << endl; t << " </inheritancegraph>" << endl;
} }
DotClassGraph collaborationGraph(cd,DotClassGraph::Implementation, DotClassGraph collaborationGraph(cd,DotNode::Collaboration,
Config_getInt("MAX_DOT_GRAPH_DEPTH")); Config_getInt("MAX_DOT_GRAPH_DEPTH"));
if (!collaborationGraph.isTrivial()) if (!collaborationGraph.isTrivial())
{ {
......
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