Commit f12c7847 authored by dimitri's avatar dimitri

Release-1.2.11.1

parent c52e7198
DOXYGEN Version 1.2.11-20011003 DOXYGEN Version 1.2.11.1
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (03 October 2001) Dimitri van Heesch (07 October 2001)
DOXYGEN Version 1.2.11_20011003 DOXYGEN Version 1.2.11.1
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) (03 October 2001) Dimitri van Heesch (dimitri@stack.nl) (07 October 2001)
1.2.11-20011003 1.2.11.1
Name: doxygen Name: doxygen
Version: 1.2.11_20011003 Version: 1.2.11.1
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 4 Release: 4
Source: doxygen-%{version}.src.tar.gz Source: doxygen-%{version}.src.tar.gz
......
...@@ -1192,7 +1192,10 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1192,7 +1192,10 @@ void ClassDef::writeDocumentation(OutputList &ol)
endFile(ol); endFile(ol);
}
void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
{
// write inner classes after the parent, so the tag files contain // write inner classes after the parent, so the tag files contain
// the definition in proper order! // the definition in proper order!
if (m_innerClasses) if (m_innerClasses)
......
...@@ -100,6 +100,7 @@ class ClassDef : public Definition ...@@ -100,6 +100,7 @@ class ClassDef : public Definition
MemberNameInfoSDict *memberNameInfoSDict() { return m_allMemberNameInfoSDict; } MemberNameInfoSDict *memberNameInfoSDict() { return m_allMemberNameInfoSDict; }
void writeDocumentation(OutputList &ol); void writeDocumentation(OutputList &ol);
void writeDocumentationForInnerClasses(OutputList &ol);
void writeMemberList(OutputList &ol); void writeMemberList(OutputList &ol);
void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup); void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup);
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
* includes * includes
*/ */
#include <stdio.h> #include <stdio.h>
//#include <iostream.h>
#include <assert.h> #include <assert.h>
#include <ctype.h> #include <ctype.h>
#include <qregexp.h> #include <qregexp.h>
...@@ -33,6 +32,7 @@ ...@@ -33,6 +32,7 @@
#include "message.h" #include "message.h"
#include "outputlist.h" #include "outputlist.h"
#include "util.h" #include "util.h"
#include "membername.h"
#define YY_NEVER_INTERACTIVE 1 #define YY_NEVER_INTERACTIVE 1
...@@ -450,7 +450,7 @@ static void generateClassLink(OutputDocInterface &ol,char *clName,int *clNameLen ...@@ -450,7 +450,7 @@ static void generateClassLink(OutputDocInterface &ol,char *clName,int *clNameLen
else else
{ {
MemberName *mn; MemberName *mn;
if (cd==0 && (mn=Doxygen::functionNameDict[clName])) if (cd==0 && (mn=Doxygen::functionNameSDict[clName]))
{ {
if (mn->count()==1) if (mn->count()==1)
{ {
...@@ -557,8 +557,8 @@ static bool getLink(const char *className, ...@@ -557,8 +557,8 @@ static bool getLink(const char *className,
static bool generateClassMemberLink(OutputDocInterface &ol,ClassDef *mcd,const char *memName) static bool generateClassMemberLink(OutputDocInterface &ol,ClassDef *mcd,const char *memName)
{ {
//printf("generateClassMemberLink(%s,%s)\n",mcd->name().data(),memName); //printf("generateClassMemberLink(class=%s,member=%s)\n",mcd->name().data(),memName);
MemberName *mmn=Doxygen::memberNameDict[memName]; MemberName *mmn=Doxygen::memberNameSDict[memName];
if (mmn) if (mmn)
{ {
MemberNameIterator mmni(*mmn); MemberNameIterator mmni(*mmn);
...@@ -581,6 +581,7 @@ static bool generateClassMemberLink(OutputDocInterface &ol,ClassDef *mcd,const c ...@@ -581,6 +581,7 @@ static bool generateClassMemberLink(OutputDocInterface &ol,ClassDef *mcd,const c
// extract class definition of the return type in order to resolve // extract class definition of the return type in order to resolve
// a->b()->c() like call chains // a->b()->c() like call chains
g_classVar = stripClassName(xmd->typeString()); g_classVar = stripClassName(xmd->typeString());
//printf("g_classVar=%s->%p\n",xmd->typeString(),g_classVar);
// add usage reference // add usage reference
if (g_currentDefinition && g_currentMemberDef && if (g_currentDefinition && g_currentMemberDef &&
...@@ -665,7 +666,7 @@ static void generateMemberLink(OutputDocInterface &ol,const char *varName, ...@@ -665,7 +666,7 @@ static void generateMemberLink(OutputDocInterface &ol,const char *varName,
if (vcd && vcd->isLinkable()) if (vcd && vcd->isLinkable())
{ {
//printf("Found class %s for variable `%s'\n",g_classScope.data(),varName); //printf("Found class %s for variable `%s'\n",g_classScope.data(),varName);
MemberName *vmn=Doxygen::memberNameDict[varName]; MemberName *vmn=Doxygen::memberNameSDict[varName];
if (vmn==0) if (vmn==0)
{ {
int vi; int vi;
...@@ -675,7 +676,7 @@ static void generateMemberLink(OutputDocInterface &ol,const char *varName, ...@@ -675,7 +676,7 @@ static void generateMemberLink(OutputDocInterface &ol,const char *varName,
{ {
ClassDef *jcd = getClass(vn.left(vi)); ClassDef *jcd = getClass(vn.left(vi));
vn=vn.right(vn.length()-vi-2); vn=vn.right(vn.length()-vi-2);
vmn=Doxygen::memberNameDict[vn]; vmn=Doxygen::memberNameSDict[vn];
//printf("Trying name `%s' scope=%s\n",vn.data(),scope.data()); //printf("Trying name `%s' scope=%s\n",vn.data(),scope.data());
if (vmn) if (vmn)
{ {
...@@ -1159,6 +1160,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1159,6 +1160,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
BEGIN( MemberCall ); BEGIN( MemberCall );
} }
<MemberCall>{SCOPETNAME}/{B}*"(" { <MemberCall>{SCOPETNAME}/{B}*"(" {
//printf("g_name=`%s' g_classVar=`%s'\n",g_name.data(),g_classVar?g_classVar->name().data():"<none>");
if (!g_name.isEmpty()) if (!g_name.isEmpty())
{ {
generateMemberLink(*g_code,g_name,yytext); generateMemberLink(*g_code,g_name,yytext);
...@@ -1190,6 +1192,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1190,6 +1192,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
} }
} }
<MemberCall>{SCOPENAME}/{B}* { <MemberCall>{SCOPENAME}/{B}* {
//printf("g_name=`%s' g_classVar=`%s'\n",g_name.data(),g_classVar?g_classVar->name().data():"<none>");
if (!g_name.isEmpty()) if (!g_name.isEmpty())
{ {
generateMemberLink(*g_code,g_name,yytext); generateMemberLink(*g_code,g_name,yytext);
......
...@@ -72,13 +72,15 @@ ClassSDict Doxygen::hiddenClasses(257); ...@@ -72,13 +72,15 @@ ClassSDict Doxygen::hiddenClasses(257);
//NamespaceList Doxygen::namespaceList; // all namespaces //NamespaceList Doxygen::namespaceList; // all namespaces
//NamespaceDict Doxygen::namespaceDict(257); //NamespaceDict Doxygen::namespaceDict(257);
NamespaceSDict Doxygen::namespaceSDict(17); NamespaceSDict Doxygen::namespaceSDict(20);
MemberNameList Doxygen::memberNameList; // class member + related functions //MemberNameList Doxygen::memberNameList; // class member + related functions
MemberNameDict Doxygen::memberNameDict(10007); //MemberNameDict Doxygen::memberNameDict(10007);
MemberNameSDict Doxygen::memberNameSDict(10000);
MemberNameList Doxygen::functionNameList; // all global function/namespace members //MemberNameList Doxygen::functionNameList; // all global function/namespace members
MemberNameDict Doxygen::functionNameDict(10007); //MemberNameDict Doxygen::functionNameDict(10007);
MemberNameSDict Doxygen::functionNameSDict(10000);
FileNameList Doxygen::inputNameList; // all input files FileNameList Doxygen::inputNameList; // all input files
FileNameDict *Doxygen::inputNameDict; FileNameDict *Doxygen::inputNameDict;
...@@ -127,14 +129,14 @@ void clearAll() ...@@ -127,14 +129,14 @@ void clearAll()
Doxygen::namespaceSDict.clear(); Doxygen::namespaceSDict.clear();
Doxygen::pageSDict->clear(); Doxygen::pageSDict->clear();
Doxygen::exampleSDict->clear(); Doxygen::exampleSDict->clear();
Doxygen::memberNameList.clear(); //Doxygen::memberNameList.clear();
Doxygen::functionNameList.clear(); //Doxygen::functionNameList.clear();
Doxygen::inputNameList.clear(); Doxygen::inputNameList.clear();
Doxygen::groupList.clear(); Doxygen::groupList.clear();
Doxygen::formulaList.clear(); Doxygen::formulaList.clear();
Doxygen::classSDict.clear(); Doxygen::classSDict.clear();
Doxygen::memberNameDict.clear(); //Doxygen::memberNameDict.clear();
Doxygen::functionNameDict.clear(); //Doxygen::functionNameDict.clear();
Doxygen::sectionDict.clear(); Doxygen::sectionDict.clear();
Doxygen::inputNameDict->clear(); Doxygen::inputNameDict->clear();
Doxygen::includeNameDict->clear(); Doxygen::includeNameDict->clear();
...@@ -161,10 +163,10 @@ void statistics() ...@@ -161,10 +163,10 @@ void statistics()
Doxygen::imageNameDict->statistics(); Doxygen::imageNameDict->statistics();
fprintf(stderr,"--- dotFileNameDict stats ----\n"); fprintf(stderr,"--- dotFileNameDict stats ----\n");
Doxygen::dotFileNameDict->statistics(); Doxygen::dotFileNameDict->statistics();
fprintf(stderr,"--- memberNameDict stats ----\n"); //fprintf(stderr,"--- memberNameDict stats ----\n");
Doxygen::memberNameDict.statistics(); //Doxygen::memberNameDict.statistics();
fprintf(stderr,"--- functionNameDict stats ----\n"); //fprintf(stderr,"--- functionNameDict stats ----\n");
Doxygen::functionNameDict.statistics(); //Doxygen::functionNameDict.statistics();
fprintf(stderr,"--- excludeNameDict stats ----\n"); fprintf(stderr,"--- excludeNameDict stats ----\n");
excludeNameDict.statistics(); excludeNameDict.statistics();
fprintf(stderr,"--- aliasDict stats ----\n"); fprintf(stderr,"--- aliasDict stats ----\n");
...@@ -1329,7 +1331,7 @@ static MemberDef *addVariableToClass( ...@@ -1329,7 +1331,7 @@ static MemberDef *addVariableToClass(
// see if the member is already found in the same scope // see if the member is already found in the same scope
// (this may be the case for a static member that is initialized // (this may be the case for a static member that is initialized
// outside the class) // outside the class)
MemberName *mn=Doxygen::memberNameDict[name]; MemberName *mn=Doxygen::memberNameSDict[name];
if (mn) if (mn)
{ {
MemberNameIterator mni(*mn); MemberNameIterator mni(*mn);
...@@ -1390,8 +1392,9 @@ static MemberDef *addVariableToClass( ...@@ -1390,8 +1392,9 @@ static MemberDef *addVariableToClass(
mn = new MemberName(name); mn = new MemberName(name);
mn->append(md); mn->append(md);
//printf("Adding memberName=%s\n",mn->memberName()); //printf("Adding memberName=%s\n",mn->memberName());
Doxygen::memberNameDict.insert(name,mn); //Doxygen::memberNameDict.insert(name,mn);
Doxygen::memberNameList.append(mn); //Doxygen::memberNameList.append(mn);
Doxygen::memberNameSDict.append(name,mn);
// add the member to the class // add the member to the class
} }
cd->insertMember(md); cd->insertMember(md);
...@@ -1469,7 +1472,7 @@ static MemberDef *addVariableToFile( ...@@ -1469,7 +1472,7 @@ static MemberDef *addVariableToFile(
} }
if (def.left(7)=="static ") def=def.right(def.length()-7); if (def.left(7)=="static ") def=def.right(def.length()-7);
MemberName *mn=Doxygen::functionNameDict[name]; MemberName *mn=Doxygen::functionNameSDict[name];
if (mn) if (mn)
{ {
QCString nscope=removeAnonymousScopes(scope); QCString nscope=removeAnonymousScopes(scope);
...@@ -1565,8 +1568,9 @@ static MemberDef *addVariableToFile( ...@@ -1565,8 +1568,9 @@ static MemberDef *addVariableToFile(
{ {
mn = new MemberName(name); mn = new MemberName(name);
mn->append(md); mn->append(md);
Doxygen::functionNameDict.insert(name,mn); //Doxygen::functionNameDict.insert(name,mn);
Doxygen::functionNameList.append(mn); //Doxygen::functionNameList.append(mn);
Doxygen::functionNameSDict.append(name,mn);
} }
root->section = Entry::EMPTY_SEC; root->section = Entry::EMPTY_SEC;
return md; return md;
...@@ -1979,7 +1983,7 @@ static void buildFunctionList(Entry *root) ...@@ -1979,7 +1983,7 @@ static void buildFunctionList(Entry *root)
// add member to the global list of all members // add member to the global list of all members
//printf("Adding member=%s class=%s\n",md->name().data(),cd->name().data()); //printf("Adding member=%s class=%s\n",md->name().data(),cd->name().data());
MemberName *mn; MemberName *mn;
if ((mn=Doxygen::memberNameDict[name])) if ((mn=Doxygen::memberNameSDict[name]))
{ {
mn->append(md); mn->append(md);
} }
...@@ -1987,8 +1991,9 @@ static void buildFunctionList(Entry *root) ...@@ -1987,8 +1991,9 @@ static void buildFunctionList(Entry *root)
{ {
mn = new MemberName(name); mn = new MemberName(name);
mn->append(md); mn->append(md);
Doxygen::memberNameDict.insert(name,mn); //Doxygen::memberNameDict.insert(name,mn);
Doxygen::memberNameList.append(mn); //Doxygen::memberNameList.append(mn);
Doxygen::memberNameSDict.append(name,mn);
} }
// add member to the class cd // add member to the class cd
...@@ -2016,7 +2021,7 @@ static void buildFunctionList(Entry *root) ...@@ -2016,7 +2021,7 @@ static void buildFunctionList(Entry *root)
bool found=FALSE; bool found=FALSE;
MemberName *mn; MemberName *mn;
//MemberDef *fmd; //MemberDef *fmd;
if ((mn=Doxygen::functionNameDict[rname])) if ((mn=Doxygen::functionNameSDict[rname]))
{ {
//printf("--> function %s already found!\n",rname.data()); //printf("--> function %s already found!\n",rname.data());
MemberNameIterator mni(*mn); MemberNameIterator mni(*mn);
...@@ -2182,7 +2187,7 @@ static void buildFunctionList(Entry *root) ...@@ -2182,7 +2187,7 @@ static void buildFunctionList(Entry *root)
// add member to the list of file members // add member to the list of file members
//printf("Adding member=%s\n",md->name().data()); //printf("Adding member=%s\n",md->name().data());
MemberName *mn; MemberName *mn;
if ((mn=Doxygen::functionNameDict[name])) if ((mn=Doxygen::functionNameSDict[name]))
{ {
mn->append(md); mn->append(md);
} }
...@@ -2190,8 +2195,9 @@ static void buildFunctionList(Entry *root) ...@@ -2190,8 +2195,9 @@ static void buildFunctionList(Entry *root)
{ {
mn = new MemberName(name); mn = new MemberName(name);
mn->append(md); mn->append(md);
Doxygen::functionNameDict.insert(name,mn); //Doxygen::functionNameDict.insert(name,mn);
Doxygen::functionNameList.append(mn); //Doxygen::functionNameList.append(mn);
Doxygen::functionNameSDict.append(name,mn);
} }
addMemberToGroups(root,md); addMemberToGroups(root,md);
root->section = Entry::EMPTY_SEC; root->section = Entry::EMPTY_SEC;
...@@ -2225,13 +2231,13 @@ static void buildFunctionList(Entry *root) ...@@ -2225,13 +2231,13 @@ static void buildFunctionList(Entry *root)
static void findFriends() static void findFriends()
{ {
//printf("findFriends()\n"); //printf("findFriends()\n");
MemberNameListIterator fnli(Doxygen::functionNameList); MemberNameSDict::Iterator fnli(Doxygen::functionNameSDict);
MemberName *fn; MemberName *fn;
for (;(fn=fnli.current());++fnli) // for each global function name for (;(fn=fnli.current());++fnli) // for each global function name
{ {
//printf("Function name=`%s'\n",fn->memberName()); //printf("Function name=`%s'\n",fn->memberName());
MemberName *mn; MemberName *mn;
if ((mn=Doxygen::memberNameDict[fn->memberName()])) if ((mn=Doxygen::memberNameSDict[fn->memberName()]))
{ // there are members with the same name { // there are members with the same name
//printf("Function name is also a member name\n"); //printf("Function name is also a member name\n");
MemberNameIterator fni(*fn); MemberNameIterator fni(*fn);
...@@ -2288,7 +2294,7 @@ static void transferFunctionDocumentation() ...@@ -2288,7 +2294,7 @@ static void transferFunctionDocumentation()
//printf("transferFunctionDocumentation()\n"); //printf("transferFunctionDocumentation()\n");
// find matching function declaration and definitions. // find matching function declaration and definitions.
MemberNameListIterator mnli(Doxygen::functionNameList); MemberNameSDict::Iterator mnli(Doxygen::functionNameSDict);
MemberName *mn; MemberName *mn;
for (;(mn=mnli.current());++mnli) for (;(mn=mnli.current());++mnli)
{ {
...@@ -2367,7 +2373,7 @@ static void transferRelatedFunctionDocumentation() ...@@ -2367,7 +2373,7 @@ static void transferRelatedFunctionDocumentation()
{ {
// find match between function declaration and definition for // find match between function declaration and definition for
// related functions // related functions
MemberNameListIterator mnli(Doxygen::functionNameList); MemberNameSDict::Iterator mnli(Doxygen::functionNameSDict);
MemberName *mn; MemberName *mn;
for (mnli.toFirst();(mn=mnli.current());++mnli) for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
...@@ -2378,7 +2384,7 @@ static void transferRelatedFunctionDocumentation() ...@@ -2378,7 +2384,7 @@ static void transferRelatedFunctionDocumentation()
{ {
//printf(" Function `%s'\n",md->name().data()); //printf(" Function `%s'\n",md->name().data());
MemberName *rmn; MemberName *rmn;
if ((rmn=Doxygen::memberNameDict[md->name()])) // check if there is a member with the same name if ((rmn=Doxygen::memberNameSDict[md->name()])) // check if there is a member with the same name
{ {
//printf(" Member name found\n"); //printf(" Member name found\n");
MemberDef *rmd; MemberDef *rmd;
...@@ -3239,7 +3245,7 @@ static void computeMemberReferences() ...@@ -3239,7 +3245,7 @@ static void computeMemberReferences()
static void addClassMemberTodoTestBugReferences(Definition *compound) static void addClassMemberTodoTestBugReferences(Definition *compound)
{ {
MemberNameListIterator mnli(Doxygen::memberNameList); MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
MemberName *mn=0; MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli) for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
...@@ -3272,7 +3278,7 @@ static void addClassMemberTodoTestBugReferences(Definition *compound) ...@@ -3272,7 +3278,7 @@ static void addClassMemberTodoTestBugReferences(Definition *compound)
static void addFileMemberTodoTestBugReferences(Definition *compound) static void addFileMemberTodoTestBugReferences(Definition *compound)
{ {
MemberNameListIterator fnli(Doxygen::functionNameList); MemberNameSDict::Iterator fnli(Doxygen::functionNameSDict);
MemberName *mn=0; MemberName *mn=0;
for (fnli.toFirst();(mn=fnli.current());++fnli) for (fnli.toFirst();(mn=fnli.current());++fnli)
{ {
...@@ -3305,7 +3311,7 @@ static void addFileMemberTodoTestBugReferences(Definition *compound) ...@@ -3305,7 +3311,7 @@ static void addFileMemberTodoTestBugReferences(Definition *compound)
static void addTodoTestBugReferences() static void addTodoTestBugReferences()
{ {
MemberNameListIterator mnli(Doxygen::memberNameList); MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
MemberName *mn=0; MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli) for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
...@@ -3316,7 +3322,7 @@ static void addTodoTestBugReferences() ...@@ -3316,7 +3322,7 @@ static void addTodoTestBugReferences()
md->visited=FALSE; md->visited=FALSE;
} }
} }
MemberNameListIterator fnli(Doxygen::functionNameList); MemberNameSDict::Iterator fnli(Doxygen::functionNameSDict);
for (fnli.toFirst();(mn=fnli.current());++fnli) for (fnli.toFirst();(mn=fnli.current());++fnli)
{ {
MemberNameIterator mni(*mn); MemberNameIterator mni(*mn);
...@@ -3606,10 +3612,10 @@ static bool findGlobalMember(Entry *root, ...@@ -3606,10 +3612,10 @@ static bool findGlobalMember(Entry *root,
Debug::print(Debug::FindMembers,0, Debug::print(Debug::FindMembers,0,
"2. findGlobalMember(namespace=%s,name=%s,tempArg=%s,decl=%s)\n", "2. findGlobalMember(namespace=%s,name=%s,tempArg=%s,decl=%s)\n",
namespaceName.data(),name,tempArg,decl); namespaceName.data(),name,tempArg,decl);
MemberName *mn=Doxygen::functionNameDict[n+tempArg]; // look in function dictionary MemberName *mn=Doxygen::functionNameSDict[n+tempArg]; // look in function dictionary
if (mn==0) if (mn==0)
{ {
mn=Doxygen::functionNameDict[n]; // try without template arguments mn=Doxygen::functionNameSDict[n]; // try without template arguments
} }
if (mn) // function name defined if (mn) // function name defined
{ {
...@@ -3897,7 +3903,16 @@ static void findMember(Entry *root, ...@@ -3897,7 +3903,16 @@ static void findMember(Entry *root,
(root->parent->section&Entry::SCOPE_MASK) && (root->parent->section&Entry::SCOPE_MASK) &&
!root->parent->name.isEmpty()) !root->parent->name.isEmpty())
{ {
scopeName = mergeScopes(root->parent->name,scopeName); QCString joinedName = root->parent->name+"::"+scopeName;
if (!scopeName.isEmpty() &&
(getClass(joinedName) || Doxygen::namespaceSDict[joinedName]))
{
scopeName = joinedName;
}
else
{
scopeName = mergeScopes(root->parent->name,scopeName);
}
} }
scopeName=stripTemplateSpecifiersFromScope( scopeName=stripTemplateSpecifiersFromScope(
removeRedundantWhiteSpace(scopeName),FALSE); removeRedundantWhiteSpace(scopeName),FALSE);
...@@ -4024,11 +4039,11 @@ static void findMember(Entry *root, ...@@ -4024,11 +4039,11 @@ static void findMember(Entry *root,
"1. funcName=`%s'\n",funcName.data()); "1. funcName=`%s'\n",funcName.data());
if (!funcTempList.isEmpty()) // try with member specialization if (!funcTempList.isEmpty()) // try with member specialization
{ {
mn=Doxygen::memberNameDict[funcName+funcTempList]; mn=Doxygen::memberNameSDict[funcName+funcTempList];
} }
if (mn==0) // try without specialization if (mn==0) // try without specialization
{ {
mn=Doxygen::memberNameDict[funcName]; mn=Doxygen::memberNameSDict[funcName];
} }
if (!isRelated && mn) // function name already found if (!isRelated && mn) // function name already found
{ {
...@@ -4275,12 +4290,12 @@ static void findMember(Entry *root, ...@@ -4275,12 +4290,12 @@ static void findMember(Entry *root,
{ {
if (className.isEmpty()) className=related.copy(); if (className.isEmpty()) className=related.copy();
ClassDef *cd; ClassDef *cd;
//printf("scopeName=`%s'\n",scopeName.data()); //printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
if ((cd=getClass(scopeName))) if ((cd=getClass(scopeName)))
{ {
bool newMember=TRUE; // assume we have a new member bool newMember=TRUE; // assume we have a new member
bool newMemberName=FALSE; bool newMemberName=FALSE;
if ((mn=Doxygen::memberNameDict[funcName])==0) if ((mn=Doxygen::memberNameSDict[funcName])==0)
{ {
mn=new MemberName(funcName); mn=new MemberName(funcName);
newMemberName=TRUE; // we create a new member name newMemberName=TRUE; // we create a new member name
...@@ -4335,7 +4350,7 @@ static void findMember(Entry *root, ...@@ -4335,7 +4350,7 @@ static void findMember(Entry *root,
bool found=FALSE; bool found=FALSE;
if (root->bodyLine==-1) if (root->bodyLine==-1)
{ {
MemberName *rmn=Doxygen::functionNameDict[funcName]; MemberName *rmn=Doxygen::functionNameSDict[funcName];
if (rmn) if (rmn)
{ {
MemberDef *rmd=rmn->first(); MemberDef *rmd=rmn->first();
...@@ -4389,8 +4404,9 @@ static void findMember(Entry *root, ...@@ -4389,8 +4404,9 @@ static void findMember(Entry *root,
//printf("Adding member=%s\n",md->name().data()); //printf("Adding member=%s\n",md->name().data());
if (newMemberName) if (newMemberName)
{ {
Doxygen::memberNameList.append(mn); //Doxygen::memberNameList.append(mn);
Doxygen::memberNameDict.insert(funcName,mn); //Doxygen::memberNameDict.insert(funcName,mn);
Doxygen::memberNameSDict.append(funcName,mn);
} }
} }
} }
...@@ -4547,8 +4563,9 @@ static void findEnums(Entry *root) ...@@ -4547,8 +4563,9 @@ static void findEnums(Entry *root)
ClassDef *cd=0; ClassDef *cd=0;
FileDef *fd=0; FileDef *fd=0;
NamespaceDef *nd=0; NamespaceDef *nd=0;
MemberNameDict *mnd=0; //MemberNameDict *mnd=0;
MemberNameList *mnl=0; //MemberNameList *mnl=0;
MemberNameSDict *mnsd=0;
bool isGlobal; bool isGlobal;
//printf("Found enum with name `%s'\n",root->name.data()); //printf("Found enum with name `%s'\n",root->name.data());
int i; int i;
...@@ -4575,22 +4592,25 @@ static void findEnums(Entry *root) ...@@ -4575,22 +4592,25 @@ static void findEnums(Entry *root)
{ {
//printf("Enum `%s'::`%s'\n",cd->name(),name.data()); //printf("Enum `%s'::`%s'\n",cd->name(),name.data());
fd=0; fd=0;
mnd=&Doxygen::memberNameDict; //mnd=&Doxygen::memberNameDict;
mnl=&Doxygen::memberNameList; //mnl=&Doxygen::memberNameList;
mnsd=&Doxygen::memberNameSDict;
isGlobal=FALSE; isGlobal=FALSE;
} }
else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace
{ {
mnd=&Doxygen::functionNameDict; //mnd=&Doxygen::functionNameDict;
mnl=&Doxygen::functionNameList; //mnl=&Doxygen::functionNameList;
mnsd=&Doxygen::functionNameSDict;
isGlobal=TRUE; isGlobal=TRUE;
} }
else // found a global enum else // found a global enum
{ {
bool ambig; bool ambig;
fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig); fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
mnd=&Doxygen::functionNameDict; //mnd=&Doxygen::functionNameDict;
mnl=&Doxygen::functionNameList; //mnl=&Doxygen::functionNameList;
mnsd=&Doxygen::functionNameSDict;
isGlobal=TRUE; isGlobal=TRUE;
} }
if (!name.isEmpty()) if (!name.isEmpty())
...@@ -4666,7 +4686,7 @@ static void findEnums(Entry *root) ...@@ -4666,7 +4686,7 @@ static void findEnums(Entry *root)
//printf("Adding member=%s\n",md->name().data()); //printf("Adding member=%s\n",md->name().data());
MemberName *mn; MemberName *mn;
if ((mn=(*mnd)[name])) if ((mn=(*mnsd)[name]))
{ {
// this is used if the same enum is in multiple namespaces/classes // this is used if the same enum is in multiple namespaces/classes
mn->append(md); mn->append(md);
...@@ -4675,8 +4695,9 @@ static void findEnums(Entry *root) ...@@ -4675,8 +4695,9 @@ static void findEnums(Entry *root)
{ {
mn = new MemberName(name); mn = new MemberName(name);
mn->append(md); mn->append(md);
mnd->insert(name,mn); //mnd->insert(name,mn);
mnl->append(mn); //mnl->append(mn);
mnsd->append(name,mn);
//printf("add %s to new memberName. Now %d members\n", //printf("add %s to new memberName. Now %d members\n",
// name.data(),mn->count()); // name.data(),mn->count());
} }
...@@ -4687,7 +4708,7 @@ static void findEnums(Entry *root) ...@@ -4687,7 +4708,7 @@ static void findEnums(Entry *root)
for (;(e=eli.current());++eli) for (;(e=eli.current());++eli)
{ {
MemberName *fmn=0; MemberName *fmn=0;
if (!e->name.isEmpty() && (fmn=(*mnd)[e->name])) if (!e->name.isEmpty() && (fmn=(*mnsd)[e->name]))
// get list of members with the same name as the field // get list of members with the same name as the field
{ {
MemberNameIterator fmni(*fmn); MemberNameIterator fmni(*fmn);
...@@ -4780,7 +4801,7 @@ static void findEnumDocumentation(Entry *root) ...@@ -4780,7 +4801,7 @@ static void findEnumDocumentation(Entry *root)
{ {
//printf("Enum: scope=`%s' name=`%s'\n",cd->name(),name.data()); //printf("Enum: scope=`%s' name=`%s'\n",cd->name(),name.data());
QCString className=cd->name().copy(); QCString className=cd->name().copy();
MemberName *mn=Doxygen::memberNameDict[name]; MemberName *mn=Doxygen::memberNameSDict[name];
if (mn) if (mn)
{ {
MemberNameIterator mni(*mn); MemberNameIterator mni(*mn);
...@@ -4821,7 +4842,7 @@ static void findEnumDocumentation(Entry *root) ...@@ -4821,7 +4842,7 @@ static void findEnumDocumentation(Entry *root)
else // enum outside class else // enum outside class
{ {
MemberDef *md; MemberDef *md;
MemberName *mn=Doxygen::functionNameDict[name]; MemberName *mn=Doxygen::functionNameSDict[name];
if (mn && (md=mn->getFirst())) if (mn && (md=mn->getFirst()))
{ {
md->setDocumentation(root->doc); md->setDocumentation(root->doc);
...@@ -4850,10 +4871,10 @@ static void findEnumDocumentation(Entry *root) ...@@ -4850,10 +4871,10 @@ static void findEnumDocumentation(Entry *root)
// seach for each enum (member or function) in mnl if it has documented // seach for each enum (member or function) in mnl if it has documented
// enum values. // enum values.
static void findDEV(const MemberNameList &mnl) static void findDEV(const MemberNameSDict &mnsd)
{ {
MemberName *mn; MemberName *mn;
MemberNameListIterator mnli(mnl); MemberNameSDict::Iterator mnli(mnsd);
// for each member name // for each member name
for (mnli.toFirst();(mn=mnli.current());++mnli) for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
...@@ -4887,8 +4908,8 @@ static void findDEV(const MemberNameList &mnl) ...@@ -4887,8 +4908,8 @@ static void findDEV(const MemberNameList &mnl)
// values. // values.
static void findDocumentedEnumValues() static void findDocumentedEnumValues()
{ {
findDEV(Doxygen::memberNameList); findDEV(Doxygen::memberNameSDict);
findDEV(Doxygen::functionNameList); findDEV(Doxygen::functionNameSDict);
} }
...@@ -4899,7 +4920,7 @@ static void findDocumentedEnumValues() ...@@ -4899,7 +4920,7 @@ static void findDocumentedEnumValues()
static void computeMemberRelations() static void computeMemberRelations()
{ {
MemberNameListIterator mnli(Doxygen::memberNameList); MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
MemberName *mn; MemberName *mn;
for ( ; (mn=mnli.current()) ; ++mnli ) // for each member name for ( ; (mn=mnli.current()) ; ++mnli ) // for each member name
{ {
...@@ -5089,7 +5110,7 @@ static void addSourceReferences() ...@@ -5089,7 +5110,7 @@ static void addSourceReferences()
} }
// add source references for member names // add source references for member names
MemberNameListIterator mnli(Doxygen::memberNameList); MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
MemberName *mn=0; MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli) for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
...@@ -5109,7 +5130,7 @@ static void addSourceReferences() ...@@ -5109,7 +5130,7 @@ static void addSourceReferences()
} }
} }
} }
MemberNameListIterator fnli(Doxygen::functionNameList); MemberNameSDict::Iterator fnli(Doxygen::functionNameSDict);
for (fnli.toFirst();(mn=fnli.current());++fnli) for (fnli.toFirst();(mn=fnli.current());++fnli)
{ {
MemberNameIterator mni(*mn); MemberNameIterator mni(*mn);
...@@ -5187,6 +5208,7 @@ static void generateClassDocs() ...@@ -5187,6 +5208,7 @@ static void generateClassDocs()
cd->writeDocumentation(*outputList); cd->writeDocumentation(*outputList);
cd->writeMemberList(*outputList); cd->writeMemberList(*outputList);
} }
cd->writeDocumentationForInnerClasses(*outputList);
} }
} }
...@@ -5194,7 +5216,7 @@ static void generateClassDocs() ...@@ -5194,7 +5216,7 @@ static void generateClassDocs()
static void inheritDocumentation() static void inheritDocumentation()
{ {
MemberNameListIterator mnli(Doxygen::memberNameList); MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
MemberName *mn; MemberName *mn;
//int count=0; //int count=0;
for (;(mn=mnli.current());++mnli) for (;(mn=mnli.current());++mnli)
...@@ -5326,7 +5348,7 @@ static void findDefineDocumentation(Entry *root) ...@@ -5326,7 +5348,7 @@ static void findDefineDocumentation(Entry *root)
md->setFileDef(fd); md->setFileDef(fd);
//printf("Adding member=%s\n",md->name().data()); //printf("Adding member=%s\n",md->name().data());
MemberName *mn; MemberName *mn;
if ((mn=Doxygen::functionNameDict[root->name])) if ((mn=Doxygen::functionNameSDict[root->name]))
{ {
mn->append(md); mn->append(md);
} }
...@@ -5334,11 +5356,12 @@ static void findDefineDocumentation(Entry *root) ...@@ -5334,11 +5356,12 @@ static void findDefineDocumentation(Entry *root)
{ {
mn = new MemberName(root->name); mn = new MemberName(root->name);
mn->append(md); mn->append(md);
Doxygen::functionNameDict.insert(root->name,mn); //Doxygen::functionNameDict.insert(root->name,mn);
Doxygen::functionNameList.append(mn); //Doxygen::functionNameList.append(mn);
Doxygen::functionNameSDict.append(root->name,mn);
} }
} }
MemberName *mn=Doxygen::functionNameDict[root->name]; MemberName *mn=Doxygen::functionNameSDict[root->name];
if (mn) if (mn)
{ {
int count=0; int count=0;
...@@ -5790,6 +5813,7 @@ static void generateNamespaceDocs() ...@@ -5790,6 +5813,7 @@ static void generateNamespaceDocs()
cd->writeDocumentation(*outputList); cd->writeDocumentation(*outputList);
cd->writeMemberList(*outputList); cd->writeMemberList(*outputList);
} }
cd->writeDocumentationForInnerClasses(*outputList);
} }
} }
} }
...@@ -7129,8 +7153,8 @@ void parseInput() ...@@ -7129,8 +7153,8 @@ void parseInput()
findMainPage(root); findMainPage(root);
msg("Sorting lists...\n"); msg("Sorting lists...\n");
Doxygen::memberNameList.sort(); Doxygen::memberNameSDict.sort();
Doxygen::functionNameList.sort(); Doxygen::functionNameSDict.sort();
Doxygen::hiddenClasses.sort(); Doxygen::hiddenClasses.sort();
Doxygen::classSDict.sort(); Doxygen::classSDict.sort();
...@@ -7337,13 +7361,14 @@ void generateOutput() ...@@ -7337,13 +7361,14 @@ void generateOutput()
Doxygen::formulaList.generateBitmaps(Config_getString("HTML_OUTPUT")); Doxygen::formulaList.generateBitmaps(Config_getString("HTML_OUTPUT"));
} }
if (Config_getBool("SEARCHENGINE") || Config_getList("TAGFILES").count()>0) // This is confusing people, so I removed it
{ //if (Config_getBool("SEARCHENGINE") || Config_getList("TAGFILES").count()>0)
msg("\nNow copy the file\n\n %s\n\nto the directory where the CGI binaries are " //{
"located and don't forget to run\n\n",(Config_getString("HTML_OUTPUT")+"/"+Config_getString("CGI_NAME")).data()); // msg("\nNow copy the file\n\n %s\n\nto the directory where the CGI binaries are "
msg(" %s/installdox\n\nto replace any dummy links.\n\n", // "located and don't forget to run\n\n",(Config_getString("HTML_OUTPUT")+"/"+Config_getString("CGI_NAME")).data());
Config_getString("HTML_OUTPUT").data()); // msg(" %s/installdox\n\nto replace any dummy links.\n\n",
} // Config_getString("HTML_OUTPUT").data());
//}
if (Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP")) if (Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"))
{ {
......
...@@ -70,10 +70,12 @@ class Doxygen ...@@ -70,10 +70,12 @@ class Doxygen
static FileNameDict *imageNameDict; static FileNameDict *imageNameDict;
static FileNameDict *dotFileNameDict; static FileNameDict *dotFileNameDict;
static QStrList tagfileList; static QStrList tagfileList;
static MemberNameList memberNameList; //static MemberNameList memberNameList;
static MemberNameList functionNameList; //static MemberNameList functionNameList;
static MemberNameDict memberNameDict; //static MemberNameDict memberNameDict;
static MemberNameDict functionNameDict; //static MemberNameDict functionNameDict;
static MemberNameSDict memberNameSDict;
static MemberNameSDict functionNameSDict;
static FileList fileList; static FileList fileList;
static FileDict fileDict; static FileDict fileDict;
static ClassDef unrelatedClass; static ClassDef unrelatedClass;
......
...@@ -43,7 +43,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) : ...@@ -43,7 +43,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t) :
pageDict = new PageSDict(257); pageDict = new PageSDict(257);
exampleDict = new PageSDict(257); exampleDict = new PageSDict(257);
allMemberList = new MemberList; allMemberList = new MemberList;
allMemberNameInfoDict = new MemberNameInfoDict(1009); allMemberNameInfoSDict = new MemberNameInfoSDict(17);
fileName = (QCString)"group_"+na; fileName = (QCString)"group_"+na;
setGroupTitle( t ); setGroupTitle( t );
memberGroupList = new MemberGroupList; memberGroupList = new MemberGroupList;
...@@ -79,7 +79,7 @@ GroupDef::~GroupDef() ...@@ -79,7 +79,7 @@ GroupDef::~GroupDef()
delete pageDict; delete pageDict;
delete exampleDict; delete exampleDict;
delete allMemberList; delete allMemberList;
delete allMemberNameInfoDict; delete allMemberNameInfoSDict;
delete memberGroupList; delete memberGroupList;
delete memberGroupDict; delete memberGroupDict;
} }
...@@ -170,7 +170,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -170,7 +170,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
{ {
//fprintf(stderr, "GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data()); //fprintf(stderr, "GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
MemberNameInfo *mni=0; MemberNameInfo *mni=0;
if ((mni=(*allMemberNameInfoDict)[md->name()])) if ((mni=(*allMemberNameInfoSDict)[md->name()]))
{ // member with this name already found { // member with this name already found
MemberNameInfoIterator srcMnii(*mni); MemberNameInfoIterator srcMnii(*mni);
MemberInfo *srcMi; MemberInfo *srcMi;
...@@ -189,7 +189,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -189,7 +189,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
{ {
mni = new MemberNameInfo(md->name()); mni = new MemberNameInfo(md->name());
mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE)); mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
allMemberNameInfoDict->insert(mni->memberName(),mni); allMemberNameInfoSDict->append(mni->memberName(),mni);
} }
allMemberList->append(md); allMemberList->append(md);
switch(md->memberType()) switch(md->memberType())
...@@ -251,7 +251,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -251,7 +251,7 @@ void GroupDef::insertMember(MemberDef *md,bool docOnly)
void GroupDef::removeMember(MemberDef *md) void GroupDef::removeMember(MemberDef *md)
{ {
// fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data()); // fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data());
MemberNameInfo *mni = allMemberNameInfoDict->find(md->name()); MemberNameInfo *mni = allMemberNameInfoSDict->find(md->name());
if (mni) if (mni)
{ {
MemberNameInfoIterator mnii(*mni); MemberNameInfoIterator mnii(*mni);
...@@ -266,7 +266,7 @@ void GroupDef::removeMember(MemberDef *md) ...@@ -266,7 +266,7 @@ void GroupDef::removeMember(MemberDef *md)
} }
if( mni->isEmpty() ) if( mni->isEmpty() )
{ {
allMemberNameInfoDict->remove(md->name()); allMemberNameInfoSDict->remove(md->name());
delete mni; delete mni;
} }
......
...@@ -36,7 +36,7 @@ class OutputList; ...@@ -36,7 +36,7 @@ class OutputList;
class NamespaceList; class NamespaceList;
class MemberGroupList; class MemberGroupList;
class MemberGroupDict; class MemberGroupDict;
class MemberNameInfoDict; class MemberNameInfoSDict;
class PageSDict; class PageSDict;
class PageInfo; class PageInfo;
...@@ -64,11 +64,11 @@ class GroupDef : public Definition ...@@ -64,11 +64,11 @@ class GroupDef : public Definition
int countMembers() const; int countMembers() const;
bool isLinkableInProject() const bool isLinkableInProject() const
{ {
return hasDocumentation() && !isReference(); return !isReference();
} }
bool isLinkable() const bool isLinkable() const
{ {
return isLinkableInProject() || isReference(); return TRUE;
} }
bool isASubGroup() const; bool isASubGroup() const;
void computeAnchors(); void computeAnchors();
...@@ -97,7 +97,7 @@ class GroupDef : public Definition ...@@ -97,7 +97,7 @@ class GroupDef : public Definition
PageSDict *exampleDict; // list of examples in the group PageSDict *exampleDict; // list of examples in the group
MemberList *allMemberList; MemberList *allMemberList;
MemberNameInfoDict *allMemberNameInfoDict; MemberNameInfoSDict *allMemberNameInfoSDict;
// members in the declaration part of the documentation // members in the declaration part of the documentation
MemberList decDefineMembers; MemberList decDefineMembers;
......
...@@ -943,7 +943,7 @@ void HtmlGenerator::endMemberDocName() ...@@ -943,7 +943,7 @@ void HtmlGenerator::endMemberDocName()
void HtmlGenerator::startParameterList() void HtmlGenerator::startParameterList()
{ {
DBG_HTML(t << "<!-- startParameterList -->" << endl;) DBG_HTML(t << "<!-- startParameterList -->" << endl;)
t << " <td class=\"md\">(&nbsp;</td>" << endl; t << " <td class=\"md\" valign=\"top\">(&nbsp;</td>" << endl;
} }
void HtmlGenerator::startParameterType(bool first) void HtmlGenerator::startParameterType(bool first)
...@@ -951,7 +951,7 @@ void HtmlGenerator::startParameterType(bool first) ...@@ -951,7 +951,7 @@ void HtmlGenerator::startParameterType(bool first)
if (first) if (first)
{ {
DBG_HTML(t << "<!-- startFirstParameterType -->" << endl;) DBG_HTML(t << "<!-- startFirstParameterType -->" << endl;)
t << " <td class=\"md\" nowrap>"; t << " <td class=\"md\" nowrap valign=\"top\">";
} }
else else
{ {
...@@ -973,8 +973,11 @@ void HtmlGenerator::startParameterName(bool oneArgOnly) ...@@ -973,8 +973,11 @@ void HtmlGenerator::startParameterName(bool oneArgOnly)
{ {
DBG_HTML(t << "<!-- startParameterName -->" << endl;) DBG_HTML(t << "<!-- startParameterName -->" << endl;)
t << " <td class=\"mdname"; t << " <td class=\"mdname";
if (oneArgOnly) t << "1"; if (oneArgOnly)
t << "\">&nbsp;"; {
t << "1\" valign=\"top";
}
t << "\" nowrap>&nbsp;";
} }
void HtmlGenerator::endParameterName(bool last,bool emptyList) void HtmlGenerator::endParameterName(bool last,bool emptyList)
...@@ -985,8 +988,8 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList) ...@@ -985,8 +988,8 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList)
if (emptyList) if (emptyList)
{ {
t << " </td>" << endl; t << " </td>" << endl;
t << " <td class=\"md\">)&nbsp;</td>" << endl; t << " <td class=\"md\" valign=\"top\">)&nbsp;</td>" << endl;
t << " <td class=\"md\">"; t << " <td class=\"md\" nowrap>";
} }
else else
{ {
......
...@@ -323,7 +323,7 @@ void endFile(OutputList &ol,bool external) ...@@ -323,7 +323,7 @@ void endFile(OutputList &ol,bool external)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper) void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level)
{ {
HtmlHelp *htmlHelp=0; HtmlHelp *htmlHelp=0;
FTVHelp *ftvHelp=0; FTVHelp *ftvHelp=0;
...@@ -347,7 +347,16 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper) ...@@ -347,7 +347,16 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
{ {
if (!started) if (!started)
{ {
ol.startItemList(); {
// UGLY HACK!
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex);
if (level<6) ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.startItemList();
ol.popGeneratorState();
}
if (hasHtmlHelp) htmlHelp->incContentsDepth(); if (hasHtmlHelp) htmlHelp->incContentsDepth();
if (hasFtvHelp) ftvHelp->incContentsDepth(); if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE; started=TRUE;
...@@ -390,13 +399,22 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper) ...@@ -390,13 +399,22 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
//printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited); //printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
bool wasVisited=cd->visited; bool wasVisited=cd->visited;
cd->visited=TRUE; cd->visited=TRUE;
writeClassTree(ol,cd->subClasses(),wasVisited); writeClassTree(ol,cd->subClasses(),wasVisited,level+1);
} }
} }
} }
if (started) if (started)
{ {
ol.endItemList(); {
// UGLY HACK!
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex);
if (level<6) ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.endItemList();
ol.popGeneratorState();
}
if (hasHtmlHelp) htmlHelp->decContentsDepth(); if (hasHtmlHelp) htmlHelp->decContentsDepth();
if (hasFtvHelp) ftvHelp->decContentsDepth(); if (hasFtvHelp) ftvHelp->decContentsDepth();
} }
...@@ -406,7 +424,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper) ...@@ -406,7 +424,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
/*! Generates HTML Help tree of classes */ /*! Generates HTML Help tree of classes */
void writeClassTree(BaseClassList *cl) void writeClassTree(BaseClassList *cl,int level)
{ {
HtmlHelp *htmlHelp=0; HtmlHelp *htmlHelp=0;
FTVHelp *ftvHelp=0; FTVHelp *ftvHelp=0;
...@@ -448,7 +466,7 @@ void writeClassTree(BaseClassList *cl) ...@@ -448,7 +466,7 @@ void writeClassTree(BaseClassList *cl)
} }
if (hasChildren) if (hasChildren)
{ {
writeClassTree(cd->subClasses()); writeClassTree(cd->subClasses(),level+1);
} }
cd->visited=TRUE; cd->visited=TRUE;
} }
...@@ -463,7 +481,7 @@ void writeClassTree(BaseClassList *cl) ...@@ -463,7 +481,7 @@ void writeClassTree(BaseClassList *cl)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
/*! Generates HTML Help tree of classes */ /*! Generates HTML Help tree of classes */
void writeClassTreeNode(ClassDef *cd,bool hasHtmlHelp,bool hasFtvHelp,bool &started) void writeClassTreeNode(ClassDef *cd,bool hasHtmlHelp,bool hasFtvHelp,bool &started,int level)
{ {
if (cd->isVisibleInHierarchy() && !cd->visited) if (cd->isVisibleInHierarchy() && !cd->visited)
{ {
...@@ -485,13 +503,13 @@ void writeClassTreeNode(ClassDef *cd,bool hasHtmlHelp,bool hasFtvHelp,bool &star ...@@ -485,13 +503,13 @@ void writeClassTreeNode(ClassDef *cd,bool hasHtmlHelp,bool hasFtvHelp,bool &star
} }
if (hasChildren) if (hasChildren)
{ {
writeClassTree(cd->subClasses()); writeClassTree(cd->subClasses(),level+1);
} }
cd->visited=TRUE; cd->visited=TRUE;
} }
} }
void writeClassTree(ClassList *cl) void writeClassTree(ClassList *cl,int level)
{ {
bool &generateHtml = Config_getBool("GENERATE_HTML") ; bool &generateHtml = Config_getBool("GENERATE_HTML") ;
bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP"); bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
...@@ -500,11 +518,11 @@ void writeClassTree(ClassList *cl) ...@@ -500,11 +518,11 @@ void writeClassTree(ClassList *cl)
bool started=FALSE; bool started=FALSE;
for ( ; cli.current() ; ++cli) for ( ; cli.current() ; ++cli)
{ {
writeClassTreeNode(cli.current(),hasHtmlHelp,hasFtvHelp,started); writeClassTreeNode(cli.current(),hasHtmlHelp,hasFtvHelp,started,level);
} }
} }
void writeClassTree(ClassSDict *d) void writeClassTree(ClassSDict *d,int level)
{ {
bool &generateHtml = Config_getBool("GENERATE_HTML") ; bool &generateHtml = Config_getBool("GENERATE_HTML") ;
bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP"); bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
...@@ -513,7 +531,7 @@ void writeClassTree(ClassSDict *d) ...@@ -513,7 +531,7 @@ void writeClassTree(ClassSDict *d)
bool started=FALSE; bool started=FALSE;
for ( ; cli.current() ; ++cli) for ( ; cli.current() ; ++cli)
{ {
writeClassTreeNode(cli.current(),hasHtmlHelp,hasFtvHelp,started); writeClassTreeNode(cli.current(),hasHtmlHelp,hasFtvHelp,started,level);
} }
} }
...@@ -550,7 +568,16 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started) ...@@ -550,7 +568,16 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started)
{ {
if (!started) if (!started)
{ {
ol.startItemList(); {
// UGLY HACK!
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex);
ol.startIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.startItemList();
ol.popGeneratorState();
}
if (hasHtmlHelp) htmlHelp->incContentsDepth(); if (hasHtmlHelp) htmlHelp->incContentsDepth();
if (hasFtvHelp) ftvHelp->incContentsDepth(); if (hasFtvHelp) ftvHelp->incContentsDepth();
started=TRUE; started=TRUE;
...@@ -589,7 +616,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started) ...@@ -589,7 +616,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started)
} }
if (hasChildren) if (hasChildren)
{ {
writeClassTree(ol,cd->subClasses(),cd->visited); writeClassTree(ol,cd->subClasses(),cd->visited,1);
cd->visited=TRUE; cd->visited=TRUE;
} }
} }
...@@ -621,7 +648,16 @@ void writeClassHierarchy(OutputList &ol) ...@@ -621,7 +648,16 @@ void writeClassHierarchy(OutputList &ol)
writeClassTreeForList(ol,&Doxygen::hiddenClasses,started); writeClassTreeForList(ol,&Doxygen::hiddenClasses,started);
if (started) if (started)
{ {
ol.endItemList(); {
// UGLY HACK!
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Latex);
ol.endIndexList();
ol.enableAll();
ol.disable(OutputGenerator::Latex);
ol.endItemList();
ol.popGeneratorState();
}
if (hasHtmlHelp) htmlHelp->decContentsDepth(); if (hasHtmlHelp) htmlHelp->decContentsDepth();
if (hasFtvHelp) ftvHelp->decContentsDepth(); if (hasFtvHelp) ftvHelp->decContentsDepth();
} }
...@@ -1476,8 +1512,10 @@ void writeMemberList(OutputList &ol,bool useSections) ...@@ -1476,8 +1512,10 @@ void writeMemberList(OutputList &ol,bool useSections)
{ {
bool first = TRUE; bool first = TRUE;
char lastChar = 0; char lastChar = 0;
MemberName *mn=Doxygen::memberNameList.first();
while (mn) MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
MemberDef *md=mn->first(); MemberDef *md=mn->first();
bool found=FALSE; bool found=FALSE;
...@@ -1549,7 +1587,6 @@ void writeMemberList(OutputList &ol,bool useSections) ...@@ -1549,7 +1587,6 @@ void writeMemberList(OutputList &ol,bool useSections)
md=mn->prev(); md=mn->prev();
} }
} }
mn=Doxygen::memberNameList.next();
} }
ol.endItemList(); ol.endItemList();
} }
...@@ -1560,8 +1597,9 @@ int countClassMembers() ...@@ -1560,8 +1597,9 @@ int countClassMembers()
{ {
int i=0;for (i=0;i<256;i++) g_memberIndexLetterUsed[i]=FALSE; int i=0;for (i=0;i<256;i++) g_memberIndexLetterUsed[i]=FALSE;
int count=0; int count=0;
MemberName *mn=Doxygen::memberNameList.first(); MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
while (mn) MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
MemberDef *md=mn->first(); MemberDef *md=mn->first();
bool found=FALSE; bool found=FALSE;
...@@ -1584,7 +1622,6 @@ int countClassMembers() ...@@ -1584,7 +1622,6 @@ int countClassMembers()
if (!n.isEmpty()) g_memberIndexLetterUsed[tolower(n.at(0))]=TRUE; if (!n.isEmpty()) g_memberIndexLetterUsed[tolower(n.at(0))]=TRUE;
count++; count++;
} }
mn=Doxygen::memberNameList.next();
} }
return count; return count;
} }
...@@ -1661,8 +1698,9 @@ void writeFileMemberList(OutputList &ol,bool useSections) ...@@ -1661,8 +1698,9 @@ void writeFileMemberList(OutputList &ol,bool useSections)
{ {
char lastChar=0; char lastChar=0;
bool first=TRUE; bool first=TRUE;
MemberName *mn=Doxygen::functionNameList.first(); MemberNameSDict::Iterator mnli(Doxygen::functionNameSDict);
while (mn) MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
MemberDef *md=mn->first(); MemberDef *md=mn->first();
bool found=FALSE; bool found=FALSE;
...@@ -1732,7 +1770,6 @@ void writeFileMemberList(OutputList &ol,bool useSections) ...@@ -1732,7 +1770,6 @@ void writeFileMemberList(OutputList &ol,bool useSections)
md=mn->prev(); md=mn->prev();
} }
} }
mn=Doxygen::functionNameList.next();
} }
ol.endItemList(); ol.endItemList();
} }
...@@ -1743,8 +1780,9 @@ void writeNamespaceMemberList(OutputList &ol,bool useSections) ...@@ -1743,8 +1780,9 @@ void writeNamespaceMemberList(OutputList &ol,bool useSections)
{ {
char lastChar=0; char lastChar=0;
bool first=TRUE; bool first=TRUE;
MemberName *mn=Doxygen::functionNameList.first(); MemberNameSDict::Iterator mnli(Doxygen::functionNameSDict);
while (mn) MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
MemberDef *md=mn->first(); MemberDef *md=mn->first();
bool found=FALSE; bool found=FALSE;
...@@ -1807,7 +1845,6 @@ void writeNamespaceMemberList(OutputList &ol,bool useSections) ...@@ -1807,7 +1845,6 @@ void writeNamespaceMemberList(OutputList &ol,bool useSections)
md=mn->prev(); md=mn->prev();
} }
} }
mn=Doxygen::functionNameList.next();
} }
if (!first) ol.endItemList(); if (!first) ol.endItemList();
} }
...@@ -1818,8 +1855,9 @@ int countNamespaceMembers() ...@@ -1818,8 +1855,9 @@ int countNamespaceMembers()
{ {
int i=0;for (i=0;i<256;i++) g_namespaceIndexLetterUsed[i]=FALSE; int i=0;for (i=0;i<256;i++) g_namespaceIndexLetterUsed[i]=FALSE;
int count=0; int count=0;
MemberName *mn=Doxygen::functionNameList.first(); MemberNameSDict::Iterator mnli(Doxygen::functionNameSDict);
while (mn) MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
MemberDef *md=mn->first(); MemberDef *md=mn->first();
bool found=FALSE; bool found=FALSE;
...@@ -1836,7 +1874,6 @@ int countNamespaceMembers() ...@@ -1836,7 +1874,6 @@ int countNamespaceMembers()
md=mn->next(); md=mn->next();
} }
if (found) count++; if (found) count++;
mn=Doxygen::functionNameList.next();
} }
return count; return count;
} }
...@@ -1847,8 +1884,9 @@ int countFileMembers() ...@@ -1847,8 +1884,9 @@ int countFileMembers()
{ {
int i=0;for (i=0;i<256;i++) g_fileIndexLetterUsed[i]=FALSE; int i=0;for (i=0;i<256;i++) g_fileIndexLetterUsed[i]=FALSE;
int count=0; int count=0;
MemberName *mn=Doxygen::functionNameList.first(); MemberNameSDict::Iterator mnli(Doxygen::functionNameSDict);
while (mn) MemberName *mn=0;
for (mnli.toFirst();(mn=mnli.current());++mnli)
{ {
MemberDef *md=mn->first(); MemberDef *md=mn->first();
FileDef *fd; FileDef *fd;
...@@ -1868,7 +1906,6 @@ int countFileMembers() ...@@ -1868,7 +1906,6 @@ int countFileMembers()
md=mn->next(); md=mn->next();
} }
if (found) count++; if (found) count++;
mn=Doxygen::functionNameList.next();
} }
return count; return count;
} }
...@@ -2398,7 +2435,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel) ...@@ -2398,7 +2435,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
ftvHelp->incContentsDepth(); ftvHelp->incContentsDepth();
} }
writeClassTree(gd->classSDict); writeClassTree(gd->classSDict,1);
if(htmlHelp) htmlHelp->decContentsDepth(); if(htmlHelp) htmlHelp->decContentsDepth();
if(ftvHelp) ftvHelp->decContentsDepth(); if(ftvHelp) ftvHelp->decContentsDepth();
} }
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "language.h" #include "language.h"
#include "scanner.h" #include "scanner.h"
#include "groupdef.h" #include "groupdef.h"
#include "doxygen.h"
//static QCString idToName(int id) //static QCString idToName(int id)
//{ //{
......
...@@ -71,6 +71,8 @@ MemberNameIterator::MemberNameIterator(const MemberName &mnlist) : ...@@ -71,6 +71,8 @@ MemberNameIterator::MemberNameIterator(const MemberName &mnlist) :
{ {
} }
#if 0
MemberNameList::MemberNameList() : QList<MemberName>() MemberNameList::MemberNameList() : QList<MemberName>()
{ {
} }
...@@ -91,3 +93,12 @@ MemberNameListIterator::MemberNameListIterator(const MemberNameList &mnlist) : ...@@ -91,3 +93,12 @@ MemberNameListIterator::MemberNameListIterator(const MemberNameList &mnlist) :
{ {
} }
#endif
int MemberNameSDict::compareItems(GCI item1, GCI item2)
{
MemberName *n1=(MemberName *)item1;
MemberName *n2=(MemberName *)item2;
return stricmp(n1->memberName(),n2->memberName());
}
...@@ -40,6 +40,7 @@ class MemberNameIterator : public QListIterator<MemberDef> ...@@ -40,6 +40,7 @@ class MemberNameIterator : public QListIterator<MemberDef>
MemberNameIterator( const MemberName &list); MemberNameIterator( const MemberName &list);
}; };
#if 0
class MemberNameList : public QList<MemberName> class MemberNameList : public QList<MemberName>
{ {
public: public:
...@@ -56,6 +57,16 @@ class MemberNameListIterator : public QListIterator<MemberName> ...@@ -56,6 +57,16 @@ class MemberNameListIterator : public QListIterator<MemberName>
}; };
typedef QDict<MemberName> MemberNameDict; typedef QDict<MemberName> MemberNameDict;
#endif
class MemberNameSDict : public SDict<MemberName>
{
public:
MemberNameSDict(int size) : SDict<MemberName>(size) {}
~MemberNameSDict() {}
int compareItems(GCI item1,GCI item2);
};
struct MemberInfo struct MemberInfo
{ {
...@@ -89,6 +100,7 @@ class MemberNameInfoIterator : public QListIterator<MemberInfo> ...@@ -89,6 +100,7 @@ class MemberNameInfoIterator : public QListIterator<MemberInfo>
: QListIterator<MemberInfo>(mnii) {} : QListIterator<MemberInfo>(mnii) {}
}; };
#if 0
class MemberNameInfoList : public QList<MemberNameInfo> class MemberNameInfoList : public QList<MemberNameInfo>
{ {
public: public:
...@@ -108,6 +120,15 @@ class MemberNameInfoDict : public QDict<MemberNameInfo> ...@@ -108,6 +120,15 @@ class MemberNameInfoDict : public QDict<MemberNameInfo>
~MemberNameInfoDict() {} ~MemberNameInfoDict() {}
}; };
class MemberNameInfoListIterator : public QListIterator<MemberNameInfo>
{
public:
MemberNameInfoListIterator(const MemberNameInfoList &mil) :
QListIterator<MemberNameInfo>(mil) {}
};
#endif
class MemberNameInfoSDict : public SDict<MemberNameInfo> class MemberNameInfoSDict : public SDict<MemberNameInfo>
{ {
public: public:
...@@ -121,11 +142,4 @@ class MemberNameInfoSDict : public SDict<MemberNameInfo> ...@@ -121,11 +142,4 @@ class MemberNameInfoSDict : public SDict<MemberNameInfo>
} }
}; };
class MemberNameInfoListIterator : public QListIterator<MemberNameInfo>
{
public:
MemberNameInfoListIterator(const MemberNameInfoList &mil) :
QListIterator<MemberNameInfo>(mil) {}
};
#endif #endif
...@@ -866,12 +866,13 @@ void addDefine() ...@@ -866,12 +866,13 @@ void addDefine()
md->setFileDef(g_yyFileDef); md->setFileDef(g_yyFileDef);
md->setDefinition("#define "+g_defName); md->setDefinition("#define "+g_defName);
MemberName *mn=Doxygen::functionNameDict[g_defName]; MemberName *mn=Doxygen::functionNameSDict[g_defName];
if (mn==0) if (mn==0)
{ {
mn = new MemberName(g_defName); mn = new MemberName(g_defName);
Doxygen::functionNameList.append(mn); //Doxygen::functionNameList.append(mn);
Doxygen::functionNameDict.insert(g_defName,mn); //Doxygen::functionNameDict.insert(g_defName,mn);
Doxygen::functionNameSDict.append(g_defName,mn);
} }
mn->append(md); mn->append(md);
if (g_yyFileDef) g_yyFileDef->insertMember(md); if (g_yyFileDef) g_yyFileDef->insertMember(md);
......
...@@ -150,6 +150,8 @@ static bool needsSemi; ...@@ -150,6 +150,8 @@ static bool needsSemi;
static int depthIf; static int depthIf;
static int initializerSharpCount; static int initializerSharpCount;
static QCString memberGroupRelates;
static QCString memberGroupInside;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -166,6 +168,8 @@ static void initParser() ...@@ -166,6 +168,8 @@ static void initParser()
roundCount = 0; roundCount = 0;
curlyCount = 0; curlyCount = 0;
memberGroupId = NOGROUP; memberGroupId = NOGROUP;
memberGroupRelates.resize(0);
memberGroupInside.resize(0);
mtype = Method; mtype = Method;
gstat = FALSE; gstat = FALSE;
virt = Normal; virt = Normal;
...@@ -185,6 +189,8 @@ static void initEntry() ...@@ -185,6 +189,8 @@ static void initEntry()
current->virt = virt; current->virt = virt;
current->stat = gstat; current->stat = gstat;
current->mGrpId = memberGroupId; current->mGrpId = memberGroupId;
current->relates = memberGroupRelates.copy();
current->inside = memberGroupInside.copy();
if (!autoGroupStack.isEmpty()) if (!autoGroupStack.isEmpty())
{ {
current->groups->append(new Grouping(*autoGroupStack.top())); current->groups->append(new Grouping(*autoGroupStack.top()));
...@@ -1320,7 +1326,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1320,7 +1326,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
startGroup(); startGroup();
tmpDocType=-1; tmpDocType=-1;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
{
current->inside = current_root->name+"::"; current->inside = current_root->name+"::";
if (current->mGrpId!=NOGROUP)
{
memberGroupInside = current->inside.copy();
}
}
if (yytext[1]=='/') // C++ style comment if (yytext[1]=='/') // C++ style comment
{ {
current->brief.resize(0); current->brief.resize(0);
...@@ -2589,14 +2601,26 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2589,14 +2601,26 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->doc.resize(0); current->doc.resize(0);
lastDocContext = YY_START; lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
{
current->inside = current_root->name+"::"; current->inside = current_root->name+"::";
if (current->mGrpId!=NOGROUP)
{
memberGroupInside = current->inside.copy();
}
}
BEGIN( Doc ); BEGIN( Doc );
} }
<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases>("//"{B}*)?"/**"/[^/*] { <FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases>("//"{B}*)?"/**"/[^/*] {
removeSlashes=(yytext[1]=='/'); removeSlashes=(yytext[1]=='/');
lastDocContext = YY_START; lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
{
current->inside = current_root->name+"::"; current->inside = current_root->name+"::";
if (current->mGrpId!=NOGROUP)
{
memberGroupInside = current->inside.copy();
}
}
if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style
{ {
tmpDocType=-1; tmpDocType=-1;
...@@ -2629,7 +2653,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2629,7 +2653,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
tmpDocType=-1; tmpDocType=-1;
lastDocContext = YY_START; lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
{
current->inside = current_root->name+"::"; current->inside = current_root->name+"::";
if (current->mGrpId!=NOGROUP)
{
memberGroupInside = current->inside.copy();
}
}
BEGIN( LineDoc ); BEGIN( LineDoc );
} }
<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"///"/[^/] { <FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"///"/[^/] {
...@@ -2637,7 +2667,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2637,7 +2667,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
tmpDocType=-1; tmpDocType=-1;
lastDocContext = YY_START; lastDocContext = YY_START;
if (current_root->section & Entry::SCOPE_MASK) if (current_root->section & Entry::SCOPE_MASK)
{
current->inside = current_root->name+"::"; current->inside = current_root->name+"::";
if (current->mGrpId!=NOGROUP)
{
memberGroupInside = current->inside.copy();
}
}
BEGIN( LineDoc ); BEGIN( LineDoc );
} }
<FindMembers>"extern"{BN}+"\"C"("++")?"\""{BN}*("{")? { <FindMembers>"extern"{BN}+"\"C"("++")?"\""{BN}*("{")? {
...@@ -2997,6 +3033,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -2997,6 +3033,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
<ClassDocRelates>({ID}"::")*{ID} { <ClassDocRelates>({ID}"::")*{ID} {
current->relates = yytext; current->relates = yytext;
if (current->mGrpId!=NOGROUP)
{
memberGroupRelates = yytext;
}
BEGIN( lastDocRelContext ); BEGIN( lastDocRelContext );
} }
<NameSpaceDocArg1>{SCOPENAME} { <NameSpaceDocArg1>{SCOPENAME} {
...@@ -3332,6 +3372,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -3332,6 +3372,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
else if (current->section == Entry::MEMBERGRP_SEC) else if (current->section == Entry::MEMBERGRP_SEC)
{ {
memberGroupId = newMemberGroupId(); memberGroupId = newMemberGroupId();
memberGroupRelates = current->relates.copy();
memberGroupInside = current->inside.copy();
current->mGrpId = memberGroupId; current->mGrpId = memberGroupId;
lastMemberGroupLine = yyLineNr; lastMemberGroupLine = yyLineNr;
} }
...@@ -3943,6 +3985,8 @@ static void startGroup() ...@@ -3943,6 +3985,8 @@ static void startGroup()
memberGroupHeader="[NOHEADER]"; memberGroupHeader="[NOHEADER]";
} }
memberGroupId = newMemberGroupId(); memberGroupId = newMemberGroupId();
memberGroupRelates = current->relates.copy();
memberGroupInside = current->inside.copy();
current->mGrpId = memberGroupId; current->mGrpId = memberGroupId;
lastMemberGroupLine = yyLineNr; lastMemberGroupLine = yyLineNr;
} }
...@@ -3964,9 +4008,12 @@ static void endGroup() ...@@ -3964,9 +4008,12 @@ static void endGroup()
new QCString(memberGroupDocs) new QCString(memberGroupDocs)
); );
memberGroupId=NOGROUP; memberGroupId=NOGROUP;
memberGroupRelates.resize(0);
memberGroupInside.resize(0);
if (YY_START!=ReadInitializer) if (YY_START!=ReadInitializer)
{ {
current->mGrpId=NOGROUP; current->mGrpId=NOGROUP;
current->relates.resize(0);
} }
memberGroupHeader.resize(0); memberGroupHeader.resize(0);
memberGroupDocs.resize(0); memberGroupDocs.resize(0);
...@@ -4056,6 +4103,8 @@ static void parseCompounds(Entry *rt) ...@@ -4056,6 +4103,8 @@ static void parseCompounds(Entry *rt)
//printf("name=%s current->stat=%d gstat=%d\n",ce->name.data(),current->stat,gstat); //printf("name=%s current->stat=%d gstat=%d\n",ce->name.data(),current->stat,gstat);
memberGroupId = NOGROUP; memberGroupId = NOGROUP;
memberGroupRelates.resize(0);
memberGroupInside.resize(0);
scanYYlex() ; scanYYlex() ;
delete current; current=0; delete current; current=0;
......
...@@ -130,6 +130,12 @@ class SDict ...@@ -130,6 +130,12 @@ class SDict
} }
#endif #endif
} }
/*! Remove an item from the dictionary */
bool remove(const char *key)
{
T *item = m_dict->take(key);
return item ? m_list->remove(item) : FALSE;
}
/*! Sorts the members of the dictionary. First appending a number /*! Sorts the members of the dictionary. First appending a number
* of members and then sorting them is faster (O(NlogN) than using * of members and then sorting them is faster (O(NlogN) than using
* inSort() for each member (O(N^2)). * inSort() for each member (O(N^2)).
...@@ -170,7 +176,7 @@ class SDict ...@@ -170,7 +176,7 @@ class SDict
} }
/*! Equavalent to find(). */ /*! Equavalent to find(). */
T *operator[](const char *key) T *operator[](const char *key) const
{ {
return m_dict->find(key); return m_dict->find(key);
} }
......
...@@ -370,14 +370,14 @@ QCString resolveTypeDef(Definition *d,const QCString &name) ...@@ -370,14 +370,14 @@ QCString resolveTypeDef(Definition *d,const QCString &name)
MemberDef *md=0; MemberDef *md=0;
while (mContext && md==0) while (mContext && md==0)
{ {
MemberNameDict *mnd=0; MemberNameSDict *mnd=0;
if (mContext->definitionType()==Definition::TypeClass) if (mContext->definitionType()==Definition::TypeClass)
{ {
mnd=&Doxygen::memberNameDict; mnd=&Doxygen::memberNameSDict;
} }
else else
{ {
mnd=&Doxygen::functionNameDict; mnd=&Doxygen::functionNameSDict;
} }
MemberName *mn=mnd->find(name); MemberName *mn=mnd->find(name);
if (mn) if (mn)
...@@ -1080,7 +1080,7 @@ static QCString trimTemplateSpecifiers( ...@@ -1080,7 +1080,7 @@ static QCString trimTemplateSpecifiers(
QCString result=s; QCString result=s;
int i=className.length()-1; int i=className.length()-1;
if (className.at(i)=='>') // template specialization if (i>=0 && className.at(i)=='>') // template specialization
{ {
// replace unspecialized occurrences in s, with their specialized versions. // replace unspecialized occurrences in s, with their specialized versions.
int count=1; int count=1;
...@@ -2046,7 +2046,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2046,7 +2046,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("mScope=`%s' mName=`%s'\n",mScope.data(),mName.data()); //printf("mScope=`%s' mName=`%s'\n",mScope.data(),mName.data());
MemberName *mn = Doxygen::memberNameDict[mName]; MemberName *mn = Doxygen::memberNameSDict[mName];
if (!forceEmptyScope && mn && !(scopeName.isEmpty() && mScope.isEmpty())) if (!forceEmptyScope && mn && !(scopeName.isEmpty() && mScope.isEmpty()))
{ {
//printf(" >member name found\n"); //printf(" >member name found\n");
...@@ -2157,7 +2157,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2157,7 +2157,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
// maybe an namespace, file or group member ? // maybe an namespace, file or group member ?
//printf("Testing for global function scopeName=`%s' mScope=`%s' :: mName=`%s'\n", //printf("Testing for global function scopeName=`%s' mScope=`%s' :: mName=`%s'\n",
// scopeName.data(),mScope.data(),mName.data()); // scopeName.data(),mScope.data(),mName.data());
if ((mn=Doxygen::functionNameDict[mName])) // name is known if ((mn=Doxygen::functionNameSDict[mName])) // name is known
{ {
//printf(" >function name found\n"); //printf(" >function name found\n");
NamespaceDef *fnd=0; NamespaceDef *fnd=0;
...@@ -2239,8 +2239,8 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2239,8 +2239,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
gd=md->getGroupDef(); gd=md->getGroupDef();
//printf("md->name()=`%s' md->args=`%s' fd=%p gd=%p\n", //printf("md->name()=`%s' md->args=`%s' fd=%p gd=%p\n",
// md->name().data(),args,fd,gd); // md->name().data(),args,fd,gd);
if ((fd && fd->isLinkable()) || if (
(gd && gd->isLinkable()) (gd && gd->isLinkable()) || (fd && fd->isLinkable())
) )
{ {
//printf("fd=%p gd=%p inGroup=`%d' args=`%s'\n",fd,gd,inGroup,args); //printf("fd=%p gd=%p inGroup=`%d' args=`%s'\n",fd,gd,inGroup,args);
...@@ -2274,8 +2274,8 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2274,8 +2274,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
//printf("member is linkable md->name()=`%s'\n",md->name().data()); //printf("member is linkable md->name()=`%s'\n",md->name().data());
fd=md->getFileDef(); fd=md->getFileDef();
gd=md->getGroupDef(); gd=md->getGroupDef();
if ((fd && fd->isLinkable()) || if (
(gd && gd->isLinkable()) (gd && gd->isLinkable()) || (fd && fd->isLinkable())
) )
{ {
members.append(md); members.append(md);
...@@ -2309,6 +2309,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2309,6 +2309,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
fd=md->getFileDef(); fd=md->getFileDef();
gd=md->getGroupDef(); gd=md->getGroupDef();
//printf("fd=%p gd=%p gd->isLinkable()=%d\n",fd,gd,gd->isLinkable());
if (gd && gd->isLinkable()) fd=0; else gd=0; if (gd && gd->isLinkable()) fd=0; else gd=0;
return TRUE; return TRUE;
} }
......
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