Commit 530402f7 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.4.3

parent 5bd970b1
DOXYGEN Version 1.4.2-20050508 DOXYGEN Version 1.4.3
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 (08 May 2005) Dimitri van Heesch (16 May 2005)
DOXYGEN Version 1.4.2_20050508 DOXYGEN Version 1.4.3
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) (08 May 2005) Dimitri van Heesch (dimitri@stack.nl) (16 May 2005)
1.4.2-20050508 1.4.3
#! /bin/bash #! /bin/sh
# #
# $Id$ # $Id$
# #
......
...@@ -914,7 +914,19 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn" ...@@ -914,7 +914,19 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
If the \c USE_HTAGS tag is set to \c YES then the references to source code If the \c USE_HTAGS tag is set to \c YES then the references to source code
will point to the HTML generated by the htags(1) tool instead of doxygen will point to the HTML generated by the htags(1) tool instead of doxygen
built-in source browser. The htags tool is part of GNU's global source built-in source browser. The htags tool is part of GNU's global source
tagging system (see http://www.gnu.org/software/global/global.html) tagging system (see http://www.gnu.org/software/global/global.html).
The use it do the following:
-# Install the latest version of global (i.e. 4.8.6 or better)
-# Enable SOURCE_BROWSER and USE_HTAGS in the config file
-# Make sure the INPUT points to the root of the source tree
-# Run doxygen as normal
Doxygen will invoke htags (and that will in turn invoke gtags), so these tools
must be available from the command line (i.e. in the search path).
The result: instead of the source browser generated by doxygen, the links to
source code will now point to the output of htags.
</dl> </dl>
......
...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). configuration file (with default name and known as Doxyfile).
Currently (version 1.4.2-20050508), 31 languages Currently (version 1.4.3), 31 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
...@@ -66,7 +66,7 @@ when the translator was updated. ...@@ -66,7 +66,7 @@ when the translator was updated.
<td>Catalan</td> <td>Catalan</td>
<td>Maximiliano Pin<br>Albert Mora</td> <td>Maximiliano Pin<br>Albert Mora</td>
<td>mcpin at emtesistemas dot com<br>amora at iua dot upf dot es</td> <td>mcpin at emtesistemas dot com<br>amora at iua dot upf dot es</td>
<td>1.4.1</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Chinese</td> <td>Chinese</td>
...@@ -180,7 +180,7 @@ when the translator was updated. ...@@ -180,7 +180,7 @@ when the translator was updated.
<td>Lithuanian</td> <td>Lithuanian</td>
<td>Tomas Simonaitis<br>Mindaugas Radzius<br>Aidas Berukstis</td> <td>Tomas Simonaitis<br>Mindaugas Radzius<br>Aidas Berukstis</td>
<td>haden at homelan dot lt<br>mindaugasradzius at takas dot lt<br>aidasber at takas dot lt</td> <td>haden at homelan dot lt<br>mindaugasradzius at takas dot lt<br>aidasber at takas dot lt</td>
<td>1.3.8</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Norwegian</td> <td>Norwegian</td>
...@@ -192,7 +192,7 @@ when the translator was updated. ...@@ -192,7 +192,7 @@ when the translator was updated.
<td>Polish</td> <td>Polish</td>
<td>Piotr Kaminski<br>Grzegorz Kowal</td> <td>Piotr Kaminski<br>Grzegorz Kowal</td>
<td>Piotr.Kaminski at ctm dot gdynia dot pl<br>g_kowal at poczta dot onet dot pl</td> <td>Piotr.Kaminski at ctm dot gdynia dot pl<br>g_kowal at poczta dot onet dot pl</td>
<td>1.4.1</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Portuguese</td> <td>Portuguese</td>
...@@ -267,7 +267,7 @@ when the translator was updated. ...@@ -267,7 +267,7 @@ when the translator was updated.
\hline \hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\ Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\
\hline \hline
Catalan & Maximiliano Pin & {\tt\tiny mcpin@emtesistemas.com} & 1.4.1 \\ Catalan & Maximiliano Pin & {\tt\tiny mcpin@emtesistemas.com} & up-to-date \\
~ & Albert Mora & {\tt\tiny amora@iua.upf.es} & ~ \\ ~ & Albert Mora & {\tt\tiny amora@iua.upf.es} & ~ \\
\hline \hline
Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & 1.4.1 \\ Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & 1.4.1 \\
...@@ -313,13 +313,13 @@ when the translator was updated. ...@@ -313,13 +313,13 @@ when the translator was updated.
\hline \hline
KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\ KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\
\hline \hline
Lithuanian & Tomas Simonaitis & {\tt\tiny haden@homelan.lt} & 1.3.8 \\ Lithuanian & Tomas Simonaitis & {\tt\tiny haden@homelan.lt} & up-to-date \\
~ & Mindaugas Radzius & {\tt\tiny mindaugasradzius@takas.lt} & ~ \\ ~ & Mindaugas Radzius & {\tt\tiny mindaugasradzius@takas.lt} & ~ \\
~ & Aidas Berukstis & {\tt\tiny aidasber@takas.lt} & ~ \\ ~ & Aidas Berukstis & {\tt\tiny aidasber@takas.lt} & ~ \\
\hline \hline
Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\ Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\
\hline \hline
Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & 1.4.1 \\ Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & up-to-date \\
~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\ ~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\
\hline \hline
Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\ Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
......
(1.4.2-20050508) (1.4.3)
Doxygen supports the following 31 languages (sorted alphabetically): Doxygen supports the following 31 languages (sorted alphabetically):
...@@ -8,7 +8,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean ...@@ -8,7 +8,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, (+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
Of them, 13 translators are up-to-date, 18 translators are based on Of them, 16 translators are up-to-date, 15 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -19,15 +19,18 @@ still may be some details listed even for them: ...@@ -19,15 +19,18 @@ still may be some details listed even for them:
TranslatorAfrikaans TranslatorAfrikaans
TranslatorBrazilian -- Remove the obsolete methods (never used). TranslatorBrazilian -- Remove the obsolete methods (never used).
TranslatorCatalan
TranslatorCroatian TranslatorCroatian
TranslatorCzech TranslatorCzech
TranslatorDutch -- Remove the obsolete methods (never used). TranslatorDutch -- Remove the obsolete methods (never used).
TranslatorEnglish -- Remove the obsolete methods (never used). TranslatorEnglish -- Remove the obsolete methods (never used).
TranslatorGerman -- Remove the obsolete methods (never used). TranslatorGerman
TranslatorHungarian TranslatorHungarian
TranslatorIndonesian -- Remove the obsolete methods (never used). TranslatorIndonesian -- Remove the obsolete methods (never used).
TranslatorItalian TranslatorItalian
TranslatorKorean TranslatorKorean
TranslatorLithuanian
TranslatorPolish -- Remove the obsolete methods (never used).
TranslatorRussian TranslatorRussian
TranslatorSwedish TranslatorSwedish
...@@ -40,15 +43,12 @@ must be implemented to become up-to-date: ...@@ -40,15 +43,12 @@ must be implemented to become up-to-date:
TranslatorUkrainian 1.4.1 1 method to implement TranslatorUkrainian 1.4.1 1 method to implement
TranslatorSerbian 1.4.1 1 method to implement TranslatorSerbian 1.4.1 1 method to implement
TranslatorRomanian 1.4.1 1 method to implement TranslatorRomanian 1.4.1 1 method to implement
TranslatorPolish 1.4.1 1 method to implement
TranslatorFrench 1.4.1 1 method to implement TranslatorFrench 1.4.1 1 method to implement
TranslatorChinese 1.4.1 1 method to implement TranslatorChinese 1.4.1 1 method to implement
TranslatorCatalan 1.4.1 1 method to implement
TranslatorNorwegian 1.3.9 7 methods to implement TranslatorNorwegian 1.3.9 7 methods to implement
TranslatorJapanese 1.3.9 7 methods to implement TranslatorJapanese 1.3.9 7 methods to implement
TranslatorDanish 1.3.9 7 methods to implement TranslatorDanish 1.3.9 7 methods to implement
TranslatorSpanish 1.3.8 8 methods to implement TranslatorSpanish 1.3.8 8 methods to implement
TranslatorLithuanian 1.3.8 8 methods to implement
TranslatorChinesetraditional 1.3.8 8 methods to implement TranslatorChinesetraditional 1.3.8 8 methods to implement
TranslatorPortuguese 1.3.3 12 methods to implement TranslatorPortuguese 1.3.3 12 methods to implement
TranslatorSlovak 1.2.18 21 methods to implement TranslatorSlovak 1.2.18 21 methods to implement
...@@ -89,29 +89,6 @@ TranslatorBrazilian (Translator) ...@@ -89,29 +89,6 @@ TranslatorBrazilian (Translator)
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorCatalan (TranslatorAdapter_1_4_1) 1 method to implement
-----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
virtual QCString trField(bool first_capital, bool singular)
virtual QCString trPackageDocumentation()
virtual QCString trSources()
virtual QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
virtual QCString trHeaderFiles()
virtual QCString trBugsAndLimitations()
virtual QCString trEnumerationValueDocumentation()
virtual QCString trNoDescriptionAvailable()
TranslatorChinese (TranslatorAdapter_1_4_1) 1 method to implement TranslatorChinese (TranslatorAdapter_1_4_1) 1 method to implement
----------------- -----------------
...@@ -358,25 +335,6 @@ TranslatorFrench (TranslatorAdapter_1_4_1) 1 method to implement ...@@ -358,25 +335,6 @@ TranslatorFrench (TranslatorAdapter_1_4_1) 1 method to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorGerman (Translator)
----------------
Implements 192 of the required methods.
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
virtual QCString trField(bool, bool singular)
virtual QCString trPackageDocumentation()
virtual QCString trSources()
virtual QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
virtual QCString trHeaderFiles()
virtual QCString trBugsAndLimitations()
virtual QCString trEnumerationValueDocumentation()
virtual QCString trNoDescriptionAvailable()
TranslatorGreek (TranslatorAdapter_1_2_11) 26 methods to implement TranslatorGreek (TranslatorAdapter_1_2_11) 26 methods to implement
--------------- ---------------
...@@ -501,36 +459,6 @@ TranslatorKoreanEn (TranslatorEnglish) 187 methods to implement ...@@ -501,36 +459,6 @@ TranslatorKoreanEn (TranslatorEnglish) 187 methods to implement
virtual QCString latexLanguageSupportCommand() virtual QCString latexLanguageSupportCommand()
TranslatorLithuanian (TranslatorAdapter_1_3_8) 8 methods to implement
--------------------
Implements 184 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
virtual QCString trDirDescription()
virtual QCString trSourceFile(QCString & filename)
virtual QCString trDirReference(const char * dirName)
virtual QCString trDir(bool first_capital, bool singular)
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
virtual QCString trField(bool first_capital, bool singular)
virtual QCString trPackageDocumentation()
virtual QCString trSources()
virtual QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
virtual QCString trHeaderFiles()
virtual QCString trBugsAndLimitations()
virtual QCString trEnumerationValueDocumentation()
virtual QCString trNoDescriptionAvailable()
TranslatorNorwegian (TranslatorAdapter_1_3_9) 7 methods to implement TranslatorNorwegian (TranslatorAdapter_1_3_9) 7 methods to implement
------------------- -------------------
...@@ -560,14 +488,10 @@ TranslatorNorwegian (TranslatorAdapter_1_3_9) 7 methods to implement ...@@ -560,14 +488,10 @@ TranslatorNorwegian (TranslatorAdapter_1_3_9) 7 methods to implement
virtual QCString trNoDescriptionAvailable() virtual QCString trNoDescriptionAvailable()
TranslatorPolish (TranslatorAdapter_1_4_1) 1 method to implement TranslatorPolish (Translator)
---------------- ----------------
Implements 191 of the required methods. Implements 192 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Obsolete methods (should be removed, never used): Obsolete methods (should be removed, never used):
......
...@@ -876,7 +876,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType ...@@ -876,7 +876,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType
{ {
if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!documentation().isEmpty() || !documentation().isEmpty() ||
/*(Config_getBool("SOURCE_BROWSER") && startBodyLine!=-1 && bodyDef) ||*/ (Config_getBool("SOURCE_BROWSER") && getStartBodyLine()!=-1 && getBodyDef()) ||
exampleFlag) exampleFlag)
{ {
ol.writeRuler(); ol.writeRuler();
...@@ -2455,7 +2455,7 @@ void ClassDef::determineImplUsageRelation() ...@@ -2455,7 +2455,7 @@ void ClassDef::determineImplUsageRelation()
QCString usedClassName; QCString usedClassName;
QCString templSpec; QCString templSpec;
bool found=FALSE; bool found=FALSE;
while (extractClassNameFromType(type,pos,usedClassName,templSpec) && !found) while (extractClassNameFromType(type,pos,usedClassName,templSpec)!=-1 && !found)
{ {
//printf("usedClassName=`%s' templSpec=%s\n",usedClassName.data(),templSpec.data()); //printf("usedClassName=`%s' templSpec=%s\n",usedClassName.data(),templSpec.data());
// check if usedClassName is a template argument of its class // check if usedClassName is a template argument of its class
......
...@@ -305,6 +305,7 @@ class ClassDef : public Definition ...@@ -305,6 +305,7 @@ class ClassDef : public Definition
void setIsStatic(bool b) { m_isStatic=b; } void setIsStatic(bool b) { m_isStatic=b; }
void setIsObjectiveC(bool b) { m_isObjC=b; } void setIsObjectiveC(bool b) { m_isObjC=b; }
void addListReferences(); void addListReferences();
void setCompoundType(CompoundType t) { m_compType = t; }
/*! Creates a new compound definition. /*! Creates a new compound definition.
* \param fileName full path and file name in which this compound was * \param fileName full path and file name in which this compound was
......
...@@ -627,7 +627,7 @@ static ClassDef *stripClassName(const char *s) ...@@ -627,7 +627,7 @@ static ClassDef *stripClassName(const char *s)
QCString type = s; QCString type = s;
QCString className; QCString className;
QCString templSpec; QCString templSpec;
while (extractClassNameFromType(type,pos,className,templSpec)) while (extractClassNameFromType(type,pos,className,templSpec)!=-1)
{ {
QCString clName=className+templSpec; QCString clName=className+templSpec;
ClassDef *cd=0; ClassDef *cd=0;
......
...@@ -501,10 +501,10 @@ static void checkFormula(); ...@@ -501,10 +501,10 @@ static void checkFormula();
static void prependScope() static void prependScope()
{ {
#if 0
Entry *current_root = current->parent; Entry *current_root = current->parent;
if (current_root && current_root->section & Entry::SCOPE_MASK) if (current_root && current_root->section & Entry::SCOPE_MASK)
{ {
//printf("--- prependScope %s to %s\n",current_root->name.data(),current->name.data());
current->name.prepend(current_root->name+"::"); current->name.prepend(current_root->name+"::");
if (current_root->tArgLists) if (current_root->tArgLists)
{ {
...@@ -513,7 +513,6 @@ static void prependScope() ...@@ -513,7 +513,6 @@ static void prependScope()
current->tArgLists = new QList<ArgumentList>; current->tArgLists = new QList<ArgumentList>;
current->tArgLists->setAutoDelete(TRUE); current->tArgLists->setAutoDelete(TRUE);
} }
//printf("prependScope #=%d #current=%d\n",current_root->tArgLists->count(),current->tArgLists->count());
QListIterator<ArgumentList> talsi(*current_root->tArgLists); QListIterator<ArgumentList> talsi(*current_root->tArgLists);
ArgumentList *srcAl=0; ArgumentList *srcAl=0;
for (talsi.toLast();(srcAl=talsi.current());--talsi) for (talsi.toLast();(srcAl=talsi.current());--talsi)
...@@ -525,12 +524,12 @@ static void prependScope() ...@@ -525,12 +524,12 @@ static void prependScope()
for (;(a=tali.current());++tali) for (;(a=tali.current());++tali)
{ {
dstAl->append(new Argument(*a)); dstAl->append(new Argument(*a));
//printf("appending argument %s %s\n",a->type.data(),a->name.data());
} }
current->tArgLists->insert(0,dstAl); current->tArgLists->insert(0,dstAl);
} }
} }
} }
#endif
} }
static void addSection() static void addSection()
......
...@@ -1940,7 +1940,8 @@ void Config::create() ...@@ -1940,7 +1940,8 @@ void Config::create()
"If the USE_HTAGS tag is set to YES then the references to source code \n" "If the USE_HTAGS tag is set to YES then the references to source code \n"
"will point to the HTML generated by the htags(1) tool instead of doxygen \n" "will point to the HTML generated by the htags(1) tool instead of doxygen \n"
"built-in source browser. The htags tool is part of GNU's global source \n" "built-in source browser. The htags tool is part of GNU's global source \n"
"tagging system (see http://www.gnu.org/software/global/global.html) \n", "tagging system (see http://www.gnu.org/software/global/global.html). You \n"
"will need version 4.8.6 or higher. \n",
FALSE FALSE
); );
cb->addDependency("SOURCE_BROWSER"); cb->addDependency("SOURCE_BROWSER");
......
...@@ -369,7 +369,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *) ...@@ -369,7 +369,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{ {
QCString lineStr,anchorStr; QCString lineStr,anchorStr;
lineStr.sprintf("%d",m_startBodyLine); lineStr.sprintf("%d",m_startBodyLine);
anchorStr.sprintf(Htags::useHtags ? "%d" : "l%05d",m_startBodyLine); anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_startBodyLine);
ol.newParagraph(); ol.newParagraph();
if (lineMarkerPos<fileMarkerPos) // line marker before file marker if (lineMarkerPos<fileMarkerPos) // line marker before file marker
{ {
...@@ -586,10 +586,12 @@ bool Definition::hasDocumentation() const ...@@ -586,10 +586,12 @@ bool Definition::hasDocumentation() const
{ {
static bool extractAll = Config_getBool("EXTRACT_ALL"); static bool extractAll = Config_getBool("EXTRACT_ALL");
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
return !m_doc.isEmpty() || // has detailed docs bool hasDocs =
!m_doc.isEmpty() || // has detailed docs
!m_brief.isEmpty() || // has brief description !m_brief.isEmpty() || // has brief description
extractAll || // extract everything extractAll || // extract everything
(sourceBrowser && m_startBodyLine!=-1 && m_bodyDef); // link to definition (sourceBrowser && m_startBodyLine!=-1 && m_bodyDef); // link to definition
return hasDocs;
} }
void Definition::addSourceReferencedBy(MemberDef *md) void Definition::addSourceReferencedBy(MemberDef *md)
......
...@@ -701,7 +701,7 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"))*({ID}(":")?){FUNCARG}? ...@@ -701,7 +701,7 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"))*({ID}(":")?){FUNCARG}?
unput(*yytext); unput(*yytext);
return 0; return 0;
} }
<St_IntRef>[A-Z_a-z0-9.:/#\-\+]+ { <St_IntRef>[A-Z_a-z0-9.:/#\-\+\(\)]+ {
g_token->name = yytext; g_token->name = yytext;
return TK_WORD; return TK_WORD;
} }
......
...@@ -640,6 +640,40 @@ ArgumentList *getTemplateArgumentsFromName( ...@@ -640,6 +640,40 @@ ArgumentList *getTemplateArgumentsFromName(
return ali.current(); return ali.current();
} }
static ClassDef::CompoundType convertToCompoundType(int section)
{
ClassDef::CompoundType sec=ClassDef::Class;
switch(section)
{
case Entry::UNION_SEC:
case Entry::UNIONDOC_SEC:
sec=ClassDef::Union;
break;
case Entry::STRUCT_SEC:
case Entry::STRUCTDOC_SEC:
sec=ClassDef::Struct;
break;
case Entry::INTERFACE_SEC:
case Entry::INTERFACEDOC_SEC:
sec=ClassDef::Interface;
break;
case Entry::PROTOCOL_SEC:
case Entry::PROTOCOLDOC_SEC:
sec=ClassDef::Protocol;
break;
case Entry::CATEGORY_SEC:
case Entry::CATEGORYDOC_SEC:
sec=ClassDef::Category;
break;
case Entry::EXCEPTION_SEC:
case Entry::EXCEPTIONDOC_SEC:
sec=ClassDef::Exception;
break;
}
return sec;
}
static void addClassToContext(Entry *root) static void addClassToContext(Entry *root)
{ {
// QCString fullName=removeRedundantWhiteSpace(root->name); // QCString fullName=removeRedundantWhiteSpace(root->name);
...@@ -667,13 +701,9 @@ static void addClassToContext(Entry *root) ...@@ -667,13 +701,9 @@ static void addClassToContext(Entry *root)
// see if the using statement was found inside a namespace or inside // see if the using statement was found inside a namespace or inside
// the global file scope. // the global file scope.
QCString scName; QCString scName;
if (root->parent->section == Entry::NAMESPACE_SEC) if (root->parent->section&Entry::SCOPE_MASK)
{ {
scName=root->parent->name; scName=root->parent->name;
// if (!scName.isEmpty())
// {
// nd = getResolvedNamespace(scName);
// }
} }
QCString fullName = root->name; QCString fullName = root->name;
...@@ -681,8 +711,8 @@ static void addClassToContext(Entry *root) ...@@ -681,8 +711,8 @@ static void addClassToContext(Entry *root)
ClassDef *cd = getClass(qualifiedName); ClassDef *cd = getClass(qualifiedName);
Debug::print(Debug::Classes,0, " Found class with name %s (cd=%p)\n", Debug::print(Debug::Classes,0, " Found class with name %s (qualifiedName=%s -> cd=%p)\n",
cd ? cd->name().data() : root->name.data(), cd); cd ? cd->name().data() : root->name.data(), qualifiedName.data(),cd);
if (cd) if (cd)
{ {
...@@ -740,38 +770,12 @@ static void addClassToContext(Entry *root) ...@@ -740,38 +770,12 @@ static void addClassToContext(Entry *root)
getTemplateArgumentsFromName(cd->name(),root->tArgLists); getTemplateArgumentsFromName(cd->name(),root->tArgLists);
cd->setTemplateArguments(tArgList); cd->setTemplateArguments(tArgList);
} }
cd->setCompoundType(convertToCompoundType(root->section));
} }
else // new class else // new class
{ {
ClassDef::CompoundType sec = convertToCompoundType(root->section);
ClassDef::CompoundType sec=ClassDef::Class;
switch(root->section)
{
case Entry::UNION_SEC:
case Entry::UNIONDOC_SEC:
sec=ClassDef::Union;
break;
case Entry::STRUCT_SEC:
case Entry::STRUCTDOC_SEC:
sec=ClassDef::Struct;
break;
case Entry::INTERFACE_SEC:
case Entry::INTERFACEDOC_SEC:
sec=ClassDef::Interface;
break;
case Entry::PROTOCOL_SEC:
case Entry::PROTOCOLDOC_SEC:
sec=ClassDef::Protocol;
break;
case Entry::CATEGORY_SEC:
case Entry::CATEGORYDOC_SEC:
sec=ClassDef::Category;
break;
case Entry::EXCEPTION_SEC:
case Entry::EXCEPTIONDOC_SEC:
sec=ClassDef::Exception;
break;
}
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n", Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1); fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
QCString className; QCString className;
...@@ -3194,7 +3198,7 @@ static void findUsedClassesForClass(Entry *root, ...@@ -3194,7 +3198,7 @@ static void findUsedClassesForClass(Entry *root,
type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs); type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
} }
//printf(" template substitution gives=%s\n",type.data()); //printf(" template substitution gives=%s\n",type.data());
while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec)) while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec)!=-1)
{ {
//printf(" found used class %s\n",usedClassName.data()); //printf(" found used class %s\n",usedClassName.data());
// the name could be a type definition, resolve it // the name could be a type definition, resolve it
...@@ -3326,12 +3330,8 @@ static void findBaseClassesForClass( ...@@ -3326,12 +3330,8 @@ static void findBaseClassesForClass(
BaseInfo *bi=0; BaseInfo *bi=0;
for (bii.toFirst();(bi=bii.current());++bii) for (bii.toFirst();(bi=bii.current());++bii)
{ {
//printf("masterCd=%s bi->name=%s\n",masterCd->localName().data(),bi->name.data()); //printf("masterCd=%s bi->name=%s #actualArgs=%d\n",
//if ( masterCd->localName()!=bi->name.left(masterCd->localName().length()) // masterCd->localName().data(),bi->name.data(),actualArgs?(int)actualArgs->count():-1);
// || bi->name.at(masterCd->localName().length())!='<'
// ) // to avoid recursive lock-up in cases like
// // template<typename T> class A : public A<typename T::B>
//{
bool delTempNames=FALSE; bool delTempNames=FALSE;
if (templateNames==0) if (templateNames==0)
{ {
...@@ -3366,7 +3366,6 @@ static void findBaseClassesForClass( ...@@ -3366,7 +3366,6 @@ static void findBaseClassesForClass(
delete templateNames; delete templateNames;
templateNames=0; templateNames=0;
} }
//}
} }
} }
...@@ -3413,7 +3412,8 @@ static bool findTemplateInstanceRelation(Entry *root, ...@@ -3413,7 +3412,8 @@ static bool findTemplateInstanceRelation(Entry *root,
Entry *templateRoot = classEntries.find(templateClass->name()); Entry *templateRoot = classEntries.find(templateClass->name());
if (templateRoot) if (templateRoot)
{ {
Debug::print(Debug::Classes,0," template root found %s!\n",templateRoot->name.data()); Debug::print(Debug::Classes,0," template root found %s templSpec=%s!\n",
templateRoot->name.data(),templSpec.data());
ArgumentList *templArgs = new ArgumentList; ArgumentList *templArgs = new ArgumentList;
stringToArgumentList(templSpec,templArgs); stringToArgumentList(templSpec,templArgs);
findBaseClassesForClass(templateRoot,context,templateClass,instanceClass, findBaseClassesForClass(templateRoot,context,templateClass,instanceClass,
...@@ -3643,12 +3643,16 @@ static bool findClassRelation( ...@@ -3643,12 +3643,16 @@ static bool findClassRelation(
} }
} }
else else
{
baseClass=Doxygen::classSDict.find(baseClassName);
if (baseClass==0)
{ {
baseClass=new ClassDef(root->fileName,root->startLine, baseClass=new ClassDef(root->fileName,root->startLine,
baseClassName,ClassDef::Class); baseClassName,ClassDef::Class);
Doxygen::classSDict.append(baseClassName,baseClass); Doxygen::classSDict.append(baseClassName,baseClass);
if (isArtificial) baseClass->setClassIsArtificial(); if (isArtificial) baseClass->setClassIsArtificial();
} }
}
// add base class to this class // add base class to this class
cd->insertBaseClass(baseClass,biName,bi->prot,bi->virt,templSpec); cd->insertBaseClass(baseClass,biName,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class // add this class as super class to the base class
...@@ -4432,33 +4436,28 @@ static void findMember(Entry *root, ...@@ -4432,33 +4436,28 @@ static void findMember(Entry *root,
do do
{ {
done=TRUE; done=TRUE;
if (funcDecl.left(7)=="friend ") // treat friends as related members if (funcDecl.stripPrefix("friend ")) // treat friends as related members
{ {
funcDecl=funcDecl.right(funcDecl.length()-7);
isFriend=TRUE; isFriend=TRUE;
done=FALSE; done=FALSE;
} }
if (funcDecl.left(7)=="inline ") if (funcDecl.stripPrefix("inline "))
{ {
funcDecl=funcDecl.right(funcDecl.length()-7);
root->memSpec|=Entry::Inline; root->memSpec|=Entry::Inline;
done=FALSE; done=FALSE;
} }
if (funcDecl.left(9)=="explicit ") if (funcDecl.stripPrefix("explicit "))
{ {
funcDecl=funcDecl.right(funcDecl.length()-9);
root->memSpec|=Entry::Explicit; root->memSpec|=Entry::Explicit;
done=FALSE; done=FALSE;
} }
if (funcDecl.left(8)=="mutable ") if (funcDecl.stripPrefix("mutable "))
{ {
funcDecl=funcDecl.right(funcDecl.length()-8);
root->memSpec|=Entry::Mutable; root->memSpec|=Entry::Mutable;
done=FALSE; done=FALSE;
} }
if (funcDecl.left(8)=="virtual ") if (funcDecl.stripPrefix("virtual "))
{ {
funcDecl=funcDecl.right(funcDecl.length()-7);
done=FALSE; done=FALSE;
} }
} while (!done); } while (!done);
...@@ -4521,7 +4520,8 @@ static void findMember(Entry *root, ...@@ -4521,7 +4520,8 @@ static void findMember(Entry *root,
if (root->relates.isEmpty() && root->parent && if (root->relates.isEmpty() && root->parent &&
(root->parent->section&Entry::SCOPE_MASK) && (root->parent->section&Entry::SCOPE_MASK) &&
!root->parent->name.isEmpty()) !root->parent->name.isEmpty()) // see if we can combine scopeName
// with the scope in which it was found
{ {
QCString joinedName = root->parent->name+"::"+scopeName; QCString joinedName = root->parent->name+"::"+scopeName;
if (!scopeName.isEmpty() && if (!scopeName.isEmpty() &&
...@@ -4534,6 +4534,30 @@ static void findMember(Entry *root, ...@@ -4534,6 +4534,30 @@ static void findMember(Entry *root,
scopeName = mergeScopes(root->parent->name,scopeName); scopeName = mergeScopes(root->parent->name,scopeName);
} }
} }
else // see if we can prefix a namespace or class that is used from the file
{
bool ambig;
FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
if (fd)
{
NamespaceSDict *fnl = fd->getUsedNamespaces();
if (fnl)
{
QCString joinedName;
NamespaceDef *fnd;
NamespaceSDict::Iterator nsdi(*fnl);
for (nsdi.toFirst();(fnd=nsdi.current());++nsdi)
{
joinedName = fnd->name()+"::"+scopeName;
if (Doxygen::namespaceSDict[joinedName])
{
scopeName=joinedName;
break;
}
}
}
}
}
scopeName=stripTemplateSpecifiersFromScope( scopeName=stripTemplateSpecifiersFromScope(
removeRedundantWhiteSpace(scopeName),FALSE,&funcSpec); removeRedundantWhiteSpace(scopeName),FALSE,&funcSpec);
......
...@@ -66,7 +66,7 @@ bool Htags::execute(const QCString &htmldir) ...@@ -66,7 +66,7 @@ bool Htags::execute(const QCString &htmldir)
/* /*
* Construct command line for htags(1). * Construct command line for htags(1).
*/ */
QCString commandLine = " -g -s -a -n"; QCString commandLine = " -g -s -a -n ";
if (!quiet) commandLine += "-v "; if (!quiet) commandLine += "-v ";
if (warnings) commandLine += "-w "; if (warnings) commandLine += "-w ";
if (!htagsOptions.isEmpty()) if (!htagsOptions.isEmpty())
......
...@@ -124,8 +124,9 @@ void LatexDocVisitor::visit(DocSymbol *s) ...@@ -124,8 +124,9 @@ void LatexDocVisitor::visit(DocSymbol *s)
{ {
case DocSymbol::BSlash: m_t << "$\\backslash$"; break; case DocSymbol::BSlash: m_t << "$\\backslash$"; break;
case DocSymbol::At: m_t << "@"; break; case DocSymbol::At: m_t << "@"; break;
case DocSymbol::Less: m_t << "$<$"; break; case DocSymbol::Less: if (m_insidePre) m_t << "<"; else m_t << "$<$";
case DocSymbol::Greater: m_t << "$>$"; break; break;
case DocSymbol::Greater: if (m_insidePre) m_t << ">"; else m_t << "$>$"; break;
case DocSymbol::Amp: m_t << "\\&"; break; case DocSymbol::Amp: m_t << "\\&"; break;
case DocSymbol::Dollar: m_t << "\\$"; break; case DocSymbol::Dollar: m_t << "\\$"; break;
case DocSymbol::Hash: m_t << "\\#"; break; case DocSymbol::Hash: m_t << "\\#"; break;
......
...@@ -229,9 +229,12 @@ static void writeDefaultHeaderPart1(QTextStream &t) ...@@ -229,9 +229,12 @@ static void writeDefaultHeaderPart1(QTextStream &t)
"\\usepackage{alltt}\n" "\\usepackage{alltt}\n"
//"\\usepackage{ae,aecompl,aeguill}\n" //"\\usepackage{ae,aecompl,aeguill}\n"
; ;
if (Config_getBool("PDF_HYPERLINKS")) if (Config_getBool("USE_PDFLATEX"))
{ {
t << "\\usepackage{times}" << endl; t << "\\usepackage{times}" << endl;
}
if (Config_getBool("PDF_HYPERLINKS"))
{
t << "\\ifx\\pdfoutput\\undefined" << endl t << "\\ifx\\pdfoutput\\undefined" << endl
<< "\\usepackage[ps2pdf," << endl << "\\usepackage[ps2pdf," << endl
<< " pagebackref=true," << endl << " pagebackref=true," << endl
......
...@@ -1943,7 +1943,7 @@ void MemberDef::warnIfUndocumented() ...@@ -1943,7 +1943,7 @@ void MemberDef::warnIfUndocumented()
// d->isLinkable(),isLinkable(),isDocumentedFriendClass(), // d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
// name().data(),prot); // name().data(),prot);
if (!isLinkable() && if (!isLinkable() &&
!isDocumentedFriendClass() && !isFriendClass() &&
name().find('@')==-1 && d->name().find('@')==-1 && name().find('@')==-1 && d->name().find('@')==-1 &&
(prot!=Private || Config_getBool("EXTRACT_PRIVATE")) (prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
) )
...@@ -1960,13 +1960,21 @@ void MemberDef::warnIfUndocumented() ...@@ -1960,13 +1960,21 @@ void MemberDef::warnIfUndocumented()
// *enumDeclList+=ed; // *enumDeclList+=ed;
//} //}
bool MemberDef::isDocumentedFriendClass() const bool MemberDef::isFriendClass() const
{ {
ClassDef *fcd=0;
return (isFriend() && return (isFriend() &&
(type=="friend class" || type=="friend struct" || (type=="friend class" || type=="friend struct" ||
type=="friend union") && type=="friend union"));
(fcd=getClass(name())) && fcd->isLinkable()); }
bool MemberDef::isDocumentedFriendClass() const
{
ClassDef *fcd=0;
QCString baseName=name();
int i=baseName.find('<');
if (i!=-1) baseName=baseName.left(i);
return (isFriendClass() &&
(fcd=getClass(baseName)) && fcd->isLinkable());
} }
bool MemberDef::hasDocumentation() const bool MemberDef::hasDocumentation() const
...@@ -2125,6 +2133,7 @@ void MemberDef::addListReference(Definition *) ...@@ -2125,6 +2133,7 @@ void MemberDef::addListReference(Definition *)
} }
QCString memName = name(); QCString memName = name();
Definition *pd=getOuterScope(); Definition *pd=getOuterScope();
QCString memArgs;
if (!isRelated() && if (!isRelated() &&
( (
(!hideScopeNames && // there is a scope (!hideScopeNames && // there is a scope
...@@ -2135,19 +2144,25 @@ void MemberDef::addListReference(Definition *) ...@@ -2135,19 +2144,25 @@ void MemberDef::addListReference(Definition *)
) )
) )
{ {
if (optimizeOutputJava) if (isObjCMethod())
{
memName = "[" + pd->name() + " " + name() + "]";
}
else if (optimizeOutputJava)
{ {
memName.prepend(pd->name()+"."); memName.prepend(pd->name()+".");
memArgs = argsString();
} }
else else
{ {
memName.prepend(pd->name()+"::"); memName.prepend(pd->name()+"::");
memArgs = argsString();
} }
} }
if (xrefListItems()) if (xrefListItems())
{ {
addRefItem(xrefListItems(),memLabel, addRefItem(xrefListItems(),memLabel,
getOutputFileBase()+"#"+anchor(),memName,argsString()); getOutputFileBase()+"#"+anchor(),memName,memArgs);
} }
else else
{ {
......
...@@ -156,6 +156,7 @@ class MemberDef : public Definition ...@@ -156,6 +156,7 @@ class MemberDef : public Definition
bool isBriefSectionVisible() const; bool isBriefSectionVisible() const;
bool isDetailedSectionVisible(bool inGroup,bool inFile) const; bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
bool isDetailedSectionLinkable() const; bool isDetailedSectionLinkable() const;
bool isFriendClass() const;
bool isDocumentedFriendClass() const; bool isDocumentedFriendClass() const;
// set functions // set functions
......
...@@ -2358,6 +2358,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2358,6 +2358,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
} }
} }
<ReadBody>"}"{BN}+"typedef"{BN}+ { //err("ReadBody count=%d\n",curlyCount); <ReadBody>"}"{BN}+"typedef"{BN}+ { //err("ReadBody count=%d\n",curlyCount);
lineCount();
if ( curlyCount>0 ) if ( curlyCount>0 )
{ {
current->program += yytext ; current->program += yytext ;
...@@ -2365,7 +2366,6 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2365,7 +2366,6 @@ IDLATTR ("["[^\]]*"]"){BN}*
} }
else else
{ {
lineCount();
isTypedef = TRUE; isTypedef = TRUE;
current->endBodyLine = yyLineNr; current->endBodyLine = yyLineNr;
QCString &cn = current->name; QCString &cn = current->name;
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
// Translator class (by the local maintainer) when the localized // Translator class (by the local maintainer) when the localized
// translator is made up-to-date again. // translator is made up-to-date again.
class TranslatorCatalan : public TranslatorAdapter_1_4_1 class TranslatorCatalan : public Translator
{ {
public: public:
...@@ -189,10 +189,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -189,10 +189,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trFileList() virtual QCString trFileList()
{ return "Llista dels Fitxers"; } { return "Llista dels Fitxers"; }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
{ return "Fitxers d'encapçalaments"; }
/*! This is put above each page as a link to all members of compounds. */ /*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers() virtual QCString trCompoundMembers()
{ {
...@@ -324,10 +320,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -324,10 +320,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
return result; return result;
} }
/*! This is an introduction to the page with the list of all header files. */
virtual QCString trHeaderFilesDescription()
{ return "Aquests són els fitxers d'encapçalament que constitueixen l'API:"; }
/*! This is an introduction to the page with the list of all examples */ /*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription() virtual QCString trExamplesDescription()
{ return "Aquesta és la llista de tots els exemples:"; } { return "Aquesta és la llista de tots els exemples:"; }
...@@ -340,12 +332,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -340,12 +332,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trModulesDescription() virtual QCString trModulesDescription()
{ return "Aquesta és la llista de mòduls:"; } { return "Aquesta és la llista de mòduls:"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
virtual QCString trNoDescriptionAvailable()
{ return "No hi ha cap descripció disponible"; }
// index titles (the project name is prepended for these) // index titles (the project name is prepended for these)
...@@ -495,12 +481,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -495,12 +481,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trEnumerationTypeDocumentation() virtual QCString trEnumerationTypeDocumentation()
{ return "Documentació dels Tipus de les Enumeracions"; } { return "Documentació dels Tipus de les Enumeracions"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Documentació dels Valors de les Enumeracions"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions * of documentation blocks for functions
*/ */
...@@ -555,18 +535,10 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -555,18 +535,10 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trForInternalUseOnly() virtual QCString trForInternalUseOnly()
{ return "Tan sols per a ús intern."; } { return "Tan sols per a ús intern."; }
/*! this text is generated when the \\reimp command is used. */
virtual QCString trReimplementedForInternalReasons()
{ return "Reimplementat per raons internes; l'API no es veu afectada."; }
/*! this text is generated when the \\warning command is used. */ /*! this text is generated when the \\warning command is used. */
virtual QCString trWarning() virtual QCString trWarning()
{ return "Atenció"; } { return "Atenció"; }
/*! this text is generated when the \\bug command is used. */
virtual QCString trBugsAndLimitations()
{ return "Errors i limitacions"; }
/*! this text is generated when the \\version command is used. */ /*! this text is generated when the \\version command is used. */
virtual QCString trVersion() virtual QCString trVersion()
{ return "Versió"; } { return "Versió"; }
...@@ -845,10 +817,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -845,10 +817,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
// new since 0.49-991003 // new since 0.49-991003
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Codi Font";
}
virtual QCString trDefinedAtLineInSourceFile() virtual QCString trDefinedAtLineInSourceFile()
{ {
return "Definició a la línia @0 del fitxer @1."; return "Definició a la línia @0 del fitxer @1.";
...@@ -1148,11 +1116,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -1148,11 +1116,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
// new since 1.2.4 // new since 1.2.4
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return "Interfícies";
}
/*! Used for Java classes in the summary section of Java packages */ /*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses() virtual QCString trClasses()
{ {
...@@ -1185,11 +1148,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -1185,11 +1148,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
{ {
return "Paquets"; return "Paquets";
} }
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Documentació dels Paquets";
}
/*! Text shown before a multi-line define */ /*! Text shown before a multi-line define */
virtual QCString trDefineValue() virtual QCString trDefineValue()
{ {
...@@ -1326,17 +1284,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -1326,17 +1284,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
return result; return result;
} }
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trField(bool first_capital, bool singular)
{
QCString result((first_capital ? "Camp" : "camp"));
if (!singular) result+="s";
return result;
}
/*! This is used for translation of the word that will possibly /*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names * be followed by a single name or by a list of names
* of the category. * of the category.
...@@ -1596,6 +1543,20 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1 ...@@ -1596,6 +1543,20 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
if (!singular) result+="s"; if (!singular) result+="s";
return result; return result;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a overloaded function.
*/
virtual QCString trOverloadText()
{
return "Aquesta és una funció membre sobrecarregada, "
"proveïda per conveniència. Es diferencia de la funció "
"anterior només en els arguments que accepta.";
}
}; };
#endif #endif
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
* input used in their production; they are not affected by this license. * input used in their production; they are not affected by this license.
* *
* The translation into German was provided by * The translation into German was provided by
* Jens Seidel (jensseidel@users.sf.net)
* based on work from
* Jens Breitenstein (Jens.Breitenstein@tlc.de) * Jens Breitenstein (Jens.Breitenstein@tlc.de)
*/ */
...@@ -103,6 +105,9 @@ ...@@ -103,6 +105,9 @@
// - Changed Todo list translation as suggested in // - Changed Todo list translation as suggested in
// http://bugzilla.gnome.org/show_bug.cgi?id=172818 // http://bugzilla.gnome.org/show_bug.cgi?id=172818
// //
// 2005/05/09 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated for "new since 1.4.3" version (removed unused methods)
//
// Todo: // Todo:
// - see FIXME // - see FIXME
...@@ -244,10 +249,6 @@ class TranslatorGerman : public Translator ...@@ -244,10 +249,6 @@ class TranslatorGerman : public Translator
virtual QCString trFileList() virtual QCString trFileList()
{ return "Auflistung der Dateien"; } { return "Auflistung der Dateien"; }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
{ return "Header-Dateien"; }
/*! This is put above each page as a link to all members of compounds. */ /*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers() virtual QCString trCompoundMembers()
{ {
...@@ -371,10 +372,6 @@ class TranslatorGerman : public Translator ...@@ -371,10 +372,6 @@ class TranslatorGerman : public Translator
return result; return result;
} }
/*! This is an introduction to the page with the list of all header files. */
virtual QCString trHeaderFilesDescription()
{ return "Hier folgen die Headerdateien, welche die API definieren:"; }
/*! This is an introduction to the page with the list of all examples */ /*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription() virtual QCString trExamplesDescription()
{ return "Hier folgt eine Liste mit allen Beispielen:"; } { return "Hier folgt eine Liste mit allen Beispielen:"; }
...@@ -387,12 +384,6 @@ class TranslatorGerman : public Translator ...@@ -387,12 +384,6 @@ class TranslatorGerman : public Translator
virtual QCString trModulesDescription() virtual QCString trModulesDescription()
{ return "Hier folgt die Aufzählung aller Module:"; } { return "Hier folgt die Aufzählung aller Module:"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
virtual QCString trNoDescriptionAvailable()
{ return "Keine Beschreibung verfügbar"; }
// index titles (the project name is prepended for these) // index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */ /*! This is used in HTML as the title of index.html. */
...@@ -537,12 +528,6 @@ class TranslatorGerman : public Translator ...@@ -537,12 +528,6 @@ class TranslatorGerman : public Translator
virtual QCString trEnumerationTypeDocumentation() virtual QCString trEnumerationTypeDocumentation()
{ return "Dokumentation der Aufzählungstypen"; } { return "Dokumentation der Aufzählungstypen"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Dokumentation des Wertebereiches der Aufzählungstypen"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions * of documentation blocks for functions
*/ */
...@@ -598,19 +583,10 @@ class TranslatorGerman : public Translator ...@@ -598,19 +583,10 @@ class TranslatorGerman : public Translator
virtual QCString trForInternalUseOnly() virtual QCString trForInternalUseOnly()
{ return "Nur für den internen Gebrauch."; } { return "Nur für den internen Gebrauch."; }
/*! this text is generated when the \\reimp command is used. */
virtual QCString trReimplementedForInternalReasons()
{ return "Aus internen Gründen neu implementiert. "
"Das API wird davon nicht berührt."; }
/*! this text is generated when the \\warning command is used. */ /*! this text is generated when the \\warning command is used. */
virtual QCString trWarning() virtual QCString trWarning()
{ return "Warnung"; } { return "Warnung"; }
/*! this text is generated when the \\bug command is used. */
virtual QCString trBugsAndLimitations()
{ return "Fehler und Einschränkungen"; }
/*! this text is generated when the \\version command is used. */ /*! this text is generated when the \\version command is used. */
virtual QCString trVersion() virtual QCString trVersion()
{ return "Version"; } { return "Version"; }
...@@ -895,11 +871,6 @@ class TranslatorGerman : public Translator ...@@ -895,11 +871,6 @@ class TranslatorGerman : public Translator
// new since 0.49-991003 // new since 0.49-991003
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Quellen";
}
virtual QCString trDefinedAtLineInSourceFile() virtual QCString trDefinedAtLineInSourceFile()
{ {
return "Definiert in Zeile @0 der Datei @1."; return "Definiert in Zeile @0 der Datei @1.";
...@@ -1243,12 +1214,6 @@ class TranslatorGerman : public Translator ...@@ -1243,12 +1214,6 @@ class TranslatorGerman : public Translator
// new since 1.2.4 // new since 1.2.4
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return "Schnittstellen";
}
/*! Used for Java classes in the summary section of Java packages */ /*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses() virtual QCString trClasses()
{ {
...@@ -1282,12 +1247,6 @@ class TranslatorGerman : public Translator ...@@ -1282,12 +1247,6 @@ class TranslatorGerman : public Translator
return "Pakete"; return "Pakete";
} }
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Paketdokumentation";
}
/*! Text shown before a multi-line define */ /*! Text shown before a multi-line define */
virtual QCString trDefineValue() virtual QCString trDefineValue()
{ {
...@@ -1404,17 +1363,6 @@ class TranslatorGerman : public Translator ...@@ -1404,17 +1363,6 @@ class TranslatorGerman : public Translator
return result; return result;
} }
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trField(bool, bool singular)
{
QCString result("Feld");
if (!singular) result+="er";
return result;
}
/*! This is used for translation of the word that will possibly /*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names * be followed by a single name or by a list of names
* of the category. * of the category.
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* *
* *
* *
* Copyright (C) 1997-2005 by Dimitri van Heesch. * Copyright (C) 1997-2004 by Dimitri van Heesch.
* *
* Permission to use, copy, modify, and distribute this software and its * Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby * documentation under the terms of the GNU General Public License is hereby
...@@ -21,8 +21,10 @@ ...@@ -21,8 +21,10 @@
* if you have any suggestions drop us an email * if you have any suggestions drop us an email
* ------------------------------------------- * -------------------------------------------
* Project start :13.May.2k4 * Project start :13.May.2k4
* Last Doxygen version covered : 1.3.6 * Last Doxygen version covered : 1.4.3
* Last revision : *
* Revisions:
* Updated to 1.3.9 25.Oct.2k4
* *
*/ */
...@@ -30,7 +32,7 @@ ...@@ -30,7 +32,7 @@
#define TRANSLATOR_LT_H #define TRANSLATOR_LT_H
class TranslatorLithuanian : public TranslatorAdapter_1_3_8 class TranslatorLithuanian : public Translator
{ {
public: public:
...@@ -180,10 +182,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -180,10 +182,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
virtual QCString trFileList() virtual QCString trFileList()
{ return "Failai"; } { return "Failai"; }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
{ return "Antraðèiø Failai"; }
/*! This is put above each page as a link to all members of compounds. */ /*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers() virtual QCString trCompoundMembers()
{ {
...@@ -316,10 +314,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -316,10 +314,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
return result; return result;
} }
/*! This is an introduction to the page with the list of all header files. */
virtual QCString trHeaderFilesDescription()
{ return "Antraðèiø failai, kurie sudaro API:"; }
/*! This is an introduction to the page with the list of all examples */ /*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription() virtual QCString trExamplesDescription()
{ return "Visø pavyzdþiø sàraðas:"; } { return "Visø pavyzdþiø sàraðas:"; }
...@@ -332,15 +326,8 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -332,15 +326,8 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
virtual QCString trModulesDescription() virtual QCString trModulesDescription()
{ return "Visø moduliø sàraðas:"; } { return "Visø moduliø sàraðas:"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
virtual QCString trNoDescriptionAvailable()
{ return "Apraðymo nëra"; }
// index titles (the project name is prepended for these) // index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */ /*! This is used in HTML as the title of index.html. */
virtual QCString trDocumentation() virtual QCString trDocumentation()
{ return "Dokumentacija"; } { return "Dokumentacija"; }
...@@ -487,12 +474,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -487,12 +474,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
virtual QCString trEnumerationTypeDocumentation() virtual QCString trEnumerationTypeDocumentation()
{ return "Iðvardinimo Tipo Dokumentacija"; } { return "Iðvardinimo Tipo Dokumentacija"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Iðvardinimo Reikðmiø Dokumentacija"; }
/*! This is used in the documentation of a file/namespace before the list /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions * of documentation blocks for functions
*/ */
...@@ -547,18 +528,10 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -547,18 +528,10 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
virtual QCString trForInternalUseOnly() virtual QCString trForInternalUseOnly()
{ return "Tiktai vidiniam naudojimui."; } { return "Tiktai vidiniam naudojimui."; }
/*! this text is generated when the \\reimp command is used. */
virtual QCString trReimplementedForInternalReasons()
{ return "Reimplemented for internal reasons; the API is not affected."; }/*FIXME*/
/*! this text is generated when the \\warning command is used. */ /*! this text is generated when the \\warning command is used. */
virtual QCString trWarning() virtual QCString trWarning()
{ return "Áspëjimas"; } { return "Áspëjimas"; }
/*! this text is generated when the \\bug command is used. */
virtual QCString trBugsAndLimitations()
{ return "Klaidos ir apribojimai"; }
/*! this text is generated when the \\version command is used. */ /*! this text is generated when the \\version command is used. */
virtual QCString trVersion() virtual QCString trVersion()
{ return "Versija"; } { return "Versija"; }
...@@ -832,10 +805,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -832,10 +805,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
// new since 0.49-991003 // new since 0.49-991003
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Ðaltiniai";/*FIXME cia gali buti ir programos tekstai*/
}
virtual QCString trDefinedAtLineInSourceFile() virtual QCString trDefinedAtLineInSourceFile()
{ {
return "Apibrëþimas failo @1 eilutëje @0."; return "Apibrëþimas failo @1 eilutëje @0.";
...@@ -1142,11 +1111,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -1142,11 +1111,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
// new since 1.2.4 // new since 1.2.4
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return "Sàsajos";
}
/*! Used for Java classes in the summary section of Java packages */ /*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses() virtual QCString trClasses()
{ {
...@@ -1179,11 +1143,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -1179,11 +1143,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
{ {
return "Paketai"; return "Paketai";
} }
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Paketo Dokumentacija";
}
/*! Text shown before a multi-line define */ /*! Text shown before a multi-line define */
virtual QCString trDefineValue() virtual QCString trDefineValue()
{ {
...@@ -1324,18 +1283,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -1324,18 +1283,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
return result; return result;
} }
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trField(bool first_capital, bool singular)
{
QCString result((first_capital ? "Lauka" : "lauka"));
if (!singular) result+="i";
else result+="s";
return result;
}
/*! This is used for translation of the word that will possibly /*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names * be followed by a single name or by a list of names
* of the category. * of the category.
...@@ -1529,7 +1476,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -1529,7 +1476,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
} }
else else
{ {
return "Surasti <b>$num</b> dokumentø, atitinkanèiø Jûsø uþklausà. " return "Surasta <b>$num</b> dokumentø, atitinkanèiø Jûsø uþklausà. "
"Pirmiausiai rodomi labiausiai tenkinantys uþklausà."; "Pirmiausiai rodomi labiausiai tenkinantys uþklausà.";
} }
} }
...@@ -1540,6 +1487,75 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8 ...@@ -1540,6 +1487,75 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
{ {
return "Atitikmenys:"; return "Atitikmenys:";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////
/*! This is used in HTML as the title of page with source code for file filename
*/
virtual QCString trSourceFile(QCString& filename)
{
return filename + " iðeities tekstas";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Direktorijø hierarchija"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Direktorijø dokumentacija"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Direktorijos"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Ði direktorjø strûktûra grubiai surikiuota abëcëlës tvarka:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result=dirName; result+=" Directorijos apraðas"; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
QCString result((first_capital ? "Direktorij" : "direktorij"));
if (singular) result+="a"; else result+="os";
return result;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a overloaded function.
*/
virtual QCString trOverloadText()
{
return "Perkraunamas metodas sukurtas patogumui. "
"Jis skiriasi nuo aukðèiau minëto tik argumetais.";
}
}; };
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_PL_H #ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H #define TRANSLATOR_PL_H
class TranslatorPolish : public TranslatorAdapter_1_4_1 class TranslatorPolish : public Translator
{ {
private: private:
/*! to avoid macro redefinition from translator_pl.h */ /*! to avoid macro redefinition from translator_pl.h */
...@@ -1537,7 +1537,8 @@ class TranslatorPolish : public TranslatorAdapter_1_4_1 ...@@ -1537,7 +1537,8 @@ class TranslatorPolish : public TranslatorAdapter_1_4_1
* and the fact that it is sorted alphabetically per level * and the fact that it is sorted alphabetically per level
*/ */
virtual QCString trDirDescription() virtual QCString trDirDescription()
{ return "Ta struktura katalogów jest posortowana jest z grubsza, " {
return "Ta struktura katalogów jest posortowana jest z grubsza, "
"choæ nie ca³kowicie, alfabetycznie:"; "choæ nie ca³kowicie, alfabetycznie:";
} }
...@@ -1556,6 +1557,19 @@ class TranslatorPolish : public TranslatorAdapter_1_4_1 ...@@ -1556,6 +1557,19 @@ class TranslatorPolish : public TranslatorAdapter_1_4_1
if (! singular) result+="i"; if (! singular) result+="i";
return result; return result;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a overloaded function.
*/
virtual QCString trOverloadText()
{
return "To jest metoda przeci±¿ona, udostêpniona dla wygody. "
"Ró¿ni siê od powy¿szej metody tylko zestawem akceptowanych argumentów.";
}
}; };
#endif #endif
...@@ -2256,6 +2256,7 @@ void stripIrrelevantConstVolatile(QCString &s) ...@@ -2256,6 +2256,7 @@ void stripIrrelevantConstVolatile(QCString &s)
//#define MATCH printf("Match at line %d\n",__LINE__); //#define MATCH printf("Match at line %d\n",__LINE__);
//#define NOMATCH printf("Nomatch at line %d\n",__LINE__); //#define NOMATCH printf("Nomatch at line %d\n",__LINE__);
static bool matchArgument(const Argument *srcA,const Argument *dstA, static bool matchArgument(const Argument *srcA,const Argument *dstA,
const QCString &className, const QCString &className,
const QCString &namespaceName, const QCString &namespaceName,
...@@ -2627,6 +2628,7 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, ...@@ -2627,6 +2628,7 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
return TRUE; // all arguments match return TRUE; // all arguments match
} }
static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *arg) static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *arg)
{ {
QCString type = arg->type; QCString type = arg->type;
...@@ -2655,42 +2657,51 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a ...@@ -2655,42 +2657,51 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
static QRegExp id("[a-z_A-Z][:a-z_A-Z0-9]*"); static QRegExp id("[a-z_A-Z][:a-z_A-Z0-9]*");
QCString canType; QCString canType,templSpec,word;
int i,p=0,l; int i,p=0,pp=0;
while ((i=id.match(type,p,&l))!=-1) // foreach identifier in the type while ((i=extractClassNameFromType(type,p,word,templSpec))!=-1)
// foreach identifier in the type
{
//printf(" i=%d p=%d\n",i,p);
canType += type.mid(pp,i-pp);
ClassDef *cd = 0;
if (!templSpec.isEmpty())
{ {
canType += type.mid(p,i-p); cd = getResolvedClass(d,fs,word+templSpec,0,0,TRUE);
QCString word = type.mid(i,l); }
ClassDef *cd = getResolvedClass(d,fs,word,0,0,TRUE); if (cd==0)
//printf("word %s => %s\n",word.data(),cd?cd->qualifiedName().data():"<none>"); {
cd = getResolvedClass(d,fs,word,0,0,TRUE);
}
//printf(">>>> word '%s' => '%s'\n",(word+templSpec).data(),cd?cd->qualifiedNameWithTemplateParameters().data():"<none>");
if (cd) if (cd)
{ {
canType+=cd->qualifiedName(); canType+=cd->qualifiedNameWithTemplateParameters();
} }
else else
{ {
QCString resolvedType = resolveTypeDef(d,word); QCString resolvedType = resolveTypeDef(d,word);
if (resolvedType.isEmpty()) if (resolvedType.isEmpty())
{ {
int i=word.findRev("::"); //int i=word.findRev("::");
if (i!=-1) // strip scope if it cannot be resolved anyway //if (i!=-1) // strip scope if it cannot be resolved anyway
// TODO is this robust enough? // // TODO is this robust enough?
{ //{
canType+=word.mid(i+2); // canType+=word.mid(i+2);
} //}
else //else
{ //{
canType+=word; canType+=word+templSpec;
} //}
} }
else else
{ {
canType+=resolvedType; canType+=resolvedType;
} }
} }
p=i+l; pp=p;
} }
canType += type.right(type.length()-p); canType += type.right(type.length()-pp);
//printf("result = %s->%s\n",type.data(),canType.data()); //printf("result = %s->%s\n",type.data(),canType.data());
return removeRedundantWhiteSpace(canType); return removeRedundantWhiteSpace(canType);
...@@ -3062,7 +3073,14 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3062,7 +3073,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//if (mmd->isLinkable()) //if (mmd->isLinkable())
//{ //{
bool match=args==0 || bool match=args==0 ||
#ifdef NEW_MATCH
matchArguments2(mmd->getOuterScope(),md->getFileDef(),md->argumentList(),
fcd,fcd->getFileDef(),argList,
checkCV
);
#else
matchArguments(mmd->argumentList(),argList,className,0,checkCV); matchArguments(mmd->argumentList(),argList,className,0,checkCV);
#endif
//printf("match=%d\n",match); //printf("match=%d\n",match);
if (match) if (match)
{ {
...@@ -3175,8 +3193,15 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3175,8 +3193,15 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
argList=new ArgumentList; argList=new ArgumentList;
stringToArgumentList(args,argList); stringToArgumentList(args,argList);
#ifdef NEW_MATCH
match=matchArguments2(
mmd->getOuterScope(),mmd->getFileDef(),mmd->argumentList(),
fnd,mmd->getFileDef(),argList,
checkCV);
#else
match=matchArguments(mmd->argumentList(),argList,0, match=matchArguments(mmd->argumentList(),argList,0,
namespaceName,checkCV); namespaceName,checkCV);
#endif
} }
if (match) if (match)
{ {
...@@ -3255,7 +3280,14 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -3255,7 +3280,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
argList=new ArgumentList; argList=new ArgumentList;
stringToArgumentList(args,argList); stringToArgumentList(args,argList);
#ifdef NEW_MATCH
match=matchArguments2(
md->getOuterScope(),fd,md->argumentList(),
Doxygen::globalScope,fd,argList,
checkCV);
#else
match=matchArguments(md->argumentList(),argList,0,0,checkCV); match=matchArguments(md->argumentList(),argList,0,0,checkCV);
#endif
delete argList; argList=0; delete argList; argList=0;
} }
if (match) if (match)
...@@ -4417,10 +4449,11 @@ void addMembersToMemberGroup(MemberList *ml, ...@@ -4417,10 +4449,11 @@ void addMembersToMemberGroup(MemberList *ml,
} }
/*! Extracts a (sub-)string from \a type starting at \a pos that /*! Extracts a (sub-)string from \a type starting at \a pos that
* could form a class. When TRUE is returned the result is the * could form a class. The index of the match is returned and the found
* class \a name and a template argument list \a templSpec. * class \a name and a template argument list \a templSpec. If -1 is returned
* there are no more matches.
*/ */
bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCString &templSpec) int extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCString &templSpec)
{ {
static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*"); static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
name.resize(0); name.resize(0);
...@@ -4453,17 +4486,25 @@ bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStr ...@@ -4453,17 +4486,25 @@ bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStr
te++; te++;
} }
} }
if (te>ts) templSpec = type.mid(ts,te-ts),tl+=te-ts;
name = type.mid(i,l); name = type.mid(i,l);
if (te>ts)
{
templSpec = type.mid(ts,te-ts),tl+=te-ts;
pos=i+l+tl; pos=i+l+tl;
}
else // no template part
{
pos=i+l;
}
//printf("extractClassNameFromType([in] type=%s,[out] pos=%d,[out] name=%s,[out] templ=%s)=TRUE\n", //printf("extractClassNameFromType([in] type=%s,[out] pos=%d,[out] name=%s,[out] templ=%s)=TRUE\n",
// type.data(),pos,name.data(),templSpec.data()); // type.data(),pos,name.data(),templSpec.data());
return TRUE; return i;
} }
} }
pos = typeLen;
//printf("extractClassNameFromType([in] type=%s,[out] pos=%d,[out] name=%s,[out] templ=%s)=FALSE\n", //printf("extractClassNameFromType([in] type=%s,[out] pos=%d,[out] name=%s,[out] templ=%s)=FALSE\n",
// type.data(),pos,name.data(),templSpec.data()); // type.data(),pos,name.data(),templSpec.data());
return FALSE; return -1;
} }
/*! Substitutes any occurrence of a formal argument from argument list /*! Substitutes any occurrence of a formal argument from argument list
...@@ -4500,9 +4541,10 @@ QCString substituteTemplateArgumentsInString( ...@@ -4500,9 +4541,10 @@ QCString substituteTemplateArgumentsInString(
++formAli,actArg=actualArgs->next() ++formAli,actArg=actualArgs->next()
) )
{ {
if (formArg->type=="class" || formArg->type=="typename") //printf("formArg->type=%s\n",formArg->type.data());
if (formArg->type=="class" || formArg->type=="typename" || formArg->type.left(8)=="template")
{ {
//printf("n=%s formArg->type=%s formArg->name=%si formArg->defval=%s\n", //printf("n=%s formArg->type='%s' formArg->name='%s' formArg->defval='%s'\n",
// n.data(),formArg->type.data(),formArg->name.data(),formArg->defval.data()); // n.data(),formArg->type.data(),formArg->name.data(),formArg->defval.data());
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
{ {
...@@ -4526,6 +4568,13 @@ QCString substituteTemplateArgumentsInString( ...@@ -4526,6 +4568,13 @@ QCString substituteTemplateArgumentsInString(
found=TRUE; found=TRUE;
} }
} }
else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty() &&
formArg->defval!=name /* to prevent recursion */
)
{
result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs)+" ";
found=TRUE;
}
} }
if (!found) result += n; if (!found) result += n;
p=i+l; p=i+l;
......
...@@ -184,7 +184,7 @@ QCString getOverloadDocs(); ...@@ -184,7 +184,7 @@ QCString getOverloadDocs();
void addMembersToMemberGroup(MemberList *ml, void addMembersToMemberGroup(MemberList *ml,
MemberGroupSDict *memberGroupSDict, MemberGroupSDict *memberGroupSDict,
Definition *context); Definition *context);
bool extractClassNameFromType(const QCString &type,int &pos, int extractClassNameFromType(const QCString &type,int &pos,
QCString &name,QCString &templSpec); QCString &name,QCString &templSpec);
QCString substituteTemplateArgumentsInString( QCString substituteTemplateArgumentsInString(
const QCString &name, const QCString &name,
......
...@@ -8,10 +8,10 @@ TEMPLATE = app ...@@ -8,10 +8,10 @@ TEMPLATE = app
CONFIG = qt warn_on release CONFIG = qt warn_on release
TMAKE_CC = gcc TMAKE_CC = gcc
TMAKE_CFLAGS = -pipe TMAKE_CFLAGS =
TMAKE_CFLAGS_WARN_ON = -Wall -W -fno-exceptions TMAKE_CFLAGS_WARN_ON = -Wall -W -fno-exceptions
TMAKE_CFLAGS_WARN_OFF = TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O2 TMAKE_CFLAGS_RELEASE = -O0
TMAKE_CFLAGS_DEBUG = -g TMAKE_CFLAGS_DEBUG = -g
TMAKE_CFLAGS_SHLIB = -fPIC TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
......
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