Commit ecdf7c39 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3-20030524

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