Commit 44904635 authored by dimitri's avatar dimitri

Release-1.4.3

parent 23885c2f
DOXYGEN Version 1.4.2-20050508
DOXYGEN Version 1.4.3
Please read the installation section of the manual
(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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
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$
#
......
......@@ -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
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
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>
......
......@@ -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
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):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
......@@ -66,7 +66,7 @@ when the translator was updated.
<td>Catalan</td>
<td>Maximiliano Pin<br>Albert Mora</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 bgcolor="#ffffff">
<td>Chinese</td>
......@@ -180,7 +180,7 @@ when the translator was updated.
<td>Lithuanian</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>1.3.8</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Norwegian</td>
......@@ -192,7 +192,7 @@ when the translator was updated.
<td>Polish</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>1.4.1</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Portuguese</td>
......@@ -267,7 +267,7 @@ when the translator was updated.
\hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\
\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} & ~ \\
\hline
Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & 1.4.1 \\
......@@ -313,13 +313,13 @@ when the translator was updated.
\hline
KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\
\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} & ~ \\
~ & Aidas Berukstis & {\tt\tiny aidasber@takas.lt} & ~ \\
\hline
Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\
\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} & ~ \\
\hline
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):
......@@ -8,7 +8,7 @@ German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
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.
----------------------------------------------------------------------
......@@ -19,15 +19,18 @@ still may be some details listed even for them:
TranslatorAfrikaans
TranslatorBrazilian -- Remove the obsolete methods (never used).
TranslatorCatalan
TranslatorCroatian
TranslatorCzech
TranslatorDutch -- Remove the obsolete methods (never used).
TranslatorEnglish -- Remove the obsolete methods (never used).
TranslatorGerman -- Remove the obsolete methods (never used).
TranslatorGerman
TranslatorHungarian
TranslatorIndonesian -- Remove the obsolete methods (never used).
TranslatorItalian
TranslatorKorean
TranslatorLithuanian
TranslatorPolish -- Remove the obsolete methods (never used).
TranslatorRussian
TranslatorSwedish
......@@ -40,15 +43,12 @@ must be implemented to become up-to-date:
TranslatorUkrainian 1.4.1 1 method to implement
TranslatorSerbian 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
TranslatorChinese 1.4.1 1 method to implement
TranslatorCatalan 1.4.1 1 method to implement
TranslatorNorwegian 1.3.9 7 methods to implement
TranslatorJapanese 1.3.9 7 methods to implement
TranslatorDanish 1.3.9 7 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
TranslatorPortuguese 1.3.3 12 methods to implement
TranslatorSlovak 1.2.18 21 methods to implement
......@@ -89,29 +89,6 @@ TranslatorBrazilian (Translator)
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
-----------------
......@@ -358,25 +335,6 @@ TranslatorFrench (TranslatorAdapter_1_4_1) 1 method to implement
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
---------------
......@@ -501,36 +459,6 @@ TranslatorKoreanEn (TranslatorEnglish) 187 methods to implement
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
-------------------
......@@ -560,14 +488,10 @@ TranslatorNorwegian (TranslatorAdapter_1_3_9) 7 methods to implement
virtual QCString trNoDescriptionAvailable()
TranslatorPolish (TranslatorAdapter_1_4_1) 1 method to implement
TranslatorPolish (Translator)
----------------
Implements 191 of the required methods.
Missing methods (should be implemented):
virtual QCString trOverloadText()
Implements 192 of the required methods.
Obsolete methods (should be removed, never used):
......
......@@ -876,7 +876,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType
{
if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!documentation().isEmpty() ||
/*(Config_getBool("SOURCE_BROWSER") && startBodyLine!=-1 && bodyDef) ||*/
(Config_getBool("SOURCE_BROWSER") && getStartBodyLine()!=-1 && getBodyDef()) ||
exampleFlag)
{
ol.writeRuler();
......@@ -2455,7 +2455,7 @@ void ClassDef::determineImplUsageRelation()
QCString usedClassName;
QCString templSpec;
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());
// check if usedClassName is a template argument of its class
......
......@@ -305,6 +305,7 @@ class ClassDef : public Definition
void setIsStatic(bool b) { m_isStatic=b; }
void setIsObjectiveC(bool b) { m_isObjC=b; }
void addListReferences();
void setCompoundType(CompoundType t) { m_compType = t; }
/*! Creates a new compound definition.
* \param fileName full path and file name in which this compound was
......
......@@ -627,7 +627,7 @@ static ClassDef *stripClassName(const char *s)
QCString type = s;
QCString className;
QCString templSpec;
while (extractClassNameFromType(type,pos,className,templSpec))
while (extractClassNameFromType(type,pos,className,templSpec)!=-1)
{
QCString clName=className+templSpec;
ClassDef *cd=0;
......
......@@ -501,10 +501,10 @@ static void checkFormula();
static void prependScope()
{
#if 0
Entry *current_root = current->parent;
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+"::");
if (current_root->tArgLists)
{
......@@ -513,7 +513,6 @@ static void prependScope()
current->tArgLists = new QList<ArgumentList>;
current->tArgLists->setAutoDelete(TRUE);
}
//printf("prependScope #=%d #current=%d\n",current_root->tArgLists->count(),current->tArgLists->count());
QListIterator<ArgumentList> talsi(*current_root->tArgLists);
ArgumentList *srcAl=0;
for (talsi.toLast();(srcAl=talsi.current());--talsi)
......@@ -525,12 +524,12 @@ static void prependScope()
for (;(a=tali.current());++tali)
{
dstAl->append(new Argument(*a));
//printf("appending argument %s %s\n",a->type.data(),a->name.data());
}
current->tArgLists->insert(0,dstAl);
}
}
}
#endif
}
static void addSection()
......
......@@ -1940,7 +1940,8 @@ void Config::create()
"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"
"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
);
cb->addDependency("SOURCE_BROWSER");
......
......@@ -369,7 +369,7 @@ void Definition::writeSourceDef(OutputList &ol,const char *)
{
QCString lineStr,anchorStr;
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();
if (lineMarkerPos<fileMarkerPos) // line marker before file marker
{
......@@ -586,10 +586,12 @@ bool Definition::hasDocumentation() const
{
static bool extractAll = Config_getBool("EXTRACT_ALL");
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
extractAll || // extract everything
(sourceBrowser && m_startBodyLine!=-1 && m_bodyDef); // link to definition
return hasDocs;
}
void Definition::addSourceReferencedBy(MemberDef *md)
......
......@@ -701,7 +701,7 @@ REFWORD ("#"|"::")?({ID}("."|"#"|"::"|"-"))*({ID}(":")?){FUNCARG}?
unput(*yytext);
return 0;
}
<St_IntRef>[A-Z_a-z0-9.:/#\-\+]+ {
<St_IntRef>[A-Z_a-z0-9.:/#\-\+\(\)]+ {
g_token->name = yytext;
return TK_WORD;
}
......
......@@ -640,6 +640,40 @@ ArgumentList *getTemplateArgumentsFromName(
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)
{
// QCString fullName=removeRedundantWhiteSpace(root->name);
......@@ -667,13 +701,9 @@ static void addClassToContext(Entry *root)
// see if the using statement was found inside a namespace or inside
// the global file scope.
QCString scName;
if (root->parent->section == Entry::NAMESPACE_SEC)
if (root->parent->section&Entry::SCOPE_MASK)
{
scName=root->parent->name;
// if (!scName.isEmpty())
// {
// nd = getResolvedNamespace(scName);
// }
}
QCString fullName = root->name;
......@@ -681,8 +711,8 @@ static void addClassToContext(Entry *root)
ClassDef *cd = getClass(qualifiedName);
Debug::print(Debug::Classes,0, " Found class with name %s (cd=%p)\n",
cd ? cd->name().data() : root->name.data(), cd);
Debug::print(Debug::Classes,0, " Found class with name %s (qualifiedName=%s -> cd=%p)\n",
cd ? cd->name().data() : root->name.data(), qualifiedName.data(),cd);
if (cd)
{
......@@ -740,38 +770,12 @@ static void addClassToContext(Entry *root)
getTemplateArgumentsFromName(cd->name(),root->tArgLists);
cd->setTemplateArguments(tArgList);
}
cd->setCompoundType(convertToCompoundType(root->section));
}
else // new class
{
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;
}
ClassDef::CompoundType sec = convertToCompoundType(root->section);
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);
QCString className;
......@@ -3194,7 +3198,7 @@ static void findUsedClassesForClass(Entry *root,
type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
}
//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());
// the name could be a type definition, resolve it
......@@ -3326,12 +3330,8 @@ static void findBaseClassesForClass(
BaseInfo *bi=0;
for (bii.toFirst();(bi=bii.current());++bii)
{
//printf("masterCd=%s bi->name=%s\n",masterCd->localName().data(),bi->name.data());
//if ( masterCd->localName()!=bi->name.left(masterCd->localName().length())
// || bi->name.at(masterCd->localName().length())!='<'
// ) // to avoid recursive lock-up in cases like
// // template<typename T> class A : public A<typename T::B>
//{
//printf("masterCd=%s bi->name=%s #actualArgs=%d\n",
// masterCd->localName().data(),bi->name.data(),actualArgs?(int)actualArgs->count():-1);
bool delTempNames=FALSE;
if (templateNames==0)
{
......@@ -3366,7 +3366,6 @@ static void findBaseClassesForClass(
delete templateNames;
templateNames=0;
}
//}
}
}
......@@ -3413,7 +3412,8 @@ static bool findTemplateInstanceRelation(Entry *root,
Entry *templateRoot = classEntries.find(templateClass->name());
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;
stringToArgumentList(templSpec,templArgs);
findBaseClassesForClass(templateRoot,context,templateClass,instanceClass,
......@@ -3643,12 +3643,16 @@ static bool findClassRelation(
}
}
else
{
baseClass=Doxygen::classSDict.find(baseClassName);
if (baseClass==0)
{
baseClass=new ClassDef(root->fileName,root->startLine,
baseClassName,ClassDef::Class);
Doxygen::classSDict.append(baseClassName,baseClass);
if (isArtificial) baseClass->setClassIsArtificial();
}
}
// add base class to this class
cd->insertBaseClass(baseClass,biName,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class
......@@ -4432,33 +4436,28 @@ static void findMember(Entry *root,
do
{
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;
done=FALSE;
}
if (funcDecl.left(7)=="inline ")
if (funcDecl.stripPrefix("inline "))
{
funcDecl=funcDecl.right(funcDecl.length()-7);
root->memSpec|=Entry::Inline;
done=FALSE;
}
if (funcDecl.left(9)=="explicit ")
if (funcDecl.stripPrefix("explicit "))
{
funcDecl=funcDecl.right(funcDecl.length()-9);
root->memSpec|=Entry::Explicit;
done=FALSE;
}
if (funcDecl.left(8)=="mutable ")
if (funcDecl.stripPrefix("mutable "))
{
funcDecl=funcDecl.right(funcDecl.length()-8);
root->memSpec|=Entry::Mutable;
done=FALSE;
}
if (funcDecl.left(8)=="virtual ")
if (funcDecl.stripPrefix("virtual "))
{
funcDecl=funcDecl.right(funcDecl.length()-7);
done=FALSE;
}
} while (!done);
......@@ -4521,7 +4520,8 @@ static void findMember(Entry *root,
if (root->relates.isEmpty() && root->parent &&
(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;
if (!scopeName.isEmpty() &&
......@@ -4534,6 +4534,30 @@ static void findMember(Entry *root,
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(
removeRedundantWhiteSpace(scopeName),FALSE,&funcSpec);
......
......@@ -66,7 +66,7 @@ bool Htags::execute(const QCString &htmldir)
/*
* Construct command line for htags(1).
*/
QCString commandLine = " -g -s -a -n";
QCString commandLine = " -g -s -a -n ";
if (!quiet) commandLine += "-v ";
if (warnings) commandLine += "-w ";
if (!htagsOptions.isEmpty())
......
......@@ -124,8 +124,9 @@ void LatexDocVisitor::visit(DocSymbol *s)
{
case DocSymbol::BSlash: m_t << "$\\backslash$"; break;
case DocSymbol::At: m_t << "@"; break;
case DocSymbol::Less: m_t << "$<$"; break;
case DocSymbol::Greater: m_t << "$>$"; break;
case DocSymbol::Less: if (m_insidePre) m_t << "<"; else m_t << "$<$";
break;
case DocSymbol::Greater: if (m_insidePre) m_t << ">"; else m_t << "$>$"; break;
case DocSymbol::Amp: m_t << "\\&"; break;
case DocSymbol::Dollar: m_t << "\\$"; break;
case DocSymbol::Hash: m_t << "\\#"; break;
......
......@@ -229,9 +229,12 @@ static void writeDefaultHeaderPart1(QTextStream &t)
"\\usepackage{alltt}\n"
//"\\usepackage{ae,aecompl,aeguill}\n"
;
if (Config_getBool("PDF_HYPERLINKS"))
if (Config_getBool("USE_PDFLATEX"))
{
t << "\\usepackage{times}" << endl;
}
if (Config_getBool("PDF_HYPERLINKS"))
{
t << "\\ifx\\pdfoutput\\undefined" << endl
<< "\\usepackage[ps2pdf," << endl
<< " pagebackref=true," << endl
......
......@@ -1943,7 +1943,7 @@ void MemberDef::warnIfUndocumented()
// d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
// name().data(),prot);
if (!isLinkable() &&
!isDocumentedFriendClass() &&
!isFriendClass() &&
name().find('@')==-1 && d->name().find('@')==-1 &&
(prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
)
......@@ -1960,13 +1960,21 @@ void MemberDef::warnIfUndocumented()
// *enumDeclList+=ed;
//}
bool MemberDef::isDocumentedFriendClass() const
bool MemberDef::isFriendClass() const
{
ClassDef *fcd=0;
return (isFriend() &&
(type=="friend class" || type=="friend struct" ||
type=="friend union") &&
(fcd=getClass(name())) && fcd->isLinkable());
type=="friend union"));
}
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
......@@ -2125,6 +2133,7 @@ void MemberDef::addListReference(Definition *)
}
QCString memName = name();
Definition *pd=getOuterScope();
QCString memArgs;
if (!isRelated() &&
(
(!hideScopeNames && // there is a scope
......@@ -2135,19 +2144,25 @@ void MemberDef::addListReference(Definition *)
)
)
{
if (optimizeOutputJava)
if (isObjCMethod())
{
memName = "[" + pd->name() + " " + name() + "]";
}
else if (optimizeOutputJava)
{
memName.prepend(pd->name()+".");
memArgs = argsString();
}
else
{
memName.prepend(pd->name()+"::");
memArgs = argsString();
}
}
if (xrefListItems())
{
addRefItem(xrefListItems(),memLabel,
getOutputFileBase()+"#"+anchor(),memName,argsString());
getOutputFileBase()+"#"+anchor(),memName,memArgs);
}
else
{
......
......@@ -156,6 +156,7 @@ class MemberDef : public Definition
bool isBriefSectionVisible() const;
bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
bool isDetailedSectionLinkable() const;
bool isFriendClass() const;
bool isDocumentedFriendClass() const;
// set functions
......
......@@ -2358,6 +2358,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
}
}
<ReadBody>"}"{BN}+"typedef"{BN}+ { //err("ReadBody count=%d\n",curlyCount);
lineCount();
if ( curlyCount>0 )
{
current->program += yytext ;
......@@ -2365,7 +2366,6 @@ IDLATTR ("["[^\]]*"]"){BN}*
}
else
{
lineCount();
isTypedef = TRUE;
current->endBodyLine = yyLineNr;
QCString &cn = current->name;
......
......@@ -39,7 +39,7 @@
// Translator class (by the local maintainer) when the localized
// translator is made up-to-date again.
class TranslatorCatalan : public TranslatorAdapter_1_4_1
class TranslatorCatalan : public Translator
{
public:
......@@ -189,10 +189,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trFileList()
{ 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. */
virtual QCString trCompoundMembers()
{
......@@ -324,10 +320,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
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 */
virtual QCString trExamplesDescription()
{ return "Aquesta és la llista de tots els exemples:"; }
......@@ -340,12 +332,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trModulesDescription()
{ 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)
......@@ -495,12 +481,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trEnumerationTypeDocumentation()
{ 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
* of documentation blocks for functions
*/
......@@ -555,18 +535,10 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trForInternalUseOnly()
{ 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. */
virtual QCString trWarning()
{ 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. */
virtual QCString trVersion()
{ return "Versió"; }
......@@ -845,10 +817,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Codi Font";
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Definició a la línia @0 del fitxer @1.";
......@@ -1148,11 +1116,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
// 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 */
virtual QCString trClasses()
{
......@@ -1185,11 +1148,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
{
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 */
virtual QCString trDefineValue()
{
......@@ -1326,17 +1284,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
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
* be followed by a single name or by a list of names
* of the category.
......@@ -1596,6 +1543,20 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
if (!singular) result+="s";
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
......@@ -14,6 +14,8 @@
* input used in their production; they are not affected by this license.
*
* The translation into German was provided by
* Jens Seidel (jensseidel@users.sf.net)
* based on work from
* Jens Breitenstein (Jens.Breitenstein@tlc.de)
*/
......@@ -103,6 +105,9 @@
// - Changed Todo list translation as suggested in
// 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:
// - see FIXME
......@@ -244,10 +249,6 @@ class TranslatorGerman : public Translator
virtual QCString trFileList()
{ 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. */
virtual QCString trCompoundMembers()
{
......@@ -371,10 +372,6 @@ class TranslatorGerman : public Translator
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 */
virtual QCString trExamplesDescription()
{ return "Hier folgt eine Liste mit allen Beispielen:"; }
......@@ -387,12 +384,6 @@ class TranslatorGerman : public Translator
virtual QCString trModulesDescription()
{ 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)
/*! This is used in HTML as the title of index.html. */
......@@ -537,12 +528,6 @@ class TranslatorGerman : public Translator
virtual QCString trEnumerationTypeDocumentation()
{ 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
* of documentation blocks for functions
*/
......@@ -598,19 +583,10 @@ class TranslatorGerman : public Translator
virtual QCString trForInternalUseOnly()
{ 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. */
virtual QCString trWarning()
{ 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. */
virtual QCString trVersion()
{ return "Version"; }
......@@ -895,11 +871,6 @@ class TranslatorGerman : public Translator
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Quellen";
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Definiert in Zeile @0 der Datei @1.";
......@@ -1243,12 +1214,6 @@ class TranslatorGerman : public Translator
// 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 */
virtual QCString trClasses()
{
......@@ -1282,12 +1247,6 @@ class TranslatorGerman : public Translator
return "Pakete";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Paketdokumentation";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
......@@ -1404,17 +1363,6 @@ class TranslatorGerman : public Translator
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
* be followed by a single name or by a list of names
* of the category.
......
......@@ -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
* documentation under the terms of the GNU General Public License is hereby
......@@ -21,8 +21,10 @@
* if you have any suggestions drop us an email
* -------------------------------------------
* Project start :13.May.2k4
* Last Doxygen version covered : 1.3.6
* Last revision :
* Last Doxygen version covered : 1.4.3
*
* Revisions:
* Updated to 1.3.9 25.Oct.2k4
*
*/
......@@ -30,7 +32,7 @@
#define TRANSLATOR_LT_H
class TranslatorLithuanian : public TranslatorAdapter_1_3_8
class TranslatorLithuanian : public Translator
{
public:
......@@ -180,10 +182,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
virtual QCString trFileList()
{ 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. */
virtual QCString trCompoundMembers()
{
......@@ -316,10 +314,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
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 */
virtual QCString trExamplesDescription()
{ return "Visø pavyzdþiø sàraðas:"; }
......@@ -332,15 +326,8 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
virtual QCString trModulesDescription()
{ 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)
/*! This is used in HTML as the title of index.html. */
virtual QCString trDocumentation()
{ return "Dokumentacija"; }
......@@ -487,12 +474,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
virtual QCString trEnumerationTypeDocumentation()
{ 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
* of documentation blocks for functions
*/
......@@ -547,18 +528,10 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
virtual QCString trForInternalUseOnly()
{ 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. */
virtual QCString trWarning()
{ 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. */
virtual QCString trVersion()
{ return "Versija"; }
......@@ -832,10 +805,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Ðaltiniai";/*FIXME cia gali buti ir programos tekstai*/
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Apibrëþimas failo @1 eilutëje @0.";
......@@ -1142,11 +1111,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
// 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 */
virtual QCString trClasses()
{
......@@ -1179,11 +1143,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
{
return "Paketai";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Paketo Dokumentacija";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
......@@ -1324,18 +1283,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
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
* be followed by a single name or by a list of names
* of the category.
......@@ -1529,7 +1476,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
}
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à.";
}
}
......@@ -1540,6 +1487,75 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
{
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 @@
#ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H
class TranslatorPolish : public TranslatorAdapter_1_4_1
class TranslatorPolish : public Translator
{
private:
/*! to avoid macro redefinition from translator_pl.h */
......@@ -1537,7 +1537,8 @@ class TranslatorPolish : public TranslatorAdapter_1_4_1
* and the fact that it is sorted alphabetically per level
*/
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:";
}
......@@ -1556,6 +1557,19 @@ class TranslatorPolish : public TranslatorAdapter_1_4_1
if (! singular) result+="i";
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
......@@ -2256,6 +2256,7 @@ void stripIrrelevantConstVolatile(QCString &s)
//#define MATCH printf("Match at line %d\n",__LINE__);
//#define NOMATCH printf("Nomatch at line %d\n",__LINE__);
static bool matchArgument(const Argument *srcA,const Argument *dstA,
const QCString &className,
const QCString &namespaceName,
......@@ -2627,6 +2628,7 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
return TRUE; // all arguments match
}
static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *arg)
{
QCString type = arg->type;
......@@ -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]*");
QCString canType;
int i,p=0,l;
while ((i=id.match(type,p,&l))!=-1) // foreach identifier in the type
QCString canType,templSpec,word;
int i,p=0,pp=0;
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);
QCString word = type.mid(i,l);
ClassDef *cd = getResolvedClass(d,fs,word,0,0,TRUE);
//printf("word %s => %s\n",word.data(),cd?cd->qualifiedName().data():"<none>");
cd = getResolvedClass(d,fs,word+templSpec,0,0,TRUE);
}
if (cd==0)
{
cd = getResolvedClass(d,fs,word,0,0,TRUE);
}
//printf(">>>> word '%s' => '%s'\n",(word+templSpec).data(),cd?cd->qualifiedNameWithTemplateParameters().data():"<none>");
if (cd)
{
canType+=cd->qualifiedName();
canType+=cd->qualifiedNameWithTemplateParameters();
}
else
{
QCString resolvedType = resolveTypeDef(d,word);
if (resolvedType.isEmpty())
{
int i=word.findRev("::");
if (i!=-1) // strip scope if it cannot be resolved anyway
// TODO is this robust enough?
{
canType+=word.mid(i+2);
}
else
{
canType+=word;
}
//int i=word.findRev("::");
//if (i!=-1) // strip scope if it cannot be resolved anyway
// // TODO is this robust enough?
//{
// canType+=word.mid(i+2);
//}
//else
//{
canType+=word+templSpec;
//}
}
else
{
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());
return removeRedundantWhiteSpace(canType);
......@@ -3062,7 +3073,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//if (mmd->isLinkable())
//{
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);
#endif
//printf("match=%d\n",match);
if (match)
{
......@@ -3175,8 +3193,15 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{
argList=new ArgumentList;
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,
namespaceName,checkCV);
#endif
}
if (match)
{
......@@ -3255,7 +3280,14 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{
argList=new ArgumentList;
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);
#endif
delete argList; argList=0;
}
if (match)
......@@ -4417,10 +4449,11 @@ void addMembersToMemberGroup(MemberList *ml,
}
/*! Extracts a (sub-)string from \a type starting at \a pos that
* could form a class. When TRUE is returned the result is the
* class \a name and a template argument list \a templSpec.
* could form a class. The index of the match is returned and the found
* 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:]*");
name.resize(0);
......@@ -4453,17 +4486,25 @@ bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStr
te++;
}
}
if (te>ts) templSpec = type.mid(ts,te-ts),tl+=te-ts;
name = type.mid(i,l);
if (te>ts)
{
templSpec = type.mid(ts,te-ts),tl+=te-ts;
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",
// 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",
// type.data(),pos,name.data(),templSpec.data());
return FALSE;
return -1;
}
/*! Substitutes any occurrence of a formal argument from argument list
......@@ -4500,9 +4541,10 @@ QCString substituteTemplateArgumentsInString(
++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());
if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
{
......@@ -4526,6 +4568,13 @@ QCString substituteTemplateArgumentsInString(
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;
p=i+l;
......
......@@ -184,7 +184,7 @@ QCString getOverloadDocs();
void addMembersToMemberGroup(MemberList *ml,
MemberGroupSDict *memberGroupSDict,
Definition *context);
bool extractClassNameFromType(const QCString &type,int &pos,
int extractClassNameFromType(const QCString &type,int &pos,
QCString &name,QCString &templSpec);
QCString substituteTemplateArgumentsInString(
const QCString &name,
......
......@@ -8,10 +8,10 @@ TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = gcc
TMAKE_CFLAGS = -pipe
TMAKE_CFLAGS =
TMAKE_CFLAGS_WARN_ON = -Wall -W -fno-exceptions
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O2
TMAKE_CFLAGS_RELEASE = -O0
TMAKE_CFLAGS_DEBUG = -g
TMAKE_CFLAGS_SHLIB = -fPIC
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