Commit 69ead65c authored by dimitri's avatar dimitri

Release-20000910

parent 92663f87
DOXYGEN Version 1.2.1-20000829
DOXYGEN Version 1.2.1-20000910
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (29 August 2000)
Dimitri van Heesch (10 September 2000)
DOXYGEN Version 1.2.1-20000829
DOXYGEN Version 1.2.1-20000910
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (29 August 2000)
Dimitri van Heesch (10 September 2000)
1.2.1-20000829
1.2.1-20000910
......@@ -775,7 +775,7 @@ void init()
"information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n"
"Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n"
"Spanish, Russian, Croatian, Polish, and Portuguese.\n"
"Korean, Hungarian, Spanish, Russian, Croatian, Polish, and Portuguese.\n"
);
ConfigString::addFixedValue("outputLanguage","English");
ConfigString::addFixedValue("outputLanguage","Dutch");
......@@ -785,7 +785,9 @@ void init()
ConfigString::addFixedValue("outputLanguage","Swedish");
ConfigString::addFixedValue("outputLanguage","German");
ConfigString::addFixedValue("outputLanguage","Finnish");
ConfigString::addFixedValue("outputLanguage","Hungarian");
ConfigString::addFixedValue("outputLanguage","Japanese");
ConfigString::addFixedValue("outputLanguage","Korean");
ConfigString::addFixedValue("outputLanguage","Spanish");
ConfigString::addFixedValue("outputLanguage","Russian");
ConfigString::addFixedValue("outputLanguage","Croatian");
......@@ -920,11 +922,11 @@ void init()
"CASE_SENSE_NAMES",
"TRUE",
"determines if output can be mixed case.",
"If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen \n"
"will only generate file names in lower case letters. If set to \n"
"YES upper case letters are also allowed. This is useful if you have \n"
"classes or files whose names only differ in case and if your file system \n"
"supports case sensitive file names. \n"
"If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \n"
"file names in lower case letters. If set to YES upper case letters are also \n"
"allowed. This is useful if you have classes or files whose names only differ \n"
"in case and if your file system supports case sensitive file names. Windows \n"
"users are adviced to set this option to NO.\n"
);
ConfigBool::add( "hideScopeNames",
"HIDE_SCOPE_NAMES",
......@@ -983,6 +985,15 @@ void init()
"alphabetically by member name. If set to NO the members will appear in \n"
"declaration order. \n"
);
ConfigBool::add( "distributeDocFlag",
"DISTRIBUTE_GROUP_DOC",
"FALSE",
"distribute docs over member group?",
"If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n"
"tag is set to YES, then doxygen will reuse the documentation of the first \n"
"member in the group (if any) for the other members of the group. By default \n"
"all members of a group must be documented explicitly.\n"
);
ConfigInt::add( "tabSize",
"TAB_SIZE",
"8",
......@@ -1019,7 +1030,7 @@ void init()
"",
"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"
"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"
......
......@@ -66,6 +66,7 @@ followed by the descriptions of the tags grouped by category.
\begin{multicols}{3}
\begin{CompactList}
\endlatexonly
<li> \refitem cfg_aliases ALIASES
<li> \refitem cfg_allexternals ALLEXTERNALS
<li> \refitem cfg_alphabetical_index ALPHABETICAL_INDEX
<li> \refitem cfg_always_detailed_sec ALWAYS_DETAILED_SEC
......@@ -81,6 +82,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_compact_latex COMPACT_LATEX
<li> \refitem cfg_compact_rtf COMPACT_RTF
<li> \refitem cfg_disable_index DISABLE_INDEX
<li> \refitem cfg_distribute_group_doc DISTRIBUTE_GROUP_DOC
<li> \refitem cfg_doc_abspath DOC_ABSPATH
<li> \refitem cfg_doc_url DOC_URL
<li> \refitem cfg_dot_path DOT_PATH
......@@ -104,6 +106,8 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_generate_man GENERATE_MAN
<li> \refitem cfg_generate_rtf GENERATE_RTF
<li> \refitem cfg_generate_tagfile GENERATE_TAGFILE
<li> \refitem cfg_generate_testlist GENERATE_TESTLIST
<li> \refitem cfg_generate_todolist GENERATE_TODOLIST
<li> \refitem cfg_graphical_hierarchy GRAPHICAL_HIERARCHY
<li> \refitem cfg_have_dot HAVE_DOT
<li> \refitem cfg_hide_scope_names HIDE_SCOPE_NAMES
......@@ -203,8 +207,8 @@ followed by the descriptions of the tags grouped by category.
documentation generated by doxygen is written. Doxygen will use this
information to generate all constant output in the proper language.
The default language is English, other supported languages are:
Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese,
Spanish, Russian, Croatian, Polish and Portuguese.
Dutch, French, Italian, Czech, Swedish, German, Finnish, Hungarian, Japanese,
Korean, Spanish, Russian, Croatian, Polish and Portuguese.
\anchor cfg_disable_index
<dt>\c DISABLE_INDEX <dd>
......@@ -392,6 +396,14 @@ followed by the descriptions of the tags grouped by category.
alphabetically by member name. If set to \c NO the members will appear in
declaration order.
\anchor cfg_distribute_group_doc
<dt>\c DISTRIBUTE_GROUP_DOC <dd>
\addindex DISTRIBUTE_GROUP_DOC
If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
tag is set to YES, then doxygen will reuse the documentation of the first
member in the group (if any) for the other members of the group. By default
all members of a group must be documented explicitly.
\anchor cfg_tab_size
<dt>\c TAB_SIZE <dd>
\addindex TAB_SIZE
......@@ -405,6 +417,39 @@ followed by the descriptions of the tags grouped by category.
documentation sections, marked by \ref cmdif "\\if" \<section-label\> ...
\ref cmdendif "\\endif" blocks.
\anchor cfg_generate_todolist
<dt>\c GENERATE_TODOLIST <dd>
\addindex GENERATE_TODOLIST
The GENERATE_TODOLIST tag can be used to enable (YES) or
disable (NO) the todo list. This list is created by
putting \ref cmdtodo "\\todo"
commands in the documentation.
\anchor cfg_generate_testlist
<dt>\c GENERATE_TESTLIST <dd>
\addindex GENERATE_TESTLIST
The GENERATE_TESTLIST tag can be used to enable (YES) or
disable (NO) the test list. This list is created by
putting \ref cmdtest "\\test" commands in the documentation.
\anchor cfg_aliases
<dt>\c ALIASES <dd>
\addindex ALIASES
This tag can be used to specify a number of aliases that acts
as commands in the documentation. An alias has the form
\verbatim
name=value
\endverbatim
For example adding
\verbatim
"sideeffect=\par Side Effects:\n"
\endverbatim
will allow you to
put the command \\sideeffect (or \@sideeffect) in the documentation, which
will result in a user defined paragraph with heading "Side Effects:".
You can put \\n's in the value part of an alias to insert newlines.
Predefined commands cannot be overwritten using aliases.
</dl>
\subsection messages_input Options related to warning and progress messages
......
......@@ -169,6 +169,16 @@ EXCLUDE_PATTERNS = */test/*
Put a \% in front of the class name. Like this: \%MyClass. Doxygen will then
remove the % and keep the word unlinked.
<li><b>Help! I get the cryptic message
"input buffer overflow, can't enlarge buffer because scanner uses REJECT"</b>
This error happens when doxygen lexical scanner has a rules that matches
more than 16K input character in one go. I've seen this happening
on a very large generated file (>16K lines), where the built-in preprocessor
converted it into an empty file (with >16K of newlines). Another case
where this might happen is if you have lines in you code with more than
16K characters.
</ol>
\htmlonly
......
......@@ -23,7 +23,7 @@
<li>Requires very little overhead from the writer of the documentation.
Plain text will do, but for more fancy or structured output HTML tags
and/or some of doxygen's special commands can be used.
<li>Supports C++, (Corba and Microsoft) IDL and C sources.
<li>Supports C++, (Corba, Microsoft, and KDE-DCOP) IDL and C sources.
<li>Supports documentation of files, namespaces, classes, structs, unions,
templates, variables, functions, typedefs, enums and defines.
<li>JavaDoc (1.1), Qt-Doc, and KDOC compatible.
......
......@@ -49,8 +49,8 @@ Documents produced by Doxygen are derivative works derived from the
input used in their production; they are not affected by this license.
<h2>Introduction</h2>
Doxygen is a documentation system for C++, IDL (Corba and Microsoft flavors)
and C.
Doxygen is a documentation system for C++, IDL
(Corba, Microsoft and KDE-DCOP flavors) and C.
It can help you in three ways:
<ol>
......
......@@ -22,9 +22,9 @@ Doxygen has support for multiple languages. This means that the text fragments t
doxygen generates can changed into languages other than English
(the default) at configuration time.
<p>
Currently, supported languages are English, French, Czech, Dutch,
Swedish, Italian, German and Japanese. A number
of people have volunteered to add support for other languages as well.
Currently, supported languages are English, French, Czech, Dutch, Spannish,
Swedish, Russian, Czech, Croatian, Italian, Hungarian, Finnish, German and Japanese,
and Korean.
Here is a list of the languages and their current maintainers:
<p>
......@@ -155,6 +155,30 @@ Here is a list of the languages and their current maintainers:
snob@NOSPAM.int.spb.ru</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Korean
</TD>
<TD>
Richard Kim
</TD>
<TD>
<a href="mailto:ryk@NOSPAM.dspwiz.com">
ryk@NOSPAM.dspwiz.com</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Hungarian
</TD>
<TD>
Fldvri Gyrgy
</TD>
<TD>
<a href="mailto:foldvari@NOSPAM.diatronltd.com">
foldvari@NOSPAM.diatronltd.com</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Croatian
......@@ -167,7 +191,6 @@ Here is a list of the languages and their current maintainers:
boris.bralo@NOSPAM.zg.tel.hr</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Polish
......@@ -225,6 +248,10 @@ Here is a list of the languages and their current maintainers:
\hline
Russian & Nickolay Semyonov & {\tt snob@int.spb.ru} \\
\hline
Korean & Richard Kim & {\\tt ryk@dspwiz.com} \\
\hline
Hungarian & Fldvri Gyrgy & {\\tt foldvari@diatronltd.com} \\
\hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} \\
\hline
Polish & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} \\
......
Name: doxygen
Version: 1.2.1-20000829
Version: 1.2.1-20000910
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -178,6 +178,7 @@ void ClassDef::addMembersToMemberGroup()
addMemberListToGroup(&pubAttribs);
addMemberListToGroup(&pubSlots);
addMemberListToGroup(&signals);
addMemberListToGroup(&dcopMethods);
addMemberListToGroup(&pubStaticMembers);
addMemberListToGroup(&pubStaticAttribs);
addMemberListToGroup(&proTypes);
......@@ -219,11 +220,15 @@ void ClassDef::insertMember(MemberDef *md)
{
switch (md->memberType())
{
case MemberDef::Signal:
case MemberDef::Signal: // Qt specific
signals.append(md);
md->setSectionList(&signals);
break;
case MemberDef::Slot:
case MemberDef::DCOP: // KDE2 specific
dcopMethods.append(md);
md->setSectionList(&dcopMethods);
break;
case MemberDef::Slot: // Qt specific
switch (md->protection())
{
case Protected:
......@@ -358,7 +363,8 @@ void ClassDef::insertMember(MemberDef *md)
{
switch (md->memberType())
{
case MemberDef::Signal:
case MemberDef::Signal: // fall through
case MemberDef::DCOP:
if (Config::sortMembersFlag)
functionMembers.inSort(md);
else
......@@ -511,6 +517,7 @@ void ClassDef::computeAnchors()
setAnchors('s',&pubTypes);
setAnchors('t',&proTypes);
setAnchors('u',&priTypes);
setAnchors('v',&dcopMethods);
}
void ClassDef::distributeMemberGroupDocumentation()
......@@ -857,6 +864,8 @@ void ClassDef::writeDocumentation(OutputList &ol)
pubAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicAttribs(),0);
pubSlots.writeDeclarations(ol,this,0,0,0,theTranslator->trPublicSlots(),0);
signals.writeDeclarations(ol,this,0,0,0,theTranslator->trSignals(),0);
dcopMethods.writeDeclarations(ol,this,0,0,0,theTranslator->trDCOPMethods(),0);
// static public members
pubStaticMembers.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPublicMembers(),0);
pubStaticAttribs.writeDeclarations(ol,this,0,0,0,theTranslator->trStaticPublicAttribs(),0);
......@@ -1066,7 +1075,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol.docify(stripFromPath(path));
}
if (fd->generateSource() || (!fd->isReference() && Config::sourceBrowseFlag))
if (fd->generateSourceFile())
{
ol.writeObjectLink(0,fd->sourceName(),0,fd->name());
}
......@@ -1340,6 +1349,7 @@ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
pubAttribs.writePlainDeclarations(ol,this,0,0,0);
pubSlots.writePlainDeclarations(ol,this,0,0,0);
signals.writePlainDeclarations(ol,this,0,0,0);
dcopMethods.writePlainDeclarations(ol,this,0,0,0);
pubStaticMembers.writePlainDeclarations(ol,this,0,0,0);
pubStaticAttribs.writePlainDeclarations(ol,this,0,0,0);
proTypes.writePlainDeclarations(ol,this,0,0,0);
......@@ -1856,7 +1866,8 @@ void ClassDef::generateXML(QTextStream &t)
}
int numMembers =
pubTypes.count()+pubMembers.count()+pubAttribs.count()+
pubSlots.count()+signals.count()+pubStaticMembers.count()+
pubSlots.count()+signals.count()+dcopMethods.count()+
pubStaticMembers.count()+
pubStaticAttribs.count()+proTypes.count()+proMembers.count()+
proAttribs.count()+proSlots.count()+proStaticMembers.count()+
proStaticAttribs.count()+priTypes.count()+priMembers.count()+
......@@ -1870,6 +1881,7 @@ void ClassDef::generateXML(QTextStream &t)
generateXMLSection(t,&pubAttribs,"public-attrib");
generateXMLSection(t,&pubSlots,"public-slot");
generateXMLSection(t,&signals,"signal");
generateXMLSection(t,&dcopMethods,"dcop-func");
generateXMLSection(t,&pubStaticMembers,"public-static-func");
generateXMLSection(t,&pubStaticAttribs,"public-static-attrib");
generateXMLSection(t,&proTypes,"protected-type");
......
......@@ -167,6 +167,7 @@ class ClassDef : public Definition
MemberList related;
MemberList signals;
MemberList friends;
MemberList dcopMethods;
/* member list by types */
MemberList constructors;
......
/* This file was generated by configgen on Fri Aug 25 21:22:11 2000
/* This file was generated by configgen on Sat Sep 2 10:51:52 2000
* from config_templ.h
*
* DO NOT EDIT!
......@@ -64,6 +64,7 @@ struct Config
static bool inheritDocsFlag; // inheritance of documentation enabled?
static bool inlineInfoFlag; // show info about inline members?
static bool sortMembersFlag; // sort members alphabetically?
static bool distributeDocFlag; // distribute docs over member group?
static int tabSize; // number of spaces in a tab
static QStrList sectionFilterList; // list of section filters that are enabled
static bool generateTodoList; // do we want a todo list?
......
/* This file was generated by configgen on Fri Aug 25 21:22:11 2000
/* This file was generated by configgen on Sat Sep 2 10:51:52 2000
* from config_templ.l
*
* DO NOT EDIT!
......@@ -101,6 +101,7 @@ bool Config::autoBriefFlag = TRUE;
bool Config::inheritDocsFlag = TRUE;
bool Config::inlineInfoFlag = TRUE;
bool Config::sortMembersFlag = TRUE;
bool Config::distributeDocFlag = FALSE;
int Config::tabSize = 8;
QStrList Config::sectionFilterList;
bool Config::generateTodoList = TRUE;
......@@ -357,6 +358,7 @@ static void readIncludeFile(const char *incName)
<Start>"INHERIT_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::inheritDocsFlag; }
<Start>"INLINE_INFO"[ \t]*"=" { BEGIN(GetBool); b=&Config::inlineInfoFlag; }
<Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; }
<Start>"DISTRIBUTE_GROUP_DOC"[ \t]*"=" { BEGIN(GetBool); b=&Config::distributeDocFlag; }
<Start>"TAB_SIZE"[ \t]*"=" { BEGIN(GetString); s=&tabSizeString; s->resize(0); }
<Start>"ENABLED_SECTIONS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::sectionFilterList; l->clear(); elemStr=""; }
<Start>"ENABLED_SECTIONS"[ \t]*"+=" { BEGIN(GetStrList); l=&Config::sectionFilterList; elemStr=""; }
......@@ -587,6 +589,7 @@ void dumpConfig()
printf("inheritDocsFlag=`%d'\n",Config::inheritDocsFlag);
printf("inlineInfoFlag=`%d'\n",Config::inlineInfoFlag);
printf("sortMembersFlag=`%d'\n",Config::sortMembersFlag);
printf("distributeDocFlag=`%d'\n",Config::distributeDocFlag);
printf("tabSize=`%d'\n",Config::tabSize);
{
char *is=Config::sectionFilterList.first();
......@@ -824,6 +827,7 @@ void Config::init()
Config::inheritDocsFlag = TRUE;
Config::inlineInfoFlag = TRUE;
Config::sortMembersFlag = TRUE;
Config::distributeDocFlag = FALSE;
Config::tabSize = 8;
Config::sectionFilterList.clear();
Config::generateTodoList = TRUE;
......@@ -1011,7 +1015,7 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# information to generate all constant output in the proper language. \n";
t << "# The default language is English, other supported languages are: \n";
t << "# Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, \n";
t << "# Spanish, Russian, Croatian, Polish, and Portuguese.\n";
t << "# Korean, Hungarian, Spanish, Russian, Croatian, Polish, and Portuguese.\n";
t << "\n";
}
t << "OUTPUT_LANGUAGE = ";
......@@ -1278,6 +1282,18 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::sortMembersFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n";
t << "# tag is set to YES, then doxygen will reuse the documentation of the first \n";
t << "# member in the group (if any) for the other members of the group. By default \n";
t << "# all members of a group must be documented explicitly.\n";
t << "\n";
}
t << "DISTRIBUTE_GROUP_DOC = ";
writeBoolValue(t,Config::distributeDocFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The TAB_SIZE tag can be used to set the number of spaces in a tab. \n";
......@@ -1323,10 +1339,11 @@ void writeTemplateConfig(QFile *f,bool 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 << "# 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 << "# You can put \\n's in the value part of an alias to insert newlines. \n";
t << "# Predefined commands cannot be overwritten using aliases. \n";
t << "\n";
}
......
......@@ -69,7 +69,7 @@ class Definition
virtual bool isLinkableInProject() = 0;
virtual bool isLinkable() = 0;
bool isReference() { return !ref.isEmpty(); }
bool isReference() const { return !ref.isEmpty(); }
void setReference(const char *r) { ref=r; }
QCString getReference() { return ref; }
......
......@@ -2042,9 +2042,16 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
forceEndItemList();
}
else
{
if (insidePre)
{
outDoc->docify(yytext);
}
else
{
outDoc->newParagraph();
}
}
if (inBlock()) endBlock();
}
<DocScan>{BN}+/\n {
......
......@@ -1205,7 +1205,7 @@ void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
{
in = bfd->absFilePath();
doc = bfd->isLinkableInProject();
src = bfd->generateSource() || (!bfd->isReference() && Config::sourceBrowseFlag);
src = bfd->generateSourceFile();
}
if (doc || src)
{
......
......@@ -90,6 +90,7 @@ FileNameDict *includeNameDict; // include names
FileNameDict *exampleNameDict; // examples
FileNameDict *imageNameDict; // images
StringDict typedefDict(1009); // all typedefs
StringDict namespaceAliasDict(257); // all namespace aliases
GroupDict groupDict(257); // all groups
FormulaDict formulaDict(1009); // all formulas
FormulaDict formulaNameDict(1009); // the label name of all formulas
......@@ -502,7 +503,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
// generate code for header
{
cd->setIncludeFile(fd,iName,local);
fd->setGenerateSource(TRUE);
//fd->setGenerateSource(TRUE);
}
else // put #include in the class documentation without link
{
......@@ -526,7 +527,7 @@ static bool addNamespace(Entry *root,ClassDef *cd)
//printf("addNameSpace() trying: %s\n",e->name.data());
QCString nsName = stripAnnonymousNamespaceScope(e->name);
if (!nsName.isEmpty() && nsName.at(0)!='@' &&
(nd=namespaceDict[nsName])
(nd=getResolvedNamespace(nsName))
)
{
cd->setNamespace(nd);
......@@ -688,7 +689,7 @@ static void buildClassList(Entry *root)
// namespace is part of the class name
if (!found && !namespaceName.isEmpty())
{
NamespaceDef *nd = namespaceDict[namespaceName];
NamespaceDef *nd = getResolvedNamespace(namespaceName);
if (nd)
{
cd->setNamespace(nd);
......@@ -850,7 +851,7 @@ static void findUsingDirectives(Entry *root)
nsName=root->parent->name.copy();
if (!nsName.isEmpty())
{
nd = namespaceDict[nsName];
nd = getResolvedNamespace(nsName);
}
}
......@@ -864,7 +865,7 @@ static void findUsingDirectives(Entry *root)
QCString scope=scopeOffset>0 ?
nsName.left(scopeOffset)+"::" : QCString();
//printf("Trying with scope=`%s'\n",scope.data());
usingNd = namespaceDict[scope+root->name];
usingNd = getResolvedNamespace(scope+root->name);
if (scopeOffset==0)
{
scopeOffset=-1;
......@@ -959,7 +960,7 @@ static void findUsingDeclarations(Entry *root)
scName=root->parent->name.copy();
if (!scName.isEmpty())
{
nd = namespaceDict[scName];
nd = getResolvedNamespace(scName);
}
}
......@@ -1175,7 +1176,7 @@ static MemberDef *addVariableToFile(
QCString nscope=removeAnnonymousScopes(scope);
if (!nscope.isEmpty())
{
nd = namespaceDict[nscope];
nd = getResolvedNamespace(nscope);
}
}
QCString def;
......@@ -1221,7 +1222,7 @@ static MemberDef *addVariableToFile(
NamespaceDef *nd=0;
if (!nscope.isEmpty())
{
nd = namespaceDict[nscope];
nd = getResolvedNamespace(nscope);
}
if (nd==0 || md->getNamespaceDef()==nd)
// variable already in the scope
......@@ -1541,8 +1542,9 @@ static void buildMemberList(Entry *root)
MemberDef::MemberType mtype;
if (isFriend) mtype=MemberDef::Friend;
else if (root->sig) mtype=MemberDef::Signal;
else if (root->slot) mtype=MemberDef::Slot;
else if (root->mtype==Signal) mtype=MemberDef::Signal;
else if (root->mtype==Slot) mtype=MemberDef::Slot;
else if (root->mtype==DCOP) mtype=MemberDef::DCOP;
else mtype=MemberDef::Function;
// strip redundant template specifier for constructors
......@@ -1699,7 +1701,7 @@ static void buildMemberList(Entry *root)
NamespaceDef *rnd = 0;
if (!root->parent->name.isEmpty())
{
rnd = namespaceDict[root->parent->name];
rnd = getResolvedNamespace(root->parent->name);
}
FileDef *fd = md->getFileDef();
QCString nsName,rnsName;
......@@ -1811,7 +1813,7 @@ static void buildMemberList(Entry *root)
QCString nscope=removeAnnonymousScopes(root->parent->name);
if (!nscope.isEmpty())
{
nd = namespaceDict[nscope];
nd = getResolvedNamespace(nscope);
}
}
......@@ -3197,7 +3199,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
bool ambig;
FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig);
NamespaceDef *nd=0;
if (!namespaceName.isEmpty()) nd=namespaceDict[namespaceName];
if (!namespaceName.isEmpty()) nd=getResolvedNamespace(namespaceName);
tcd = findClassDefinition(fd,nd,scopeName,classTempList);
if (cd && tcd==cd) // member's classes match
......@@ -3367,8 +3369,9 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
if (unique)
{
MemberDef::MemberType mtype;
if (root->sig) mtype=MemberDef::Signal;
else if (root->slot) mtype=MemberDef::Slot;
if (root->mtype==Signal) mtype=MemberDef::Signal;
else if (root->mtype==Slot) mtype=MemberDef::Slot;
else if (root->mtype==DCOP) mtype=MemberDef::DCOP;
else mtype=MemberDef::Function;
// new overloaded member function
......@@ -3440,10 +3443,12 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
if (newMember) // need to create a new member
{
MemberDef::MemberType mtype;
if (root->sig)
if (root->mtype==Signal)
mtype=MemberDef::Signal;
else if (root->slot)
else if (root->mtype==Slot)
mtype=MemberDef::Slot;
else if (root->mtype==DCOP)
mtype=MemberDef::DCOP;
else
mtype=MemberDef::Function;
......@@ -3679,7 +3684,7 @@ static void findEnums(Entry *root)
{
QCString scope=root->name.left(i); // extract scope
name=root->name.right(root->name.length()-i-2); // extract name
if ((cd=getClass(scope))==0) nd=namespaceDict[scope];
if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
}
else // no scope, check the scope in which the docs where found
{
......@@ -3688,7 +3693,7 @@ static void findEnums(Entry *root)
) // found enum docs inside a compound
{
QCString scope=root->parent->name;
if ((cd=getClass(scope))==0) nd=namespaceDict[scope];
if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
}
name=root->name.copy();
}
......@@ -4103,7 +4108,9 @@ static void generateFileSources()
for (;(fd=fni.current());++fni)
{
bool src = !fd->isReference() &&
(fd->generateSource() || Config::sourceBrowseFlag);
(Config::verbatimHeaderFlag
//fd->generateSource()
|| Config::sourceBrowseFlag);
if (src)
{
msg("Generating code for file %s...\n",fd->name().data());
......@@ -5883,8 +5890,11 @@ int main(int argc,char **argv)
msg("Adding members to member groups.\n");
addMembersToMemberGroup();
if (Config::distributeDocFlag)
{
msg("Distributing member group documentation.\n");
distributeMemberGroupDocumentation();
}
msg("Building full member lists recursively...\n");
buildCompleteMemberLists();
......
......@@ -91,6 +91,7 @@ extern QTextStream tagFile;
extern SectionDict sectionDict;
extern FileNameList inputNameList;
extern StringDict typedefDict;
extern StringDict namespaceAliasDict;
extern GroupList groupList;
extern GroupDict groupDict;
extern NamespaceList namespaceList;
......
......@@ -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_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 \
reflist.h page.h sortdict.h translator_hu.h
reflist.h page.h sortdict.h translator_hu.h translator_kr.h
SOURCES = doxygen.cpp scanner.cpp doc.cpp classdef.cpp classlist.cpp \
memberdef.cpp membername.cpp index.cpp memberlist.cpp \
entry.cpp logos.cpp instdox.cpp message.cpp code.cpp \
......
......@@ -48,8 +48,7 @@ Entry::Entry(const Entry &e)
//printf("Copy New Entry %d\n",num);
section = e.section;
protection = e.protection;
sig = e.sig;
slot = e.slot;
mtype = e.mtype;
stat = e.stat;
explicitExternal = e.explicitExternal;
virt = e.virt;
......@@ -219,9 +218,8 @@ void Entry::reset()
todoId = 0;
testId = 0;
section = EMPTY_SEC;
sig = FALSE;
mtype = Method;
virt = Normal;
slot = FALSE;
stat = FALSE;
proto = FALSE;
explicitExternal = FALSE;
......
......@@ -23,6 +23,7 @@
enum Protection { Public, Protected, Private } ;
enum Specifier { Normal, Virtual, Pure } ;
enum MethodTypes { Method, Signal, Slot, DCOP };
struct BaseInfo
{
......@@ -161,8 +162,9 @@ class Entry
int section; // entry type (see Sections);
Protection protection; // class protection
bool sig; // a Qt signal ?
bool slot; // a Qt slot ?
//bool sig; // a Qt signal ?
//bool slot; // a Qt slot ?
MethodTypes mtype; // signal, slot or dcop method?
bool stat; // static ?
bool explicitExternal; // explicitly defined as external?
bool proto; // prototype ?
......
......@@ -164,9 +164,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.docify(ii->includeName);
ol.enableAll();
ol.disableAllBut(OutputGenerator::Html);
if (fd && fd->isLinkable() &&
(fd->generateSource() || Config::sourceBrowseFlag)
)
if (fd && fd->isLinkable() && fd->generateSourceFile())
{
ol.writeObjectLink(fd->getReference(),fd->includeName(),0,ii->includeName);
}
......@@ -222,7 +220,7 @@ void FileDef::writeDocumentation(OutputList &ol)
//incDepGraph.writeGraph(Config::htmlOutputDir,fd->getOutputFileBase());
}
if (generateSource() || (!isReference() && Config::sourceBrowseFlag))
if (generateSourceFile())
{
ol.disableAllBut(OutputGenerator::Html);
ol.newParagraph();
......
......@@ -120,8 +120,11 @@ class FileDef : public Definition
void addUsingDeclaration(ClassDef *cd);
ClassList *getUsedClasses() const { return usingDeclList; }
void setGenerateSource(bool b) { isSource=b; }
bool generateSource() const { return isSource; }
//void setGenerateSource(bool b) { isSource=b; }
bool generateSourceFile() const
{ return !isReference() &&
(Config::sourceBrowseFlag || Config::verbatimHeaderFlag);
}
void addIncludeDependency(FileDef *fd,const char *incName,bool local);
void addIncludedByDependency(FileDef *fd,const char *incName,bool local);
......
......@@ -333,7 +333,7 @@ void countFiles(int &htmlFiles,int &files)
for (;(fd=fni.current());++fni)
{
bool doc = fd->isLinkableInProject();
bool src = fd->generateSource() || Config::sourceBrowseFlag;
bool src = fd->generateSourceFile();
if (doc || src)
{
htmlFiles++;
......@@ -415,7 +415,7 @@ void writeFileIndex(OutputList &ol)
{
//printf("Found filedef %s\n",fd->name().data());
bool doc = fd->isLinkableInProject();
bool src = fd->generateSource() || Config::sourceBrowseFlag;
bool src = fd->generateSourceFile();
if ((doc || src) && !fd->isReference())
{
QCString path;
......@@ -849,7 +849,7 @@ void writeAlphabeticalClassList(OutputList &ol)
if (!namesp.isEmpty())
{
ol.docify(" (");
NamespaceDef *nd = namespaceDict[namesp];
NamespaceDef *nd = getResolvedNamespace(namesp);
if (nd && nd->isLinkable())
{
ol.writeObjectLink(nd->getReference(),
......
......@@ -32,6 +32,7 @@
#include "translator_pl.h"
#include "translator_pt.h"
#include "translator_hu.h"
#include "translator_kr.h"
#endif
#define L_EQUAL(a) !stricmp(langName,a)
......@@ -105,6 +106,10 @@ bool setTranslator(const char *langName)
{
theTranslator=new TranslatorHungarian;
}
else if (L_EQUAL("korean"))
{
theTranslator=new TranslatorKorean;
}
#endif
else // use the default language (i.e. english)
{
......
......@@ -1134,6 +1134,7 @@ void LatexGenerator::docify(const char *str)
{
static bool isCzech = theTranslator->idLanguage()=="czech";
static bool isJapanese = theTranslator->idLanguage()=="japanese";
static bool isKorean = theTranslator->idLanguage()=="korean";
static bool isRussian = theTranslator->idLanguage()=="russian";
static bool isGerman = theTranslator->idLanguage()=="german";
if (str)
......@@ -1192,7 +1193,7 @@ void LatexGenerator::docify(const char *str)
break;
default:
if (isJapanese)
if (isJapanese || isKorean)
{ // Japanese language uses wide characters
if (c>=128)
{
......
......@@ -1414,6 +1414,7 @@ void MemberDef::generateXML(QTextStream &t,Definition *def)
case Signal: // fall through
case Prototype: // fall through
case Friend: // fall through
case DCOP: // fall through
case Slot: t << "functiondef"; xmlType=function_t; break;
}
t << " id=\"";
......@@ -1562,6 +1563,7 @@ void MemberDef::generateXML(QTextStream &t,Definition *def)
case Signal: // fall through
case Prototype: // fall through
case Friend: // fall through
case DCOP: // fall through
case Slot: t << "functiondef"; break;
}
t << ">" << endl;
......
......@@ -57,7 +57,8 @@ class MemberDef : public Definition
Prototype,
Signal,
Slot,
Friend
Friend,
DCOP
};
enum
......@@ -107,6 +108,7 @@ class MemberDef : public Definition
bool isFunction() const { return mtype==Function; }
bool isDefine() const { return mtype==Define; }
bool isFriend() const { return mtype==Friend; }
bool isDCOP() const { return mtype==DCOP; }
bool isRelated() const { return related; }
bool isStatic() const { return stat; }
bool isInline() const { return (memSpec&Entry::Inline)!=0; }
......
......@@ -73,6 +73,7 @@ void MemberList::countDecMembers(bool inGroup,bool countSubGroups,bool sectionPe
case MemberDef::Variable: varCnt++,m_count++; break;
case MemberDef::Function: // fall through
case MemberDef::Signal: // fall through
case MemberDef::DCOP: // fall through
case MemberDef::Slot: if (!md->isRelated() || md->getClassDef())
funcCnt++,m_count++;
break;
......@@ -409,7 +410,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
for ( ; (md=mli.current()) ; ++mli )
{
if (
( md->isFunction() || md->isSignal() || md->isSlot()) &&
( md->isFunction() || md->isSignal() || md->isSlot() || md->isDCOP()) &&
( !md->isRelated() || md->getClassDef() ) &&
inGroup==md->visibleMemberGroup(sectionPerType)
)
......
......@@ -326,19 +326,19 @@ static const struct
{ "ListEnum4",
"\\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid "
},
{ "ListEnum4",
{ "ListEnum5",
"\\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid "
},
{ "ListEnum5",
{ "ListEnum6",
"\\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid "
},
{ "ListEnum6",
{ "ListEnum7",
"\\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid "
},
{ "ListEnum7",
{ "ListEnum8",
"\\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid "
},
{ "ListEnum8",
{ "ListEnum9",
"\\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid "
},
{ 0,
......
This diff is collapsed.
......@@ -24,6 +24,89 @@
class Translator
{
protected:
/*! Returns the string converted from windows-1250 to iso-8859-2. */
/* The method was designed initially for translator_cz.h.
It is used for on-line encoding conversion related to conditional
compilation in Unix/MS Windows environments (both use different
encoding). Later, the translator_hr.h (by Boris Bralo) used and
improved the same style. As the method with the translation table
was the same, the decision to move it to this base class was made.
The same holds for ISO88592ToWin1250() method. It is recommended
for possibly other similar methods in future.
*/
QCString Win1250ToISO88592(const QCString & sInput)
{
// The conversion table for characters >127
//
static const char WinToISOTab[] = {
'\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
'\x88', '\x89', '\xA9', '\x8B', '\xA6', '\xAB', '\xAE', '\xAC',
'\x90', '\x91', '\x92', '\x93', '\x94', '\x2E', '\x96', '\x97',
'\x98', '\x99', '\xB9', '\x9B', '\xB6', '\xBB', '\xBE', '\xBC',
'\xA0', '\x20', '\x20', '\xA3', '\xA4', '\xA1', '\xA6', '\xA7',
'\x22', '\xA9', '\xAA', '\x3C', '\xAC', '\x2D', '\xAE', '\xAF',
'\x2E', '\x2B', '\x20', '\xB3', '\x27', '\x75', '\xB6', '\xB7',
'\x20', '\xB1', '\xBA', '\x3E', '\xA5', '\x22', '\xB5', '\xBF',
'\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
'\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
'\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
'\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
'\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
'\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
'\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\x2D',
'\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
'\0'
};
QCString result;
int len = sInput.length();
for (int i = 0; i < len; ++i)
{
unsigned int c = sInput[i];
result += (c > 127) ? WinToISOTab[c & 0x7F] : c;
}
return result;
}
/*! returns the string converted from iso-8859-2 to windows-1250 */
/* See the comments of the Win1250ToISO88592() method for details. */
QCString ISO88592ToWin1250(const QCString & sInput)
{
// The conversion table for characters >127
//
static const char ISOToWinTab[] = {
'\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
'\x88', '\x89', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F',
'\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97',
'\x98', '\x99', '\x9A', '\x9B', '\x9C', '\x9D', '\x9E', '\x9F',
'\xA0', '\xA5', '\xA2', '\xA3', '\xA4', '\xBC', '\x8C', '\xA7',
'\xA8', '\x8A', '\xAA', '\x8D', '\x8F', '\xAD', '\x8E', '\xAF',
'\xB0', '\xB9', '\xB2', '\xB3', '\xB4', '\xBE', '\x9C', '\xB7',
'\xB8', '\x9A', '\xBA', '\x9D', '\x9F', '\xBD', '\x9E', '\xBF',
'\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
'\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
'\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
'\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
'\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
'\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
'\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\xF7',
'\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
'\0'
};
QCString result;
int len = sInput.length();
for (int i = 0; i < len; ++i)
{
unsigned int c = sInput[i];
result += (c > 127) ? ISOToWinTab[c & 0x7F] : c;
}
return result;
}
public:
// --- Language contol methods -------------------
......@@ -993,6 +1076,16 @@ class Translator
return "Test List";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.1
//////////////////////////////////////////////////////////////////////////
/*! Used as a section header for KDE-2 IDL methods */
virtual QCString trDCOPMethods()
{
return "DCOP Methods";
}
};
#endif
This diff is collapsed.
......@@ -35,84 +35,15 @@ class TranslatorCroatian : public Translator
/* Speed loss is actualy less than in Czech version due to
fewer QCString copying.
*/
inline QCString& decode(const QCString& sInput)
inline QCString decode(const QCString& sInput)
{
#ifdef _WIN32
return ISOToWin(sInput);
return ISO88592ToWin1250(sInput);
#else
return const_cast<QCString&>(sInput);
return sInput;
#endif
}
/*! returns the string converted from windows-1250 to iso-8859-2 */
QCString WinToISO(const QCString& sInput)
{
// The conversion table for characters >127
//
static const char WinToISOTab[] = {
'\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
'\x88', '\x89', '\xA9', '\x8B', '\xA6', '\xAB', '\xAE', '\xAC',
'\x90', '\x91', '\x92', '\x93', '\x94', '\x2E', '\x96', '\x97',
'\x98', '\x99', '\xB9', '\x9B', '\xB6', '\xBB', '\xBE', '\xBC',
'\xA0', '\x20', '\x20', '\xA3', '\xA4', '\xA1', '\xA6', '\xA7',
'\x22', '\xA9', '\xAA', '\x3C', '\xAC', '\x2D', '\xAE', '\xAF',
'\x2E', '\x2B', '\x20', '\xB3', '\x27', '\x75', '\xB6', '\xB7',
'\x20', '\xB1', '\xBA', '\x3E', '\xA5', '\x22', '\xB5', '\xBF',
'\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
'\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
'\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
'\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
'\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
'\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
'\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\x2D',
'\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
'\0'
};
QCString result;
int len = sInput.length();
for (int i = 0; i < len; ++i)
{
unsigned int c = sInput[i];
result += (c > 127) ? WinToISOTab[c & 0x7F] : c;
}
return result;
}
/*! returns the string converted from iso-8859-2 to windows-1250 */
QCString ISOToWin(const QCString& sInput)
{
// The conversion table for characters >127
//
static const char ISOToWinTab[] = {
'\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
'\x88', '\x89', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F',
'\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97',
'\x98', '\x99', '\x9A', '\x9B', '\x9C', '\x9D', '\x9E', '\x9F',
'\xA0', '\xA5', '\xA2', '\xA3', '\xA4', '\xBC', '\x8C', '\xA7',
'\xA8', '\x8A', '\xAA', '\x8D', '\x8F', '\xAD', '\x8E', '\xAF',
'\xB0', '\xB9', '\xB2', '\xB3', '\xB4', '\xBE', '\x9C', '\xB7',
'\xB8', '\x9A', '\xBA', '\x9D', '\x9F', '\xBD', '\x9E', '\xBF',
'\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
'\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
'\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
'\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
'\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
'\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
'\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\xF7',
'\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
'\0'
};
QCString result;
int len = sInput.length();
for (int i = 0; i < len; ++i)
{
unsigned int c = sInput[i];
result += (c > 127) ? ISOToWinTab[c & 0x7F] : c;
}
return result;
}
public:
QCString idLanguage()
{ return "croatian"; }
......
This diff is collapsed.
......@@ -314,6 +314,31 @@ ClassDef *getClass(const char *name)
return classDict[name];
}
NamespaceDef *getResolvedNamespace(const char *name)
{
if (name==0 || name[0]=='\0') return 0;
QCString *subst = namespaceAliasDict[name];
if (subst)
{
int count=0; // recursion detection guard
QCString *newSubst;
while ((newSubst=namespaceAliasDict[*subst]) && count<10)
{
subst=newSubst;
count++;
}
if (count==10)
{
warn_cont("Warning: possible recursive namespace alias detected for %s!\n",name);
}
return namespaceDict[subst->data()];
}
else
{
return namespaceDict[name];
}
}
ClassDef *getResolvedClass(const char *name)
{
if (name==0 || name[0]=='\0') return 0;
......@@ -2434,9 +2459,10 @@ void extractNamespaceName(const QCString &scopeName,
{
QCString clName=scopeName.copy();
//QCString nsName;
if (!clName.isEmpty() && namespaceDict[clName] && getClass(clName)==0)
NamespaceDef *nd;
if (!clName.isEmpty() && (nd=getResolvedNamespace(clName)) && getClass(clName)==0)
{ // the whole name is a namespace (and not a class)
namespaceName=clName.copy();
namespaceName=nd->name().copy();
className.resize(0);
//printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(),
// className.data(),namespaceName.data());
......@@ -2446,9 +2472,9 @@ void extractNamespaceName(const QCString &scopeName,
while (p>=0 && (i=clName.findRev("::",p))!=-1)
// see if the first part is a namespace (and not a class)
{
if (i>0 && namespaceDict[clName.left(i)] && getClass(clName.left(i))==0)
if (i>0 && (nd=getResolvedNamespace(clName.left(i))) && getClass(clName.left(i))==0)
{
namespaceName=clName.left(i);
namespaceName=nd->name().copy();
className=clName.right(clName.length()-i-2);
//printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(),
// className.data(),namespaceName.data());
......
......@@ -107,6 +107,7 @@ extern QCString substitute(const char *s,const char *src,const char *dst);
extern QCString resolveDefines(const char *n);
extern ClassDef *getClass(const char *key);
extern ClassDef *getResolvedClass(const char *key);
extern NamespaceDef *getResolvedNamespace(const char *key);
extern FileDef *findFileDef(const FileNameDict *fnDict,const char *n,
bool &ambig);
extern QCString showFileDefMatches(const FileNameDict *fnDict,const char *n);
......
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