summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2005-05-16 10:07:22 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2005-05-16 10:07:22 (GMT)
commit44904635bc78fae2ce60fc942cc5b7cba9958a34 (patch)
tree4031df0b930759962f9126116d333cec031ca5cb /src
parent23885c2f2db71f003578f0d1b44555c067bfd7a5 (diff)
downloadDoxygen-44904635bc78fae2ce60fc942cc5b7cba9958a34.zip
Doxygen-44904635bc78fae2ce60fc942cc5b7cba9958a34.tar.gz
Doxygen-44904635bc78fae2ce60fc942cc5b7cba9958a34.tar.bz2
Release-1.4.3
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp4
-rw-r--r--src/classdef.h1
-rw-r--r--src/code.l2
-rw-r--r--src/commentscan.l5
-rw-r--r--src/config.l3
-rw-r--r--src/definition.cpp6
-rw-r--r--src/doctokenizer.l2
-rw-r--r--src/doxygen.cpp202
-rw-r--r--src/htags.cpp2
-rw-r--r--src/latexdocvisitor.cpp5
-rw-r--r--src/latexgen.cpp5
-rw-r--r--src/memberdef.cpp29
-rw-r--r--src/memberdef.h1
-rw-r--r--src/scanner.l2
-rw-r--r--src/translator_ca.h69
-rw-r--r--src/translator_de.h62
-rw-r--r--src/translator_lt.h138
-rw-r--r--src/translator_pl.h20
-rw-r--r--src/util.cpp107
-rw-r--r--src/util.h2
20 files changed, 351 insertions, 316 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 4aed1ee..dd419bb 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -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
diff --git a/src/classdef.h b/src/classdef.h
index 81d7bf2..ce572ee 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -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
diff --git a/src/code.l b/src/code.l
index d0e0902..6f2c874 100644
--- a/src/code.l
+++ b/src/code.l
@@ -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;
diff --git a/src/commentscan.l b/src/commentscan.l
index e8f3725..31a7c52 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -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()
diff --git a/src/config.l b/src/config.l
index 43bfb32..bfe0e13 100644
--- a/src/config.l
+++ b/src/config.l
@@ -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");
diff --git a/src/definition.cpp b/src/definition.cpp
index 635302d..b9d7104 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -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)
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 8810ba4..7cca73b 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -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;
}
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index d49e706..9b493d4 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -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,47 +3330,42 @@ 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>
- //{
- bool delTempNames=FALSE;
- if (templateNames==0)
- {
- templateNames = getTemplateArgumentsInName(formalArgs,bi->name);
- delTempNames=TRUE;
- }
- BaseInfo tbi(bi->name,bi->prot,bi->virt);
- if (actualArgs) // substitute the formal template arguments of the base class
- {
- tbi.name = substituteTemplateArgumentsInString(bi->name,formalArgs,actualArgs);
- }
- //printf("bi->name=%s tbi.name=%s\n",bi->name.data(),tbi.name.data());
+ //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)
+ {
+ templateNames = getTemplateArgumentsInName(formalArgs,bi->name);
+ delTempNames=TRUE;
+ }
+ BaseInfo tbi(bi->name,bi->prot,bi->virt);
+ if (actualArgs) // substitute the formal template arguments of the base class
+ {
+ tbi.name = substituteTemplateArgumentsInString(bi->name,formalArgs,actualArgs);
+ }
+ //printf("bi->name=%s tbi.name=%s\n",bi->name.data(),tbi.name.data());
- if (mode==DocumentedOnly)
+ if (mode==DocumentedOnly)
+ {
+ // find a documented base class in the correct scope
+ if (!findClassRelation(root,context,instanceCd,&tbi,templateNames,DocumentedOnly,isArtificial))
{
- // find a documented base class in the correct scope
- if (!findClassRelation(root,context,instanceCd,&tbi,templateNames,DocumentedOnly,isArtificial))
+ if (!Config_getBool("HIDE_UNDOC_RELATIONS"))
{
- if (!Config_getBool("HIDE_UNDOC_RELATIONS"))
- {
- // no documented base class -> try to find an undocumented one
- findClassRelation(root,context,instanceCd,&tbi,templateNames,Undocumented,isArtificial);
- }
+ // no documented base class -> try to find an undocumented one
+ findClassRelation(root,context,instanceCd,&tbi,templateNames,Undocumented,isArtificial);
}
}
- else if (mode==TemplateInstances)
- {
- findClassRelation(root,context,instanceCd,&tbi,templateNames,TemplateInstances,isArtificial);
- }
- if (delTempNames)
- {
- delete templateNames;
- templateNames=0;
- }
- //}
+ }
+ else if (mode==TemplateInstances)
+ {
+ findClassRelation(root,context,instanceCd,&tbi,templateNames,TemplateInstances,isArtificial);
+ }
+ if (delTempNames)
+ {
+ 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,
@@ -3644,10 +3644,14 @@ static bool findClassRelation(
}
else
{
- baseClass=new ClassDef(root->fileName,root->startLine,
- baseClassName,ClassDef::Class);
- Doxygen::classSDict.append(baseClassName,baseClass);
- if (isArtificial) baseClass->setClassIsArtificial();
+ 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);
@@ -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);
diff --git a/src/htags.cpp b/src/htags.cpp
index 681e5b8..56b0a2d 100644
--- a/src/htags.cpp
+++ b/src/htags.cpp
@@ -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())
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 8cbefc0..719c357 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -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;
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 90384ec..cf19c9b 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -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
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 36079fd..ee96ff1 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -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
{
diff --git a/src/memberdef.h b/src/memberdef.h
index 6b5c3bf..70c69ac 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -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
diff --git a/src/scanner.l b/src/scanner.l
index dfe8777..f56d880 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -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;
diff --git a/src/translator_ca.h b/src/translator_ca.h
index 3980309..4676a6c 100644
--- a/src/translator_ca.h
+++ b/src/translator_ca.h
@@ -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:"; }
@@ -339,12 +331,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! This is an introduction to the page with the list of class/file groups */
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)
@@ -496,12 +482,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
{ 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
*/
virtual QCString trFunctionDocumentation()
@@ -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()
{
@@ -1330,17 +1288,6 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* 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.
- */
virtual QCString trGlobal(bool first_capital, bool singular)
{
QCString result((first_capital ? "Global" : "global"));
@@ -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
diff --git a/src/translator_de.h b/src/translator_de.h
index cfa8896..7eccaf4 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -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. */
@@ -538,12 +529,6 @@ class TranslatorGerman : public Translator
{ 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
*/
virtual QCString trFunctionDocumentation()
@@ -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()
{
@@ -1408,17 +1367,6 @@ class TranslatorGerman : public Translator
* 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.
- */
virtual QCString trGlobal(bool first_capital, bool singular)
{
QCString result((first_capital ? "Global" : "global")); // FIXME
diff --git a/src/translator_lt.h b/src/translator_lt.h
index e23e492..d9549d5 100644
--- a/src/translator_lt.h
+++ b/src/translator_lt.h
@@ -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"; }
@@ -488,12 +475,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
{ 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
*/
virtual QCString trFunctionDocumentation()
@@ -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()
{
@@ -1328,18 +1287,6 @@ class TranslatorLithuanian : public TranslatorAdapter_1_3_8
* 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.
- */
virtual QCString trGlobal(bool first_capital, bool singular)
{
QCString result((first_capital ? "Global" : "global"));
@@ -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.";
+ }
+
};
diff --git a/src/translator_pl.h b/src/translator_pl.h
index ac4b16d..76a44ec 100644
--- a/src/translator_pl.h
+++ b/src/translator_pl.h
@@ -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,9 +1537,10 @@ 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:";
- }
+ }
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
@@ -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
diff --git a/src/util.cpp b/src/util.cpp
index e18190e..d0dcec6 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -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
{
- 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>");
+ //printf(" i=%d p=%d\n",i,p);
+ canType += type.mid(pp,i-pp);
+ ClassDef *cd = 0;
+ if (!templSpec.isEmpty())
+ {
+ 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);
- pos=i+l+tl;
+ 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;
diff --git a/src/util.h b/src/util.h
index fc991f4..9ae8650 100644
--- a/src/util.h
+++ b/src/util.h
@@ -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,