From 1688ab7ec2a4165c7a6b9dd8531ee3ea98b9e4ee Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Thu, 20 Aug 2009 10:04:05 +0000 Subject: Release-1.6.0 --- INSTALL | 4 +- README | 4 +- configure | 6 +-- examples/example.tag | 2 +- src/classdef.cpp | 6 ++- src/doxygen.cpp | 137 +++++++++++++++++++++++++-------------------------- src/reflist.cpp | 70 +++++++++++++++++++++++--- src/reflist.h | 30 +++++++++-- src/search.css | 14 +----- src/search_css.h | 14 +----- src/translator_kr.h | 36 +++++++++++++- src/util.cpp | 31 ++++++++---- src/vhdlcode.l | 2 +- 13 files changed, 230 insertions(+), 126 deletions(-) diff --git a/INSTALL b/INSTALL index fe3e57c..bba6d0f 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ -DOXYGEN Version 1.5.9-20090814 +DOXYGEN Version 1.6.0 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (14 August 2009) +Dimitri van Heesch (20 August 2009) diff --git a/README b/README index 3d2ae5c..fdb5d75 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -DOXYGEN Version 1.5.9_20090814 +DOXYGEN Version 1.6.0 Please read INSTALL for compilation instructions. @@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. Enjoy, -Dimitri van Heesch (dimitri@stack.nl) (14 August 2009) +Dimitri van Heesch (dimitri@stack.nl) (20 August 2009) diff --git a/configure b/configure index aa0bafa..2e77284 100755 --- a/configure +++ b/configure @@ -16,11 +16,11 @@ # shell script to configure doxygen doxygen_version_major=1 -doxygen_version_minor=5 -doxygen_version_revision=9 +doxygen_version_minor=6 +doxygen_version_revision=0 #NOTE: Setting version_mmn to "NO" will omit mmn info from the package. -doxygen_version_mmn=20090814 +doxygen_version_mmn=NO bin_dirs=`echo $PATH | sed -e "s/:/ /g"` diff --git a/examples/example.tag b/examples/example.tag index b360cd1..a38ab5c 100644 --- a/examples/example.tag +++ b/examples/example.tag @@ -7,7 +7,7 @@ void example class_test.html - 47b775f65718978f1ffcd96376f8ecfa + a47b775f65718978f1ffcd96376f8ecfa () diff --git a/src/classdef.cpp b/src/classdef.cpp index 26934f1..55cc4f2 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -3089,8 +3089,10 @@ void ClassDef::addListReferences() { LockingPtr< QList > xrefItems = xrefListItems(); addRefItem(xrefItems.pointer(), - fortranOpt?theTranslator->trType(TRUE,TRUE):theTranslator->trClass(TRUE,TRUE), - getOutputFileBase(),displayName() + fortranOpt?theTranslator->trType(TRUE,TRUE): + theTranslator->trClass(TRUE,TRUE), + getOutputFileBase(), + displayName() ); } if (m_impl->memberGroupSDict) diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 5a2c5da..d256e8f 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -117,7 +117,7 @@ StringDict Doxygen::namespaceAliasDict(257); // all namespace aliases StringDict Doxygen::tagDestinationDict(257); // all tag locations QDict Doxygen::expandAsDefinedDict(257); // all macros that should be expanded QIntDict Doxygen::memGrpInfoDict(1009); // dictionary of the member groups heading -PageDef *Doxygen::mainPage = 0; +PageDef *Doxygen::mainPage = 0; bool Doxygen::insideMainPage = FALSE; // are we generating docs for the main page? QTextStream Doxygen::tagFile; NamespaceDef *Doxygen::globalScope = 0; @@ -2791,7 +2791,6 @@ static void buildFunctionList(EntryNav *rootNav) QCString scope=rootNav->parent()->name(); //stripAnonymousNamespaceScope(root->parent->name); if (!rname.isEmpty() && scope.find('@')==-1) { - ClassDef *cd=0; // check if this function's parent is a class scope=stripTemplateSpecifiersFromScope(scope,FALSE); @@ -2832,7 +2831,6 @@ static void buildFunctionList(EntryNav *rootNav) { isMember=memIndexte; } - } static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*"); @@ -2903,7 +2901,7 @@ static void buildFunctionList(EntryNav *rootNav) sameNumTemplateArgs = FALSE; } } - if ( + if ( matchArguments2(md->getOuterScope(),mfd,mdAl.pointer(), rnd ? rnd : Doxygen::globalScope,rfd,root->argList, FALSE) && @@ -2921,15 +2919,15 @@ static void buildFunctionList(EntryNav *rootNav) found=(mnd && rnd && nsName==rnsName) || // members are in the same namespace ((mnd==0 && rnd==0 && mfd!=0 && // no external reference and mfd->absFilePath()==root->fileName // prototype in the same file - ) - ); + ) + ); // otherwise, allow a duplicate global member with the same argument list if (!found && gd && gd==md->getGroupDef()) { // member is already in the group, so we don't want to add it again. found=TRUE; } - + //printf("combining function with prototype found=%d in namespace %s\n", // found,nsName.data()); @@ -2956,6 +2954,8 @@ static void buildFunctionList(EntryNav *rootNav) md->setDocumentation(root->doc,root->docFile,root->docLine); md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine); md->setDocsForDefinition(!root->proto); + md->setBodySegment(root->bodyLine,root->endBodyLine); + md->setBodyDef(rfd); if (md->briefDescription().isEmpty() && !root->brief.isEmpty()) { @@ -2982,6 +2982,13 @@ static void buildFunctionList(EntryNav *rootNav) { //printf("both members are grouped\n"); } + + // if md is a declaration and root is the corresponding + // definition, then turn md into a definition. + if (md->isPrototype() && !root->proto) + { + md->setPrototype(FALSE); + } } } } @@ -2991,7 +2998,7 @@ static void buildFunctionList(EntryNav *rootNav) Debug::print(Debug::Functions,0," --> new function %s found!\n",rname.data()); //printf("New function type=`%s' name=`%s' args=`%s' bodyLine=%d\n", // root->type.data(),rname.data(),root->args.data(),root->bodyLine); - + // new global function ArgumentList *tArgList = root->tArgLists ? root->tArgLists->last() : 0; QCString name=removeRedundantWhiteSpace(rname); @@ -3270,7 +3277,7 @@ static void transferArgumentDocumentation(ArgumentList *decAl,ArgumentList *defA static void transferFunctionDocumentation() { - //printf("transferFunctionDocumentation()\n"); + //printf("---- transferFunctionDocumentation()\n"); // find matching function declaration and definitions. MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict); @@ -3283,6 +3290,7 @@ static void transferFunctionDocumentation() /* find a matching function declaration and definition for this function */ for (;(mdec=mni1.current());++mni1) { + //printf("mdec=%s isPrototype()=%d\n",mdec->name().data(),mdec->isPrototype()); if (mdec->isPrototype() || (mdec->isVariable() && mdec->isExternal()) ) @@ -4661,6 +4669,18 @@ static void addListReferences() } //---------------------------------------------------------------------- + +static void generateXRefPages() +{ + QDictIterator di(*Doxygen::xrefLists); + RefList *rl; + for (di.toFirst();(rl=di.current());++di) + { + rl->generatePage(); + } +} + +//---------------------------------------------------------------------- // Copy the documentation in entry `root' to member definition `md' and // set the function declaration of the member to `funcDecl'. If the boolean // over_load is set the standard overload text is added. @@ -4695,7 +4715,7 @@ static void addMemberDocs(EntryNav *rootNav, // TODO determine scope based on root not md Definition *rscope = md->getOuterScope(); - + LockingPtr mdAl = md->argumentList(); if (al) { @@ -4729,42 +4749,12 @@ static void addMemberDocs(EntryNav *rootNav, } else { - //printf("Adding docs md->docs=`%s' root->docs=`%s'!\n", - // md->documentation().data(),root->doc.data()); - // documentation outside a compound overrides the documentation inside it - -#if 0 - if ( /* !md->isStatic() && !root->stat && do not replace doc of a static */ - ( - md->documentation().isEmpty() || /* no docs yet */ - (rootNav->parent()->name().isEmpty() && /* or overwrite prototype docs */ - !root->proto && md->isPrototype() /* with member definition docs */ - ) - ) && !root->doc.isEmpty() - ) -#endif - { - //printf("overwrite!\n"); - md->setDocumentation(root->doc,root->docFile,root->docLine); - md->setDocsForDefinition(!root->proto); - } + //printf("overwrite!\n"); + md->setDocumentation(root->doc,root->docFile,root->docLine); + md->setDocsForDefinition(!root->proto); - //printf("Adding brief md->brief=`%s' root->brief=`%s'!\n", - // md->briefDescription().data(),root->brief.data()); - // brief descriptions inside a compound override the documentation - // outside it -#if 0 - if ( /* !md->isStatic() && !root->stat && do not replace doc of static */ - ( - md->briefDescription().isEmpty() || /* no docs yet */ - !rootNav->parent()->name().isEmpty() /* member of a class */ - ) && !root->brief.isEmpty() - ) -#endif - { - //printf("overwrite!\n"); - md->setBriefDescription(root->brief,root->briefFile,root->briefLine); - } + //printf("overwrite!\n"); + md->setBriefDescription(root->brief,root->briefFile,root->briefLine); if ( (md->inbodyDocumentation().isEmpty() || @@ -4785,14 +4775,12 @@ static void addMemberDocs(EntryNav *rootNav, //printf("setInitializer\n"); md->setInitializer(root->initializer); } - + md->setMaxInitLines(root->initLines); if (rfd) { - if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1) - // || (md->isVariable() && !root->explicitExternal) ) { //printf("Setting new body segment [%d,%d]\n",root->bodyLine,root->endBodyLine); @@ -4904,7 +4892,7 @@ static bool findGlobalMember(EntryNav *rootNav, NamespaceDef *rnd = 0; if (!namespaceName.isEmpty()) rnd = Doxygen::namespaceSDict->find(namespaceName); - + LockingPtr mdAl = md->argumentList(); bool matching= (mdAl==0 && root->argList->count()==0) || @@ -4972,7 +4960,10 @@ static bool findGlobalMember(EntryNav *rootNav, { if (root->type!="friend class" && root->type!="friend struct" && - root->type!="friend union") + root->type!="friend union" && + (!Config_getBool("TYPEDEF_HIDES_STRUCT") || + root->type.find("typedef ")==-1) + ) { warn(root->fileName,root->startLine, "Warning: documented function `%s' was not declared or defined.",decl @@ -6582,27 +6573,30 @@ static void addEnumValuesToEnums(EntryNav *rootNav) // enum e->loadEntry(g_storage); Entry *root = e->entry(); - MemberDef *fmd=new MemberDef( - root->fileName,root->startLine, - root->type,root->name,root->args,0, - Public, Normal,root->stat,Member, - MemberDef::EnumValue,0,0); - if (md->getClassDef()) fmd->setMemberClass(md->getClassDef()); - else if (md->getNamespaceDef()) fmd->setNamespace(md->getNamespaceDef()); - else if (md->getFileDef()) fmd->setFileDef(md->getFileDef()); - fmd->setOuterScope(md->getOuterScope()); - fmd->setTagInfo(e->tagInfo()); - fmd->setDocumentation(root->doc,root->docFile,root->docLine); - fmd->setBriefDescription(root->brief,root->briefFile,root->briefLine); - fmd->addSectionsToDefinition(root->anchors); - fmd->setInitializer(root->initializer); - fmd->setMaxInitLines(root->initLines); - fmd->setMemberGroupId(root->mGrpId); - fmd->setExplicitExternal(root->explicitExternal); - if (fmd) + if (md->qualifiedName()==rootNav->name()) // enum value scope matches that of the enum { - md->insertEnumField(fmd); - fmd->setEnumScope(md); + MemberDef *fmd=new MemberDef( + root->fileName,root->startLine, + root->type,root->name,root->args,0, + Public, Normal,root->stat,Member, + MemberDef::EnumValue,0,0); + if (md->getClassDef()) fmd->setMemberClass(md->getClassDef()); + else if (md->getNamespaceDef()) fmd->setNamespace(md->getNamespaceDef()); + else if (md->getFileDef()) fmd->setFileDef(md->getFileDef()); + fmd->setOuterScope(md->getOuterScope()); + fmd->setTagInfo(e->tagInfo()); + fmd->setDocumentation(root->doc,root->docFile,root->docLine); + fmd->setBriefDescription(root->brief,root->briefFile,root->briefLine); + fmd->addSectionsToDefinition(root->anchors); + fmd->setInitializer(root->initializer); + fmd->setMaxInitLines(root->initLines); + fmd->setMemberGroupId(root->mGrpId); + fmd->setExplicitExternal(root->explicitExternal); + if (fmd) + { + md->insertEnumField(fmd); + fmd->setEnumScope(md); + } } e->releaseEntry(); } @@ -10190,8 +10184,9 @@ void parseInput() msg("Adding source references...\n"); addSourceReferences(); - msg("Adding todo/test/bug list items...\n"); + msg("Adding xrefitems...\n"); addListReferences(); + generateXRefPages(); if (Config_getBool("SHOW_DIRECTORIES") && Config_getBool("DIRECTORY_GRAPH")) { diff --git a/src/reflist.cpp b/src/reflist.cpp index da53f04..3f5c527 100644 --- a/src/reflist.cpp +++ b/src/reflist.cpp @@ -16,7 +16,9 @@ * */ +#include #include "reflist.h" +#include "util.h" /*! Create a list of items that are cross referenced with documentation blocks * @param listName String representing the name of the list. @@ -27,7 +29,8 @@ RefList::RefList(const char *listName, const char *pageTitle, const char *secTitle ) -{ +{ + m_itemList = 0; m_dict = 0; m_dictIterator = 0; m_id = 0; @@ -37,10 +40,10 @@ RefList::RefList(const char *listName, } /*! Destroy the todo list. Currently not called! */ -RefList::~RefList() -{ - delete m_dictIterator; - delete m_dict; +RefList::~RefList() +{ + delete m_dictIterator; + delete m_dict; } /*! Adds a new item to the list. @@ -50,7 +53,7 @@ int RefList::addRefItem() { if (m_dict==0) { - m_dict = new QIntDict(1009); + m_dict = new QIntDict(1009); m_dict->setAutoDelete(TRUE); m_dictIterator = new QIntDictIterator(*m_dict); } @@ -69,7 +72,7 @@ RefItem *RefList::getRefItem(int itemId) return m_dict ? m_dict->find(itemId) : 0; } -/*! Returns the first item in the dictionary or 0 if +/*! Returns the first item in the dictionary or 0 if * non is available. * Items are not sorted. */ @@ -103,3 +106,56 @@ QCString RefList::sectionTitle() const return m_secTitle; } +void RefList::insertIntoList(const char *key,RefItem *item) +{ + if (m_itemList==0) + { + m_itemList = new SortedRefItems(1009); + } + RefItem *ri = m_itemList->find(key); + if (ri==0) + { + m_itemList->append(key,item); + } + else // item already added to the list (i.e. multiple item for the same + // entity) + { + if (ri!=item) + { + ri->extraItems.append(item); + } + } +} + +void RefList::generatePage() +{ + if (m_itemList==0) return; + m_itemList->sort(); + SDict::Iterator it(*m_itemList); + RefItem *item; + for (it.toFirst();(item=it.current());++it) + { + QCString doc; + doc = "\\anchor "; + doc += item->listAnchor; + doc += "
"; + doc += item->prefix; + doc += " \\_internalref "; + doc += item->name; + doc += " \""; + doc += item->title; + doc += "\""; + if (!item->args.isEmpty()) doc += item->args; + doc += "
\n
"; + doc += item->text; + QListIterator li(item->extraItems); + RefItem *extraItem; + for (li.toFirst();(extraItem=li.current());++li) + { + doc += "

" + extraItem->text; + } + doc += "

\n"; + addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0); + } +} + diff --git a/src/reflist.h b/src/reflist.h index f9ba9ea..8c71869 100644 --- a/src/reflist.h +++ b/src/reflist.h @@ -21,15 +21,36 @@ #include "qtbc.h" #include -//#include "outputgen.h" +#include +#include "sortdict.h" /*! This struct represents an item in the list of references. */ struct RefItem { - RefItem() : written(FALSE) {} + RefItem() /*: written(FALSE)*/ {} QCString text; //!< text of the item. QCString listAnchor; //!< anchor in the list - bool written; + + QCString prefix; //!< type prefix for the name + QCString name; //!< name of the entity containing the reference + QCString title; //!< display name of the entity + QCString args; //!< optional arguments for the entity (if function) + //bool written; + QList extraItems; //!< more items belonging to the same entity +}; + +/*! List of items sorted by title */ +class SortedRefItems : public SDict +{ + public: + SortedRefItems(int size=17) : SDict(size) {} + virtual ~SortedRefItems() {} + int compareItems(GCI item1,GCI item2) + { + RefItem *r1 = (RefItem*)item1; + RefItem *r2 = (RefItem*)item2; + return stricmp(r1->title,r2->title); + } }; /*! @brief List of cross-referenced items @@ -57,12 +78,15 @@ class RefList const char *pageTitle,const char *secTitle ); ~RefList(); + void insertIntoList(const char *key,RefItem *item); + void generatePage(); private: int m_id; QCString m_listName; QCString m_pageTitle; QCString m_secTitle; + SortedRefItems *m_itemList; QIntDict *m_dict; QIntDictIterator *m_dictIterator; }; diff --git a/src/search.css b/src/search.css index 0ef06d9..d263b97 100644 --- a/src/search.css +++ b/src/search.css @@ -1,6 +1,6 @@ /*---------------- Search Box */ -#MSearchBox { +#MSearchBox { padding: 0px; margin: 0px; border: none; @@ -18,24 +18,14 @@ background-color: #FFFFFF; font-style: normal; cursor: text; - padding: 0px 1px; + padding: 1px 1px; margin: 0px 6px 0px 0px; border: none; outline: none; vertical-align: middle; } -#MSearchBox.MSearchBoxInactive:hover #MSearchField { - background-color: #FFFFFF; - padding: 0px 1px; - margin: 0px 6px 0px 0px; - border: none; -} .MSearchBoxActive #MSearchField { - background-color: #FFFFFF; color: #000000; - padding: 0px 1px; - margin: 0px 6px 0px 0px; - border: none; } #MSearchSelect { float : none; diff --git a/src/search_css.h b/src/search_css.h index 65ffed2..6282236 100644 --- a/src/search_css.h +++ b/src/search_css.h @@ -1,6 +1,6 @@ "/*---------------- Search Box */\n" "\n" -"#MSearchBox { \n" +"#MSearchBox {\n" " padding: 0px;\n" " margin: 0px;\n" " border: none;\n" @@ -18,24 +18,14 @@ " background-color: #FFFFFF;\n" " font-style: normal;\n" " cursor: text;\n" -" padding: 0px 1px;\n" +" padding: 1px 1px;\n" " margin: 0px 6px 0px 0px;\n" " border: none;\n" " outline: none;\n" " vertical-align: middle;\n" "}\n" -"#MSearchBox.MSearchBoxInactive:hover #MSearchField {\n" -" background-color: #FFFFFF;\n" -" padding: 0px 1px;\n" -" margin: 0px 6px 0px 0px;\n" -" border: none;\n" -"}\n" ".MSearchBoxActive #MSearchField {\n" -" background-color: #FFFFFF;\n" " color: #000000;\n" -" padding: 0px 1px;\n" -" margin: 0px 6px 0px 0px;\n" -" border: none;\n" "}\n" "#MSearchSelect {\n" " float : none;\n" diff --git a/src/translator_kr.h b/src/translator_kr.h index dbc72e8..8cc1d23 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -50,7 +50,7 @@ Translator class (by the local maintainer) when the localized translator is made up-to-date again. */ -class TranslatorKorean : public TranslatorAdapter_1_6_0 +class TranslatorKorean : public Translator { protected: friend class TranslatorAdapterBase; @@ -1794,6 +1794,40 @@ class TranslatorKorean : public TranslatorAdapter_1_6_0 return "ŸÀÔ ÇÑÁ¤ÀÚµé"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return QCString(name)+" °ü°è"; + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "·ÎµùÁß..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Àü¿ª À̸§°ø°£"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "°Ë»öÁß..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "ÀÏÄ¡ÇÏ´Â°Í ¾øÀ½"; + } + }; #endif diff --git a/src/util.cpp b/src/util.cpp index d349b8d..b823d50 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -5822,8 +5822,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle, //---------------------------------------------------------------------------- void addRefItem(const QList *sli, - const char *prefix, - const char *name,const char *title,const char *args) + const char *prefix, const char *name,const char *title,const char *args) { //printf("addRefItem(sli=%p,prefix=%s,name=%s,title=%s,args=%s)\n",sli,prefix,name,title,args); if (sli) @@ -5833,22 +5832,35 @@ void addRefItem(const QList *sli, for (slii.toFirst();(lii=slii.current());++slii) { RefList *refList = Doxygen::xrefLists->find(lii->type); - if (refList && + if (refList +#if 0 + && ( // either not a built-in list or the list is enabled - (lii->type!="todo" || Config_getBool("GENERATE_TODOLIST")) && - (lii->type!="test" || Config_getBool("GENERATE_TESTLIST")) && - (lii->type!="bug" || Config_getBool("GENERATE_BUGLIST")) && + (lii->type!="todo" || Config_getBool("GENERATE_TODOLIST")) && + (lii->type!="test" || Config_getBool("GENERATE_TESTLIST")) && + (lii->type!="bug" || Config_getBool("GENERATE_BUGLIST")) && (lii->type!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST")) - ) + ) +#endif ) { RefItem *item = refList->getRefItem(lii->itemId); ASSERT(item!=0); - printf("anchor=%s written=%d\n",item->listAnchor.data(),item->written); + + item->prefix = prefix; + item->name = name; + item->title = title; + item->args = args; + + refList->insertIntoList(title,item); + +#if 0 + + //printf("anchor=%s written=%d\n",item->listAnchor.data(),item->written); //if (item->written) return; - QCString doc(1000); + QCString doc; doc = "\\anchor "; doc += item->listAnchor; doc += "
"; @@ -5864,6 +5876,7 @@ void addRefItem(const QList *sli, doc += "
\n"; addRelatedPage(refList->listName(),refList->pageTitle(),doc,0,refList->listName(),1,0,0,0); //item->written=TRUE; +#endif } } } diff --git a/src/vhdlcode.l b/src/vhdlcode.l index 42e657d..c5df9f0 100644 --- a/src/vhdlcode.l +++ b/src/vhdlcode.l @@ -337,7 +337,7 @@ static void writeWord(const char *word,const char* curr_class=0,bool classLink=F static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE) { if (text==0) return; - printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text); + //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text); const char *p=text,*sp=p; char c; bool done=FALSE; -- cgit v0.12