diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/classdef.cpp | 2 | ||||
-rw-r--r-- | src/commentcnv.l | 2 | ||||
-rw-r--r-- | src/config.l | 9 | ||||
-rw-r--r-- | src/definition.cpp | 1 | ||||
-rw-r--r-- | src/definition.h | 7 | ||||
-rw-r--r-- | src/doc.l | 7 | ||||
-rw-r--r-- | src/dot.cpp | 27 | ||||
-rw-r--r-- | src/dot.h | 2 | ||||
-rw-r--r-- | src/doxygen.cpp | 165 | ||||
-rw-r--r-- | src/doxygen.h | 2 | ||||
-rw-r--r-- | src/entry.h | 5 | ||||
-rw-r--r-- | src/index.cpp | 12 | ||||
-rw-r--r-- | src/membergroup.cpp | 1 | ||||
-rw-r--r-- | src/namespacedef.cpp | 2 | ||||
-rw-r--r-- | src/reflist.cpp | 9 | ||||
-rw-r--r-- | src/scanner.l | 57 | ||||
-rw-r--r-- | src/translator.h | 6 | ||||
-rw-r--r-- | src/translator_adapter.h | 12 | ||||
-rw-r--r-- | src/translator_br.h | 2 | ||||
-rw-r--r-- | src/translator_cz.h | 2 | ||||
-rw-r--r-- | src/translator_de.h | 2 | ||||
-rw-r--r-- | src/translator_en.h | 11 | ||||
-rw-r--r-- | src/translator_fr.h | 2 | ||||
-rw-r--r-- | src/translator_hr.h | 2 | ||||
-rw-r--r-- | src/translator_it.h | 2 | ||||
-rw-r--r-- | src/translator_jp.h | 2 | ||||
-rw-r--r-- | src/translator_nl.h | 11 | ||||
-rw-r--r-- | src/translator_pt.h | 2 | ||||
-rw-r--r-- | src/translator_ru.h | 2 | ||||
-rw-r--r-- | src/util.cpp | 6 | ||||
-rw-r--r-- | src/xmlgen.cpp | 4 |
31 files changed, 293 insertions, 85 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index 0185d47..8393aed 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -750,7 +750,7 @@ void ClassDef::writeDetailedDescription(OutputList &ol, OutputList &briefOutput, void ClassDef::writeDocumentation(OutputList &ol) { // write title - QCString pageTitle=name().copy(); + QCString pageTitle=displayName().copy(); QCString pageType; QCString cType=compoundTypeString(); toupper(cType.at(0)); diff --git a/src/commentcnv.l b/src/commentcnv.l index bba1b21..b0fed8d 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -109,7 +109,7 @@ static int yyread(char *buf,int max_size) copyToOutput(yytext+i,yyleng-i); BEGIN(SComment); } -<Scan>"//"[\/!].*\n { /* one line C++ comment */ +<Scan>"//".*\n { /* one line C++ comment */ copyToOutput(yytext,yyleng); } <Scan>"/*" { /* start of a C comment */ diff --git a/src/config.l b/src/config.l index 8c3c50b..7c8865c 100644 --- a/src/config.l +++ b/src/config.l @@ -1557,6 +1557,13 @@ void Config::create() "commands in the documentation.\n", TRUE ); + cb = addBool( + "GENERATE_DEPRECATEDLIST", + "The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \n" + "disable (NO) the deprecated list. This list is created by putting " + "\\deprecated commands in the documentation.\n", + TRUE + ); cl = addList( "ALIASES", "This tag can be used to specify a number of aliases that acts \n" @@ -1732,7 +1739,7 @@ void Config::create() "FILTER_SOURCE_FILES", "If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \n" "INPUT_FILTER) will be used to filter the input files when producing source \n" - "files to browse. \n", + "files to browse (i.e. when SOURCE_BROWSER is set to YES). \n", FALSE ); //----------------------------------------------------------------------------------------------- diff --git a/src/definition.cpp b/src/definition.cpp index 4dafb51..dcdaa72 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -50,6 +50,7 @@ Definition::Definition(const char *df,int dl, m_todoId=0; m_testId=0; m_bugId=0; + m_deprecatedId=0; m_outerScope=Doxygen::globalScope; m_partOfGroups=0; m_specialListItems=0; diff --git a/src/definition.h b/src/definition.h index ad3da97..88c9628 100644 --- a/src/definition.h +++ b/src/definition.h @@ -161,9 +161,10 @@ class Definition SectionDict *m_sectionDict; // dictionary of all sections MemberSDict *m_sourceRefByDict; MemberSDict *m_sourceRefsDict; - int m_testId; // id for test list item - int m_todoId; // id for todo list item - int m_bugId; // id for bug list item + int m_testId; // id for test list item + int m_todoId; // id for todo list item + int m_bugId; // id for bug list item + int m_deprecatedId; // id for deprecated list item int m_docLine; QCString m_docFile; int m_briefLine; @@ -1692,9 +1692,11 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? } <DocScan>"\\todo "[0-9]+ | /* generated labels */ <DocScan>"\\test "[0-9]+ | -<DocScan>"\\bug "[0-9]+ { +<DocScan>"\\bug "[0-9]+ | +<DocScan>"\\deprecated "[0-9]+ { writeSpecialItem(yytext); } + /* <DocScan>{CMD}"deprecated"{BSEP} { if (insideItemList) { @@ -1713,7 +1715,8 @@ LINKMASK [a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))? { outDoc->writeDescItem(); } - } + } + */ <DocScan>"$"[a-zA-Z_0-9]+":"[^\n\$]+"$" { // RCS tag QCString tagName(&yytext[1]); int i=tagName.find(':'); diff --git a/src/dot.cpp b/src/dot.cpp index a5ad72b..2e9ca54 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -75,7 +75,24 @@ static bool convertMapFile(QTextStream &t,const char *mapName) //printf("ReadLine `%s'\n",buf); if (strncmp(buf,"rect",4)==0) { + // obtain the url and the coordinates in the order used by graphviz-1.5 sscanf(buf,"rect %s %d,%d %d,%d",url,&x1,&y2,&x2,&y1); + // later versions of graphviz corrected the y coordinate order + // the rule is that y2>=y1, so test and switch if needed + if (y2<y1) + { + int temp=y2; + y2=y1; + y1=temp; + } + // there shouldn't be any need for this for known versions of graphviz + // but it can't do any harm to check that x follows the rules as well + if (x2<x1) + { + int temp=x2; + x2=x1; + x1=temp; + } char *refPtr = url; char *urlPtr = strchr(url,'$'); //printf("url=`%s'\n",url); @@ -230,7 +247,7 @@ class DotNodeList : public QList<DotNode> /*! helper function that deletes all nodes in a connected graph, given * one of the graph's nodes */ -static void deleteNodes(DotNode *node,SIntDict<DotNode> *skipNodes=0) +static void deleteNodes(DotNode *node,SDict<DotNode> *skipNodes=0) { //printf("deleteNodes skipNodes=%p\n",skipNodes); static DotNodeList deletedNodes; @@ -311,7 +328,7 @@ void DotNode::removeParent(DotNode *n) if (m_parents) m_parents->remove(n); } -void DotNode::deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes) +void DotNode::deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes) { if (m_deleted) return; // avoid recursive loops in case the graph has cycles m_deleted=TRUE; @@ -337,7 +354,7 @@ void DotNode::deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes) } // add this node to the list of deleted nodes. //printf("skipNodes=%p find(%p)=%p\n",skipNodes,this,skipNodes ? skipNodes->find((int)this) : 0); - if (skipNodes==0 || skipNodes->find((int)this)==0) + if (skipNodes==0 || skipNodes->find((char*)this)==0) { //printf("deleting\n"); deletedList.append(this); @@ -933,13 +950,13 @@ DotGfxHierarchyTable::DotGfxHierarchyTable() DotGfxHierarchyTable::~DotGfxHierarchyTable() { //printf("DotGfxHierarchyTable::~DotGfxHierarchyTable\n"); - SIntDict<DotNode> skipNodes(17); + SDict<DotNode> skipNodes(17); skipNodes.setAutoDelete(TRUE); DotNode *n = m_rootNodes->first(); while (n) { //printf("adding %s %p\n",n->label().data(),n); - skipNodes.append((int)n,n); + skipNodes.append((char*)n,n); n=m_rootNodes->next(); } n = m_rootNodes->first(); @@ -69,7 +69,7 @@ class DotNode ); void setDistance(int distance); void addParent(DotNode *n); - void deleteNode(DotNodeList &deletedList,SIntDict<DotNode> *skipNodes=0); + void deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes=0); void removeChild(DotNode *n); void removeParent(DotNode *n); void write(QTextStream &t,GraphOutputFormat f,bool topDown,bool toChildren, diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 36c86c3..388a323 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -2541,6 +2541,107 @@ static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,co return templateNames; } +/*! Searches a class from within the context of \a cd and returns its + * definition if found (otherwise 0 is returned). + * This function differs from getResolvedClass in that it also takes + * using declarations and definition into account. + */ +ClassDef *findClassWithinClassContext(ClassDef *cd,const QCString &name) +{ + ClassDef *result=0; + + // try using of namespaces in namespace scope + NamespaceDef *nd=cd->getNamespaceDef(); + FileDef *fd=cd->getFileDef(); + if (nd) // class is inside a namespace + { + QCString fName = nd->name()+"::"+name; + result = getResolvedClass(cd,fName); + if (result && result!=cd) + { + return result; + } + NamespaceList *nl = nd->getUsedNamespaces(); + if (nl) // try to prepend any of the using namespace scopes. + { + NamespaceListIterator nli(*nl); + NamespaceDef *nd; + for (nli.toFirst() ; (nd=nli.current()) ; ++nli) + { + fName = nd->name()+"::"+name; + result = getResolvedClass(cd,fName); + if (result && result!=cd) return result; + } + } + ClassList *cl = nd->getUsedClasses(); + if (cl) + { + ClassListIterator cli(*cl); + ClassDef *ucd; + for (cli.toFirst(); (ucd=cli.current()) ; ++cli) + { + if (rightScopeMatch(ucd->name(),name)) + { + return ucd; + } + } + } + // TODO: check any inbetween namespaces as well! + if (fd) // and in the global namespace + { + ClassList *cl = fd->getUsedClasses(); + if (cl) + { + ClassListIterator cli(*cl); + ClassDef *ucd; + for (cli.toFirst(); (ucd=cli.current()); ++cli) + { + if (rightScopeMatch(ucd->name(),name)) + { + return ucd; + } + } + } + } + } + + // try using of namespaces in file scope + if (fd) + { + // look for the using statement in this file in which the + // class was found + NamespaceList *nl = fd->getUsedNamespaces(); + if (nl) // try to prepend any of the using namespace scopes. + { + NamespaceListIterator nli(*nl); + NamespaceDef *nd; + for (nli.toFirst() ; (nd=nli.current()) ; ++nli) + { + QCString fName = nd->name()+"::"+name; + result=getResolvedClass(cd,fName); + if (result && result!=cd) + { + return result; + } + } + } + ClassList *cl = fd->getUsedClasses(); + if (cl) + { + ClassListIterator cli(*cl); + ClassDef *ucd; + for (cli.toFirst(); (ucd=cli.current()) ; ++cli) + { + if (rightScopeMatch(ucd->name(),name)) + { + return ucd; + } + } + } + } + + return getResolvedClass(cd,name); +} enum FindBaseClassRelation_Mode { @@ -2586,6 +2687,7 @@ static void findUsedClassesForClass(Entry *root, QCString usedClassName; QCString templSpec; bool found=FALSE; + // the type can contain template variables, replace them if present if (actualArgs) { type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs); @@ -2593,12 +2695,17 @@ static void findUsedClassesForClass(Entry *root, //printf("findUsedClassesForClass(%s)=%s\n",masterCd->name().data(),type.data()); while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec)) { + // the name could be a type definition, resolve it + // TODO: recursive typedef resolution QCString typeName = resolveTypeDef(masterCd,usedClassName); + + // add any template arguments to the class QCString usedName = usedClassName+templSpec; - if (!typeName.isEmpty()) - { - usedName=typeName; - } + + //if (!typeName.isEmpty()) + //{ + // usedName=typeName; + //} //printf("usedName=`%s'\n",usedName.data()); bool delTempNames=FALSE; @@ -2642,11 +2749,16 @@ static void findUsedClassesForClass(Entry *root, if (!found) { - Definition *scope=masterCd->getOuterScope(); ClassDef *usedCd=0; +#if 0 + Definition *scope=masterCd->getOuterScope(); do { - QCString scopeName = scope ? scope->qualifiedName().data() : 0; + // TODO: also consider using declarations and directives + // as done for inheritance relations. + + QCString scopeName; + if (scope) scopeName=scope->qualifiedName(); if (!scopeName.isEmpty()) { usedCd=getResolvedClass(masterCd,scopeName+"::"+usedName,0,&templSpec); @@ -2661,8 +2773,10 @@ static void findUsedClassesForClass(Entry *root, } if (scope) scope=scope->getOuterScope(); } while (scope && usedCd==0); +#endif + usedCd = findClassWithinClassContext(masterCd,usedName); - if (usedCd) + if (usedCd && usedCd!=masterCd) { found=TRUE; Debug::print(Debug::Classes,0," Adding used class `%s'\n", usedCd->name().data()); @@ -2944,7 +3058,6 @@ static bool findClassRelation( //printf("cd=%p baseClass=%p\n",cd,baseClass); bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances); - NamespaceDef *nd=cd->getNamespaceDef(); if (!found && (i=baseClassName.findRev("::"))!=-1) { // replace any namespace aliases @@ -2953,9 +3066,19 @@ static bool findClassRelation( found=baseClass!=0 && baseClass!=cd; } - FileDef *fd=cd->getFileDef(); + //printf("root->name=%s biName=%s baseClassName=%s\n", + // root->name.data(),biName.data(),baseClassName.data()); + + //FileDef *fd=cd->getFileDef(); + //NamespaceDef *nd=cd->getNamespaceDef(); if (!found) { + baseClass=findClassWithinClassContext(cd,baseClassName); + //printf("findClassWithinClassContext(%s,%s)=%p\n", + // cd->name().data(),baseClassName.data(),baseClass); + found = baseClass!=0 && baseClass!=cd; + +#if 0 if (fd) { // look for the using statement in this file in which the @@ -2968,7 +3091,8 @@ static bool findClassRelation( for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli) { QCString fName = nd->name()+"::"+baseClassName; - found = (baseClass=getResolvedClass(cd,fName))!=0 && baseClass!=cd && + found = (baseClass=getResolvedClass(cd,fName))!=0 && + baseClass!=cd && root->name!=fName; } } @@ -3002,7 +3126,8 @@ static bool findClassRelation( for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli) { fName = nd->name()+"::"+baseClassName; - found = (baseClass=getResolvedClass(cd,fName))!=0 && baseClass!=cd && + found = (baseClass=getResolvedClass(cd,fName))!=0 && + baseClass!=cd && root->name!=fName; } } @@ -3042,6 +3167,7 @@ static bool findClassRelation( } } } +#endif } bool isATemplateArgument = templateNames!=0 && templateNames->find(biName)!=0; if (found) @@ -5808,11 +5934,11 @@ static void resolveUserReferences() si->fileName=si->definition->getOutputFileBase().copy(); } } - // hack: the items of a todo/test/bug list are all fragments from + // hack: the items of a todo/test/bug/deprecated list are all fragments from // different files, so the resulting section's all have the wrong file - // name (not from the todo/test/bug list, but from the file in which they - // are defined). We correct this here by looking at the generated section - // labels! + // name (not from the todo/test/bug/deprecated list, but from the file in + // which they are defined). We correct this here by looking at the + // generated section labels! QDictIterator<RefList> rli(*Doxygen::specialLists); RefList *rl; for (rli.toFirst();(rl=rli.current());++rli) @@ -7038,6 +7164,15 @@ void readConfiguration(int argc, char **argv) BaseOutputDocInterface::Bug ) ); + Doxygen::specialLists->insert("deprecated", + new RefList("deprecated", + "GENERATE_DEPRECATEDLIST", + theTranslator->trDeprecatedList(), + theTranslator->trDeprecated(), + BaseOutputDocInterface::Deprecated + ) + ); + } void parseInput() diff --git a/src/doxygen.h b/src/doxygen.h index f97c23c..72d3a80 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -93,7 +93,7 @@ class Doxygen static QIntDict<QCString> memberDocDict; // dictionary of the member groups heading static QDict<void> expandAsDefinedDict; static NamespaceDef *globalScope; - static QDict<RefList> *specialLists; // array of special lists: todo, test, bug ... + static QDict<RefList> *specialLists; // array of special lists: todo, test, bug, deprecated ... }; void initDoxygen(); diff --git a/src/entry.h b/src/entry.h index f814ef4..5b75105 100644 --- a/src/entry.h +++ b/src/entry.h @@ -283,10 +283,7 @@ class Entry QList<QCString> *anchors; //!< list of anchors defined in this entry QCString fileName; //!< file this entry was extracted from int startLine; //!< start line of entry in the source - //int todoId; //!< id of the todo list item of this entry - //int testId; //!< id of the test list item of this entry - //int bugId; //!< id of the bug list item of this entry - QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/..) this entry is in + QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/deprecated/..) this entry is in TagInfo *tagInfo; //!< tag file info static int num; //!< counts the total number of entries enum diff --git a/src/index.cpp b/src/index.cpp index cd93267..2754080 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -1382,17 +1382,9 @@ void writeAlphabeticalClassList(OutputList &ol) } else if (cd) // a real class, insert a link { - QCString cname; QCString namesp; - if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->name(); - if (Config_getBool("HIDE_SCOPE_NAMES")) - { - cname=cd->displayName(); - } - else - { - cname=cd->className(); - } + if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName(); + QCString cname=cd->displayName(); ol.writeObjectLink(cd->getReference(), cd->getOutputFileBase(),0,cname); diff --git a/src/membergroup.cpp b/src/membergroup.cpp index 3794af1..9bb5f17 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -37,6 +37,7 @@ MemberGroup::MemberGroup(int id,const char *hdr,const char *d) /* : Definition(idToName(id)) */ { + //printf("New member group id=%d header=%s desc=%s\n",id,hdr,d); memberList = new MemberList; grpId = id; grpHeader = hdr; diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 34f9f7d..f24de91 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -220,7 +220,7 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol) void NamespaceDef::writeDocumentation(OutputList &ol) { - QCString pageTitle=name()+" Namespace Reference"; + QCString pageTitle=displayName()+" Namespace Reference"; startFile(ol,getOutputFileBase(),name(),pageTitle); startTitle(ol,getOutputFileBase()); //ol.docify(pageTitle); diff --git a/src/reflist.cpp b/src/reflist.cpp index 9d23e04..7d49575 100644 --- a/src/reflist.cpp +++ b/src/reflist.cpp @@ -18,15 +18,6 @@ #include "reflist.h" -#if 0 -/*! The one and only todo list */ -RefList todoList; -/*! The test criteria list */ -RefList testList; -/*! The bug list */ -RefList bugList; -#endif - /*! Create a list of items that are cross referenced with documentation blocks * @param listName String representing the name of the list. * @param optionName String representation of the option enabling the list. diff --git a/src/scanner.l b/src/scanner.l index 095c1cd..468e1ad 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -88,10 +88,6 @@ static int squareCount = 0 ; static int padCount = 0 ; static int slStartContext = 0; static QCString slString; -//static int testStartContext = 0; -//static QCString testString; -//static int bugStartContext = 0; -//static QCString bugString; static Entry* current_root = 0 ; static Entry* global_root = 0 ; static Entry* current = 0 ; @@ -616,6 +612,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) %x TodoParam %x TestParam %x BugParam +%x DeprecatedParam %x SectionLabel %x SectionTitle %x SkipTemplate @@ -1499,6 +1496,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) warn(yyFileName,yyLineNr, "Warning: end of group without matching begin."); } + //printf("end of member group marker ends group %d\n",memberGroupId); endGroup(); memberGroupHeader.resize(0); } @@ -3214,10 +3212,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } <SkipHtmlComment>"--"[!]?">" { BEGIN(lastSkipHtmlCommentContext); } <SkipHtmlComment>. -<AfterDoc,Doc,ClassDoc,PageDoc>("\\\\"|"@@")("todo"|"test"|"bug")/[^a-z_A-Z0-9] { +<AfterDoc,Doc,ClassDoc,PageDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated")/[^a-z_A-Z0-9] { current->doc+=yytext; } -<AfterDocLine,LineDoc,JavaDoc>("\\\\"|"@@")("todo"|"test"|"bug")/[^a-z_A-Z0-9] { +<AfterDocLine,LineDoc,JavaDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated")/[^a-z_A-Z0-9] { current->brief+=yytext; } <AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"todo"/[^a-z_A-Z0-9] { @@ -3241,6 +3239,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) current->brief.resize(0); BEGIN(ClassDocBrief); } +<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"deprecated"/[^a-z_A-Z0-9] { + slStartContext = YY_START; + lastBriefContext = DeprecatedParam; // this is where we will continue at the end of the argument + slString = current->brief.copy(); // these will be swapped later on. + current->brief.resize(0); + BEGIN(ClassDocBrief); + } <TodoParam>\n | <TodoParam>"//" | <TodoParam>"/*" | @@ -3265,6 +3270,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]); BEGIN(slStartContext); } +<DeprecatedParam>\n | +<DeprecatedParam>"//" | +<DeprecatedParam>"/*" | +<DeprecatedParam>. { + addSpecialItem("deprecated"); + int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]); + BEGIN(slStartContext); + } <ExampleDocArg1>{FILE} { current->name = stripQuotes(yytext); BEGIN( ExampleDoc ); @@ -3457,6 +3470,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) memberGroupDocs+="\n\n"; } memberGroupDocs+=current->doc; + Doxygen::memberDocDict.insert(memberGroupId, + new QCString(memberGroupDocs) + ); current->doc.resize(0); current->brief.resize(0); BEGIN(lastDocContext); @@ -3618,6 +3634,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) warn(yyFileName,yyLineNr, "Warning: end of group without matching begin."); } + //printf("end of member group marker ends group %d\n",memberGroupId); endGroup(); memberGroupHeader.resize(0); } @@ -4295,12 +4312,13 @@ static void startGroup() } else { - if (memberGroupId!=NOGROUP) - { - //warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. " - // "Previous command was found at line %d.",lastMemberGroupLine); - endGroup(); - } + //if (memberGroupId!=NOGROUP) + //{ + // //warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. " + // // "Previous command was found at line %d.",lastMemberGroupLine); + // printf("startGroup ends group %d\n",memberGroupId); + // endGroup(); + //} if (memberGroupHeader.isEmpty()) { // warn( yyFileName, yyLineNr, "Warning: member group does not have a header" ); @@ -4327,10 +4345,11 @@ static void startGroupInDoc() } else if (current->section == Entry::MEMBERGRP_SEC) /* scope for a member group: @name */ { - if (memberGroupId!=NOGROUP) - { - endGroup(); - } + //if (memberGroupId!=NOGROUP) + //{ + // printf("startGroupInDoc ends group %d\n",memberGroupId); + // endGroup(); + //} memberGroupId = newMemberGroupId(); Doxygen::memberHeaderDict.insert(memberGroupId, new QCString(memberGroupHeader.stripWhiteSpace()) @@ -4378,7 +4397,11 @@ static void endGroup() static void forceEndGroup() { - while (memberGroupId!=NOGROUP || !autoGroupStack.isEmpty()) endGroup(); + while (memberGroupId!=NOGROUP || !autoGroupStack.isEmpty()) + { + //printf("forceEndGroup ends group %d\n",memberGroupId); + endGroup(); + } } //---------------------------------------------------------------------------- diff --git a/src/translator.h b/src/translator.h index 093f4ad..736b140 100644 --- a/src/translator.h +++ b/src/translator.h @@ -376,6 +376,12 @@ class Translator ////////////////////////////////////////////////////////////////////////// virtual QCString trRTFTableOfContents() = 0; + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.17 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trDeprecatedList() = 0; }; diff --git a/src/translator_adapter.h b/src/translator_adapter.h index 5ef3094..59eefe8 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -40,7 +40,17 @@ class TranslatorAdapterBase : public Translator }; -class TranslatorAdapter_1_2_16 : public TranslatorAdapterBase +class TranslatorAdapter_1_2_17 : public TranslatorAdapterBase +{ + public: + virtual QCString updateNeededMessage() + { return createUpdateNeededMessage(idLanguage(),"release 1.2.17"); } + + virtual QCString trDeprecatedList() + { return english.trDeprecatedList(); } +}; + +class TranslatorAdapter_1_2_16 : public TranslatorAdapter_1_2_17 { public: virtual QCString updateNeededMessage() diff --git a/src/translator_br.h b/src/translator_br.h index ad51e49..e361f6b 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -25,7 +25,7 @@ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -class TranslatorBrazilian: public Translator +class TranslatorBrazilian: public TranslatorAdapter_1_2_17 { public: diff --git a/src/translator_cz.h b/src/translator_cz.h index d5b5f27..f997bda 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -160,7 +160,7 @@ // probably slightly faster. -class TranslatorCzech : public Translator +class TranslatorCzech : public TranslatorAdapter_1_2_17 { private: /*! The decode() inline assumes the source written in the diff --git a/src/translator_de.h b/src/translator_de.h index c818fdd..41f2d45 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -71,7 +71,7 @@ #ifndef TRANSLATOR_DE_H #define TRANSLATOR_DE_H -class TranslatorGerman : public TranslatorAdapter_1_2_16 +class TranslatorGerman : public TranslatorAdapter_1_2_17 { public: diff --git a/src/translator_en.h b/src/translator_en.h index fe88737..a670015 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -1404,6 +1404,17 @@ class TranslatorEnglish : public Translator return "Table of Contents"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.17 +////////////////////////////////////////////////////////////////////////// + + /*! Used as the header of the list of item that have been + * flagged deprecated + */ + virtual QCString trDeprecatedList() + { + return "Deprecated List"; + } }; #endif diff --git a/src/translator_fr.h b/src/translator_fr.h index f8ffa45..945c198 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -41,7 +41,7 @@ #ifndef TRANSLATOR_FR_H #define TRANSLATOR_FR_H -class TranslatorFrench : public Translator +class TranslatorFrench : public TranslatorAdapter_1_2_17 { public: QCString idLanguage() diff --git a/src/translator_hr.h b/src/translator_hr.h index f6081db..c53326a 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -50,7 +50,7 @@ #ifndef TRANSLATOR_HR_H #define TRANSLATOR_HR_H -class TranslatorCroatian : public Translator +class TranslatorCroatian : public TranslatorAdapter_1_2_17 { private: /*! to avoid macro redefinition from translator_cz.h */ diff --git a/src/translator_it.h b/src/translator_it.h index a24f381..9766eb9 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -65,7 +65,7 @@ #ifndef TRANSLATOR_IT_H #define TRANSLATOR_IT_H -class TranslatorItalian : public Translator +class TranslatorItalian : public TranslatorAdapter_1_2_17 { public: diff --git a/src/translator_jp.h b/src/translator_jp.h index 0f81f01..ab6a10a 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -61,7 +61,7 @@ class TranslatorJapaneseEn : public TranslatorEnglish } }; -class TranslatorJapanese : public Translator +class TranslatorJapanese : public TranslatorAdapter_1_2_17 { private: /*! The decode() can change euc into sjis */ diff --git a/src/translator_nl.h b/src/translator_nl.h index bc4eaca..8b8a213 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -1002,6 +1002,17 @@ class TranslatorDutch : public Translator virtual QCString trRTFTableOfContents() { return "Inhoudsopgave"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.17 +////////////////////////////////////////////////////////////////////////// + + /*! Used as the header of the list of item that have been + * flagged deprecated + */ + virtual QCString trDeprecatedList() + { + return "Deprecated Lijst"; + } }; #endif diff --git a/src/translator_pt.h b/src/translator_pt.h index 7ebc4fa..02d6916 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -36,7 +36,7 @@ #ifndef TRANSLATOR_PT_H #define TRANSLATOR_PT_H -class TranslatorPortuguese : public Translator +class TranslatorPortuguese : public TranslatorAdapter_1_2_17 { public: diff --git a/src/translator_ru.h b/src/translator_ru.h index dafc470..172a3e6 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -50,7 +50,7 @@ #ifndef TRANSLATOR_RU_H #define TRANSLATOR_RU_H -class TranslatorRussian : public Translator +class TranslatorRussian : public TranslatorAdapter_1_2_17 { private: /*! The Decode() inline assumes the source written in the diff --git a/src/util.cpp b/src/util.cpp index 4ca7d8e..7a48266 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -3148,7 +3148,7 @@ bool extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStr /*! Substitutes any occurrence of a formal argument from argument list * \a formalArgs in \a name by the corresponding actual argument in * argument list \a actualArgs. The result after substitution - * is returned as a string. The argument \a className is used to + * is returned as a string. The argument \a name is used to * prevent recursive substitution. */ QCString substituteTemplateArgumentsInString( @@ -3189,7 +3189,9 @@ QCString substituteTemplateArgumentsInString( result += actArg->type; found=TRUE; } - else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty()) + else if (formArg->name==n && actArg==0 && !formArg->defval.isEmpty() && + formArg->defval!=name /* to prevent recursion */ + ) { result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs); found=TRUE; diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 567cf02..8d8f78f 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -667,7 +667,7 @@ class XMLGenerator : public OutputDocInterface // we need manually add a para here because cells are // parsed before the table is generated, and thus // are already parsed as if they are inside a paragraph. - //m_t << "<para>"; + m_t << "<para>"; } void endTableRow() { @@ -1521,7 +1521,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) { t << " id=\"" << ii->fileDef->getOutputFileBase() << "\""; } - t << " local=\"" << (ii->local ? "yes" : "no") << "\""; + t << " local=\"" << (ii->local ? "yes" : "no") << "\">"; t << nm; t << "</includes>" << endl; } |