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

Release-1.4.3-20050623

parent f160c0c8
DOXYGEN Version 1.4.3-20050615 DOXYGEN Version 1.4.3-20050623
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (15 June 2005) Dimitri van Heesch (23 June 2005)
DOXYGEN Version 1.4.3_20050615 DOXYGEN Version 1.4.3_20050623
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (15 June 2005) Dimitri van Heesch (dimitri@stack.nl) (23 June 2005)
1.4.3-20050615 1.4.3-20050623
...@@ -448,9 +448,9 @@ static void startCodeLine() ...@@ -448,9 +448,9 @@ static void startCodeLine()
//lineAnchor.sprintf("l%05d",g_yyLineNr); //lineAnchor.sprintf("l%05d",g_yyLineNr);
Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr); Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
//printf("startCodeLine %d d=%p\n",g_yyLineNr,d); //printf("startCodeLine %d d=%s\n", g_yyLineNr,d ? d->name().data() : "<null>");
//g_code->startLineNumber(); //g_code->startLineNumber();
if (!g_includeCodeFragment && d && d->isLinkableInProject()) if (!g_includeCodeFragment && d)
{ {
g_currentDefinition = d; g_currentDefinition = d;
g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr); g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
...@@ -476,7 +476,7 @@ static void startCodeLine() ...@@ -476,7 +476,7 @@ static void startCodeLine()
g_sourceFileDef->getSourceFileBase(), g_sourceFileDef->getSourceFileBase(),
lineAnchor); lineAnchor);
} }
else else if (d->isLinkableInProject())
{ {
g_code->writeLineNumber(d->getReference(), g_code->writeLineNumber(d->getReference(),
d->getOutputFileBase(), d->getOutputFileBase(),
......
...@@ -327,6 +327,7 @@ static Protection protection; ...@@ -327,6 +327,7 @@ static Protection protection;
static bool xrefAppendFlag; static bool xrefAppendFlag;
static bool inGroupParamFound; static bool inGroupParamFound;
static int braceCount; static int braceCount;
static bool insidePre;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -618,6 +619,7 @@ static inline void setOutput(OutputContext ctx) ...@@ -618,6 +619,7 @@ static inline void setOutput(OutputContext ctx)
break; break;
} }
} }
inContext = ctx; inContext = ctx;
switch(inContext) switch(inContext)
{ {
...@@ -876,8 +878,13 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-] ...@@ -876,8 +878,13 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]
if (inContext!=OutputBrief) if (inContext!=OutputBrief)
{ {
addOutput(yytext); addOutput(yytext);
setOutput(OutputDoc);
} }
else
{
setOutput(OutputDoc); setOutput(OutputDoc);
addOutput(yytext);
}
lineCount(); lineCount();
} }
<Comment>"." { // potential end of a JavaDoc style comment <Comment>"." { // potential end of a JavaDoc style comment
...@@ -2099,6 +2106,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser, ...@@ -2099,6 +2106,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
needNewEntry = FALSE; needNewEntry = FALSE;
xrefKind = XRef_None; xrefKind = XRef_None;
xrefAppendFlag = FALSE; xrefAppendFlag = FALSE;
insidePre = FALSE;
outputXRef.resize(0); outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc ); setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle; briefEndsAtDot = isJavaDocStyle;
......
...@@ -402,6 +402,16 @@ void stringToArgumentList(const char *argsString,ArgumentList* &al) ...@@ -402,6 +402,16 @@ void stringToArgumentList(const char *argsString,ArgumentList* &al)
{ {
if (al==0) return; if (al==0) return;
if (argsString==0) return; if (argsString==0) return;
g_copyArgValue=0;
g_curArgDocs.resize(0);
g_curArgAttrib.resize(0);
g_curArgArray.resize(0);
g_argRoundCount = 0;
g_argSharpCount = 0;
g_argCurlyCount = 0;
g_lastDocChar = 0;
g_inputString = argsString; g_inputString = argsString;
g_inputPosition = 0; g_inputPosition = 0;
g_curArgTypeName.resize(0); g_curArgTypeName.resize(0);
......
...@@ -227,10 +227,15 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, ...@@ -227,10 +227,15 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine,
void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine) void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{ {
if (b==0) return; if (b==0) return;
static QCString outputLanguage = Config_getEnum("OUTPUT_LANGUAGE");
static bool needsDot = outputLanguage!="Japanese" &&
outputLanguage!="Chinese" &&
outputLanguage!="Korean";
//fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine); //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
m_brief=QCString(b).stripWhiteSpace(); m_brief=QCString(b).stripWhiteSpace();
int bl=m_brief.length(); int bl=m_brief.length();
if (bl>0) // add punctuation if needed if (bl>0 && needsDot) // add punctuation if needed
{ {
switch(m_brief.at(bl-1)) switch(m_brief.at(bl-1))
{ {
......
...@@ -699,16 +699,19 @@ static void addClassToContext(Entry *root) ...@@ -699,16 +699,19 @@ static void addClassToContext(Entry *root)
//NamespaceDef *nd = 0; //NamespaceDef *nd = 0;
FileDef *fd = findFileDef(Doxygen::inputNameDict,root->fileName,ambig); FileDef *fd = findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
// see if the using statement was found inside a namespace or inside
// the global file scope.
QCString scName; QCString scName;
if (root->parent->section&Entry::SCOPE_MASK) if (root->parent->section&Entry::SCOPE_MASK)
{ {
scName=root->parent->name; scName=root->parent->name;
} }
// name without parent's scope
QCString fullName = root->name; QCString fullName = root->name;
QCString qualifiedName = scName.isEmpty() ? root->name : scName+"::"+root->name; // strip off any template parameters (but not those for specializations)
fullName=stripTemplateSpecifiersFromScope(fullName);
// name with scope
QCString qualifiedName = scName.isEmpty() ? fullName : scName+"::"+fullName;
ClassDef *cd = getClass(qualifiedName); ClassDef *cd = getClass(qualifiedName);
...@@ -1624,7 +1627,7 @@ static MemberDef *addVariableToFile( ...@@ -1624,7 +1627,7 @@ static MemberDef *addVariableToFile(
for (mni.toFirst();(md=mni.current());++mni) for (mni.toFirst();(md=mni.current());++mni)
{ {
if ( if (
((nd==0 && md->getFileDef() && ((nd==0 && md->getNamespaceDef()==0 && md->getFileDef() &&
root->fileName==md->getFileDef()->absFilePath() root->fileName==md->getFileDef()->absFilePath()
) // both variable names in the same file ) // both variable names in the same file
|| (nd!=0 && md->getNamespaceDef()==nd) // both in same namespace || (nd!=0 && md->getNamespaceDef()==nd) // both in same namespace
...@@ -1633,12 +1636,16 @@ static MemberDef *addVariableToFile( ...@@ -1633,12 +1636,16 @@ static MemberDef *addVariableToFile(
) )
// variable already in the scope // variable already in the scope
{ {
Debug::print(Debug::Variables,0,
" variable already found: scope=%s\n",md->getOuterScope()->name().data());
addMemberDocs(root,md,def,0,FALSE); addMemberDocs(root,md,def,0,FALSE);
md->setRefItems(root->sli); md->setRefItems(root->sli);
return md; return md;
} }
} }
} }
Debug::print(Debug::Variables,0,
" new variable!\n");
// new global variable, enum value or typedef // new global variable, enum value or typedef
MemberDef *md=new MemberDef( MemberDef *md=new MemberDef(
root->fileName,root->startLine, root->fileName,root->startLine,
...@@ -1658,6 +1665,7 @@ static MemberDef *addVariableToFile( ...@@ -1658,6 +1665,7 @@ static MemberDef *addVariableToFile(
md->setDefinition(def); md->setDefinition(def);
md->enableCallGraph(root->callGraph); md->enableCallGraph(root->callGraph);
md->setExplicitExternal(root->explicitExternal); md->setExplicitExternal(root->explicitExternal);
md->setOuterScope(fd);
if (!root->explicitExternal) if (!root->explicitExternal)
{ {
md->setBodySegment(root->bodyLine,root->endBodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
...@@ -2378,6 +2386,7 @@ static void buildFunctionList(Entry *root) ...@@ -2378,6 +2386,7 @@ static void buildFunctionList(Entry *root)
if (md->briefDescription().isEmpty() && !root->brief.isEmpty()) if (md->briefDescription().isEmpty() && !root->brief.isEmpty())
{ {
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setArgsString(root->args);
} }
else if (!md->briefDescription().isEmpty() && !root->brief.isEmpty() && mnd==rnd) else if (!md->briefDescription().isEmpty() && !root->brief.isEmpty() && mnd==rnd)
{ {
...@@ -3100,16 +3109,20 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co ...@@ -3100,16 +3109,20 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co
FileDef *fd=cd->getFileDef(); FileDef *fd=cd->getFileDef();
ClassDef *result=0; ClassDef *result=0;
if (context) if (context && cd!=context)
{ {
result = getResolvedClass(context,0,name); result = getResolvedClass(context,0,name);
//printf("** Trying to find %s within context %s result=%s\n",
// name.data(),context->name().data(),result ? result->name().data() : "<none>");
} }
if (result==0) if (result==0)
{ {
result = getResolvedClass(cd,fd,name); result = getResolvedClass(cd,fd,name);
} }
//printf("** Trying to find %s within context %s class %s result=%s\n",
// name.data(),
// context ? context->name().data() : "<none>",
// cd ? cd->name().data() : "<none>",
// result ? result->name().data() : "<none>"
// );
return result; return result;
} }
...@@ -3165,11 +3178,7 @@ static void findUsedClassesForClass(Entry *root, ...@@ -3165,11 +3178,7 @@ static void findUsedClassesForClass(Entry *root,
{ {
type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs); type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
} }
//printf(" template substitution gives=%s\n",type.data());
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
QCString typeName = resolveTypeDef(masterCd,usedClassName); QCString typeName = resolveTypeDef(masterCd,usedClassName);
//printf("*** Found resolved class %s for %s\n",typeName.data(),usedClassName.data()); //printf("*** Found resolved class %s for %s\n",typeName.data(),usedClassName.data());
...@@ -3179,6 +3188,13 @@ static void findUsedClassesForClass(Entry *root, ...@@ -3179,6 +3188,13 @@ static void findUsedClassesForClass(Entry *root,
usedClassName=typeName; usedClassName=typeName;
} }
//printf(" template substitution gives=%s\n",type.data());
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
//QCString typeName = resolveTypeDef(masterCd,usedClassName);
int sp=usedClassName.find('<'); int sp=usedClassName.find('<');
if (sp==-1) sp=0; if (sp==-1) sp=0;
int si=usedClassName.findRev("::",sp); int si=usedClassName.findRev("::",sp);
...@@ -3767,6 +3783,7 @@ static void computeClassRelations() ...@@ -3767,6 +3783,7 @@ static void computeClassRelations()
for (;(root=edi.current());++edi) for (;(root=edi.current());++edi)
{ {
ClassDef *cd; ClassDef *cd;
// strip any annonymous scopes first // strip any annonymous scopes first
QCString bName=stripAnonymousNamespaceScope(root->name); QCString bName=stripAnonymousNamespaceScope(root->name);
bName=stripTemplateSpecifiersFromScope(bName); bName=stripTemplateSpecifiersFromScope(bName);
...@@ -4010,12 +4027,15 @@ static void addMemberDocs(Entry *root, ...@@ -4010,12 +4027,15 @@ static void addMemberDocs(Entry *root,
if (al) if (al)
{ {
//printf("merging arguments (1)\n"); //printf("merging arguments (1) docs=%d\n",root->doc.isEmpty());
if (!root->doc.isEmpty())
{
mergeArguments(md->argumentList(),al,TRUE); mergeArguments(md->argumentList(),al,TRUE);
} }
}
else else
{ {
if ( if ( !root->doc.isEmpty() &&
matchArguments2( md->getOuterScope(), md->getFileDef(), md->argumentList(), matchArguments2( md->getOuterScope(), md->getFileDef(), md->argumentList(),
rscope,rfd,root->argList, rscope,rfd,root->argList,
TRUE TRUE
...@@ -4088,16 +4108,14 @@ static void addMemberDocs(Entry *root, ...@@ -4088,16 +4108,14 @@ static void addMemberDocs(Entry *root,
md->setMaxInitLines(root->initLines); md->setMaxInitLines(root->initLines);
} }
//if (md->bodyCode().isEmpty() && !root->body.isEmpty()) /* no body yet */
//{
// md->setBody(root->body);
//}
if (rfd) if (rfd)
{ {
if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1) || if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1)
(md->isVariable() && !root->explicitExternal)) // || (md->isVariable() && !root->explicitExternal)
)
{ {
//printf("Setting new body segment [%d,%d]\n",root->bodyLine,root->endBodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine); md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setBodyDef(rfd); md->setBodyDef(rfd);
} }
...@@ -4107,8 +4125,6 @@ static void addMemberDocs(Entry *root, ...@@ -4107,8 +4125,6 @@ static void addMemberDocs(Entry *root,
md->enableCallGraph(md->hasCallGraph() || root->callGraph); md->enableCallGraph(md->hasCallGraph() || root->callGraph);
//md->setDefFile(root->fileName);
//md->setDefLine(root->startLine);
md->mergeMemberSpecifiers(root->memSpec); md->mergeMemberSpecifiers(root->memSpec);
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
addMemberToGroups(root,md); addMemberToGroups(root,md);
...@@ -4182,8 +4198,10 @@ static bool findGlobalMember(Entry *root, ...@@ -4182,8 +4198,10 @@ static bool findGlobalMember(Entry *root,
{ {
bool ambig; bool ambig;
NamespaceDef *nd=md->getNamespaceDef(); NamespaceDef *nd=md->getNamespaceDef();
//printf("Namespace namespaceName=%s nd=%s\n", //printf("Namespace namespaceName=%s nd=%s\n",
// namespaceName.data(),nd ? nd->name().data() : "<none>"); // namespaceName.data(),nd ? nd->name().data() : "<none>");
FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig); FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
//printf("File %s\n",fd ? fd->name().data() : "<none>"); //printf("File %s\n",fd ? fd->name().data() : "<none>");
NamespaceSDict *nl = fd ? fd->getUsedNamespaces() : 0; NamespaceSDict *nl = fd ? fd->getUsedNamespaces() : 0;
...@@ -6021,15 +6039,15 @@ static void addSourceReferences() ...@@ -6021,15 +6039,15 @@ static void addSourceReferences()
for (mni.toFirst();(md=mni.current());++mni) for (mni.toFirst();(md=mni.current());++mni)
{ {
//printf("class member %s\n",md->name().data()); //printf("class member %s\n",md->name().data());
ClassDef *cd=md->getClassDef();
FileDef *fd=md->getBodyDef(); FileDef *fd=md->getBodyDef();
if (fd && cd && cd->isLinkableInProject() && md->getStartBodyLine()!=-1 && if (fd &&
md->isLinkableInProject()) md->getStartBodyLine()!=-1 &&
md->isLinkableInProject() &&
fd->generateSourceFile())
{ {
Definition *d=cd; //printf("Found member `%s' in file `%s' at line `%d' def=%s\n",
if (d==0) d=md->getNamespaceDef(); // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data());
if (d==0) d=md->getFileDef(); fd->addSourceRef(md->getStartBodyLine(),md->getOuterScope(),md);
fd->addSourceRef(md->getStartBodyLine(),d,md);
} }
} }
} }
...@@ -6040,22 +6058,18 @@ static void addSourceReferences() ...@@ -6040,22 +6058,18 @@ static void addSourceReferences()
MemberDef *md=0; MemberDef *md=0;
for (mni.toFirst();(md=mni.current());++mni) for (mni.toFirst();(md=mni.current());++mni)
{ {
NamespaceDef *nd=md->getNamespaceDef();
FileDef *fd=md->getBodyDef(); FileDef *fd=md->getBodyDef();
GroupDef *gd=md->getGroupDef(); //printf("member %s body=[%d,%d] fd=%p\n",md->name().data(),
//printf("member %s fd=%p nd=%p gd=%p\n",md->name().data(),fd,nd,gd); // md->getStartBodyLine(),md->getEndBodyLine(),fd);
if (fd && md->getStartBodyLine()!=-1 && md->isLinkableInProject() && if (fd &&
((nd && nd->isLinkableInProject()) || md->getStartBodyLine()!=-1 &&
(fd->isLinkableInProject()) || md->isLinkableInProject() &&
(gd && gd->isLinkableInProject()) fd->generateSourceFile()
)
) )
{ {
//printf("Found member `%s' in file `%s' at line `%d'\n", //printf("Found member `%s' in file `%s' at line `%d' def=%s\n",
// md->name().data(),fd->name().data(),md->getStartBodyLine()); // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data());
Definition *d=gd!=0 ? (Definition *)gd : fd->addSourceRef(md->getStartBodyLine(),md->getOuterScope(),md);
(nd!=0 ? (Definition *)nd : (Definition *)fd);
fd->addSourceRef(md->getStartBodyLine(),d,md);
} }
} }
} }
......
...@@ -762,6 +762,7 @@ void FileDef::insertNamespace(NamespaceDef *nd) ...@@ -762,6 +762,7 @@ void FileDef::insertNamespace(NamespaceDef *nd)
void FileDef::addSourceRef(int line,Definition *d,MemberDef *md) void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
{ {
//printf("FileDef::addSourceDef(%d,%p,%p)\n",line,d,md);
if (d) if (d)
{ {
if (srcDefDict==0) srcDefDict = new QIntDict<Definition>(257); if (srcDefDict==0) srcDefDict = new QIntDict<Definition>(257);
......
...@@ -170,7 +170,7 @@ void LatexDocVisitor::visit(DocSymbol *s) ...@@ -170,7 +170,7 @@ void LatexDocVisitor::visit(DocSymbol *s)
case DocSymbol::Szlig: m_t << "\"s"; break; case DocSymbol::Szlig: m_t << "\"s"; break;
case DocSymbol::Cedil: m_t << "\\c{" << s->letter() << "}"; break; case DocSymbol::Cedil: m_t << "\\c{" << s->letter() << "}"; break;
case DocSymbol::Ring: m_t << "\\" << s->letter() << s->letter(); break; case DocSymbol::Ring: m_t << "\\" << s->letter() << s->letter(); break;
case DocSymbol::Nbsp: m_t << "\\ "; break; case DocSymbol::Nbsp: m_t << "~"; break;
default: default:
err("Error: unknown symbol found\n"); err("Error: unknown symbol found\n");
} }
......
...@@ -185,6 +185,7 @@ class MemberDef : public Definition ...@@ -185,6 +185,7 @@ class MemberDef : public Definition
void setHasDocumentedReturnType(bool b) { m_hasDocumentedReturnType = b; } void setHasDocumentedReturnType(bool b) { m_hasDocumentedReturnType = b; }
void setInheritsDocsFrom(MemberDef *md) { m_docProvider = md; } void setInheritsDocsFrom(MemberDef *md) { m_docProvider = md; }
void setTagInfo(TagInfo *i); void setTagInfo(TagInfo *i);
void setArgsString(const char *as) { args = as; }
// output generation // output generation
void writeDeclaration(OutputList &ol, void writeDeclaration(OutputList &ol,
......
...@@ -2175,6 +2175,8 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2175,6 +2175,8 @@ IDLATTR ("["[^\]]*"]"){BN}*
} }
current->name.resize(0); current->name.resize(0);
current->args.resize(0); current->args.resize(0);
current->brief.resize(0);
current->doc.resize(0);
current->initializer.resize(0); current->initializer.resize(0);
current->bitfields.resize(0); current->bitfields.resize(0);
int i=oldType.length(); int i=oldType.length();
...@@ -2709,7 +2711,7 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -2709,7 +2711,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
fullArgString=current->args.copy(); fullArgString=current->args.copy();
copyArgString=&current->args; copyArgString=&current->args;
BEGIN( ReadFuncArgType ) ; BEGIN( ReadFuncArgType ) ;
//printf(">>> Read function arguments!\n"); //printf(">>> Read function arguments current->argList->count()=%d\n",current->argList->count());
} }
} }
/* /*
...@@ -4047,6 +4049,10 @@ IDLATTR ("["[^\]]*"]"){BN}* ...@@ -4047,6 +4049,10 @@ IDLATTR ("["[^\]]*"]"){BN}*
<DocBlock>"//" { // slashes in the middle of a comment block <DocBlock>"//" { // slashes in the middle of a comment block
docBlock+=yytext; docBlock+=yytext;
} }
<DocBlock>"/*" { // start of a new comment in the
// middle of a comment block
docBlock+=yytext;
}
<DocBlock>("@@"|"\\\\"){ID}/[^a-z_A-Z0-9] { // escaped command <DocBlock>("@@"|"\\\\"){ID}/[^a-z_A-Z0-9] { // escaped command
docBlock+=yytext; docBlock+=yytext;
} }
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
/*! /*!
Indonesian translator based on Doxygen 1.4.2. Indonesian translator based on Doxygen 1.4.2.
\version $Id$
\author Hendy Irawan <ceefour@gauldong.net> \author Hendy Irawan <ceefour@gauldong.net>
*/ */
class TranslatorIndonesian : public Translator class TranslatorIndonesian : public Translator
......
...@@ -2685,21 +2685,19 @@ static QCString getCanonicalTypeForIdentifier( ...@@ -2685,21 +2685,19 @@ static QCString getCanonicalTypeForIdentifier(
Definition *d,FileDef *fs,const QCString &word, Definition *d,FileDef *fs,const QCString &word,
QCString *tSpec) QCString *tSpec)
{ {
QCString symName,scope,result,templSpec; QCString symName,scope,result,templSpec,tmpName;
DefinitionList *defList=0; DefinitionList *defList=0;
if (tSpec) templSpec = *tSpec; if (tSpec) templSpec = *tSpec;
if (word.findRev("::")!=-1 && !(scope=stripScope(word)).isEmpty()) if (word.findRev("::")!=-1 && !(tmpName=stripScope(word)).isEmpty())
{ {
symName=word.mid(scope.length()+2); symName=tmpName;
} }
else else
{ {
symName=word; symName=word;
} }
//printf("symName=%s templSpec=%s\n",symName.data(),templSpec.data());
if (!symName.isEmpty() && !templSpec.isEmpty() && if (!symName.isEmpty() && !templSpec.isEmpty() &&
(defList=Doxygen::symbolMap->find(symName+templSpec)) && (defList=Doxygen::symbolMap->find(symName+templSpec)) &&
defList->count()==1) // word without scope but with template specs defList->count()==1) // word without scope but with template specs
...@@ -2715,6 +2713,7 @@ static QCString getCanonicalTypeForIdentifier( ...@@ -2715,6 +2713,7 @@ static QCString getCanonicalTypeForIdentifier(
// unique symbol in the symbol map // unique symbol in the symbol map
{ {
QCString ts; QCString ts;
//printf("unique symName=%s\n",symName.data());
result = resolveSymbolName(fs,defList->first(),ts)+templSpec; result = resolveSymbolName(fs,defList->first(),ts)+templSpec;
} }
else // symbol not unique, try to find the one in the right scope else // symbol not unique, try to find the one in the right scope
...@@ -2730,11 +2729,19 @@ static QCString getCanonicalTypeForIdentifier( ...@@ -2730,11 +2729,19 @@ static QCString getCanonicalTypeForIdentifier(
{ {
cd = getResolvedClass(d,fs,word,&mType,0,TRUE); cd = getResolvedClass(d,fs,word,&mType,0,TRUE);
} }
//printf("symbol=%s word=%s cd=%s d=%s fs=%s\n",
// symName.data(),
// word.data(),
// cd?cd->name().data():"<none>",
// d?d->name().data():"<none>",
// fs?fs->name().data():"<none>"
// );
//printf(">>>> word '%s' => '%s'\n",(word+templSpec).data(),cd?cd->qualifiedNameWithTemplateParameters().data():"<none>"); //printf(">>>> word '%s' => '%s'\n",(word+templSpec).data(),cd?cd->qualifiedNameWithTemplateParameters().data():"<none>");
if (cd) // known type if (cd) // known type
{ {
result = cd->qualifiedNameWithTemplateParameters(); //result = cd->qualifiedNameWithTemplateParameters();
result = removeRedundantWhiteSpace(cd->qualifiedName()+templSpec);
if (cd->isTemplate()) if (cd->isTemplate())
{ {
*tSpec=""; *tSpec="";
...@@ -2799,6 +2806,8 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a ...@@ -2799,6 +2806,8 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
//printf(" i=%d p=%d\n",i,p); //printf(" i=%d p=%d\n",i,p);
canType += type.mid(pp,i-pp); canType += type.mid(pp,i-pp);
//printf("word=%s templSpec=%s\n",word.data(),templSpec.data());
canType += getCanonicalTypeForIdentifier(d,fs,word,&templSpec); canType += getCanonicalTypeForIdentifier(d,fs,word,&templSpec);
if (!templSpec.isEmpty()) // if we didn't use up the templSpec already if (!templSpec.isEmpty()) // if we didn't use up the templSpec already
// (i.e. type is not a template specialization) // (i.e. type is not a template specialization)
...@@ -2825,8 +2834,8 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a ...@@ -2825,8 +2834,8 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,const Argument *a
} }
static bool matchArgument2( static bool matchArgument2(
Definition *srcScope,FileDef *srcFileScope,const Argument *srcA, Definition *srcScope,FileDef *srcFileScope,Argument *srcA,
Definition *dstScope,FileDef *dstFileScope,const Argument *dstA Definition *dstScope,FileDef *dstFileScope,Argument *dstA
) )
{ {
//printf(">> match argument: %s::`%s|%s' (%s) <-> %s::`%s|%s' (%s)\n", //printf(">> match argument: %s::`%s|%s' (%s) <-> %s::`%s|%s' (%s)\n",
...@@ -2840,18 +2849,26 @@ static bool matchArgument2( ...@@ -2840,18 +2849,26 @@ static bool matchArgument2(
NOMATCH NOMATCH
return FALSE; return FALSE;
} }
QCString sSrcName=" "+srcA->name;
QCString sDstName=" "+dstA->name;
if (sSrcName==dstA->type.right(sSrcName.length()))
{ // case "unsigned int" <-> "unsigned int i"
srcA->type+=sSrcName;
srcA->name="";
}
else if (sDstName==srcA->type.right(sDstName.length()))
{ // case "unsigned int i" <-> "unsigned int"
dstA->type+=sDstName;
dstA->name="";
}
if (srcA->canType.isEmpty()) if (srcA->canType.isEmpty())
{ {
Argument *thatSrcA = (Argument*)srcA; // since canType is a cached value srcA->canType = extractCanonicalType(srcScope,srcFileScope,srcA);
// of type we do not really change the argument, but the
// compiler does know that.
thatSrcA->canType = extractCanonicalType(srcScope,srcFileScope,srcA);
} }
if (dstA->canType.isEmpty()) if (dstA->canType.isEmpty())
{ {
Argument *thatDstA = (Argument*)dstA; dstA->canType = extractCanonicalType(dstScope,dstFileScope,dstA);
thatDstA->canType = extractCanonicalType(dstScope,dstFileScope,dstA);
} }
if (srcA->canType==dstA->canType) if (srcA->canType==dstA->canType)
...@@ -3010,19 +3027,20 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwr ...@@ -3010,19 +3027,20 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwr
} }
else if (!srcA->name.isEmpty() && !dstA->name.isEmpty()) else if (!srcA->name.isEmpty() && !dstA->name.isEmpty())
{ {
//printf("srcA->name=%s dstA->name=%s\n",srcA->name.data(),dstA->name.data());
if (forceNameOverwrite) if (forceNameOverwrite)
{ {
srcA->name = dstA->name.copy(); srcA->name = dstA->name;
} }
else else
{ {
if (srcA->docs.isEmpty() && !dstA->docs.isEmpty()) if (srcA->docs.isEmpty() && !dstA->docs.isEmpty())
{ {
srcA->name = dstA->name.copy(); srcA->name = dstA->name;
} }
else if (!srcA->docs.isEmpty() && dstA->docs.isEmpty()) else if (!srcA->docs.isEmpty() && dstA->docs.isEmpty())
{ {
dstA->name = srcA->name.copy(); dstA->name = srcA->name;
} }
} }
} }
......
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