diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/commentscan.l | 3 | ||||
-rw-r--r-- | src/config.xml | 8 | ||||
-rw-r--r-- | src/configoptions.cpp | 12 | ||||
-rw-r--r-- | src/dbusxmlscanner.cpp | 17 | ||||
-rw-r--r-- | src/dirdef.cpp | 10 | ||||
-rw-r--r-- | src/doctokenizer.l | 2 | ||||
-rw-r--r-- | src/doxygen.cpp | 4 | ||||
-rw-r--r-- | src/ftvhelp.cpp | 2 | ||||
-rw-r--r-- | src/htmlgen.cpp | 2 | ||||
-rw-r--r-- | src/index.cpp | 42 | ||||
-rw-r--r-- | src/membergroup.cpp | 61 | ||||
-rw-r--r-- | src/membergroup.h | 9 | ||||
-rw-r--r-- | src/pre.l | 101 | ||||
-rw-r--r-- | src/translator_cz.h | 60 | ||||
-rw-r--r-- | src/translator_za.h | 226 | ||||
-rw-r--r-- | src/util.cpp | 3 | ||||
-rw-r--r-- | src/vhdlcode.l | 2 |
17 files changed, 480 insertions, 84 deletions
diff --git a/src/commentscan.l b/src/commentscan.l index 88f4008..d7d064d 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -1021,7 +1021,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" <Comment>^{B}*"."{B}*/\n { // explicit end autolist: e.g " ." addOutput(yytext); } -<Comment>"."[a-z_A-Z0-9] { // . at start or in the middle of a word +<Comment>("."+)[a-z_A-Z0-9] { // . at start or in the middle of a word, or ellipsis addOutput(yytext); } <Comment>".\\"[ \t] { // . with escaped space. @@ -2626,6 +2626,7 @@ static void groupAddDocs(Entry *e,const char *fileName) { info->doc = g_memberGroupDocs; info->docFile = fileName; + info->setRefItems(e->sli); } e->doc.resize(0); e->brief.resize(0); diff --git a/src/config.xml b/src/config.xml index aa09dcb..a2cb0af 100644 --- a/src/config.xml +++ b/src/config.xml @@ -449,6 +449,11 @@ The appearance of the initializer of individual variables and defines in the documentation can be controlled using \showinitializer or \hideinitializer command in the documentation regardless of this setting. ' minval='0' maxval='10000' defval='30'/> + <option type='bool' id='SHOW_USED_FILES' docs=' +Set the SHOW_USED_FILES tag to NO to disable the list of files generated +at the bottom of the documentation of classes and structs. If set to YES the +list will mention the files that were used to generate the documentation. +' defval='1'/> <option type='bool' id='SHOW_DIRECTORIES' docs=' If the sources in your project are distributed over multiple directories then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy @@ -884,7 +889,7 @@ that doxygen will group on one line in the generated HTML documentation. <option type='bool' id='GENERATE_TREEVIEW' defval='0' docs=' The GENERATE_TREEVIEW tag is used to specify whether a tree-like index structure should be generated to display hierarchical information. -If the tag value is set to FRAME, a side panel will be generated +If the tag value is set to YES, a side panel will be generated containing a tree-like index structure (just like the one that is generated for HTML Help). For this to work a browser that supports JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). @@ -1374,7 +1379,6 @@ If the DOT_CLEANUP tag is set to YES (the default) Doxygen will remove the intermediate dot files that are used to generate the various graphs. ' defval='1' depends='HAVE_DOT'/> - <option type='obsolete' id='SHOW_USED_FILES'/> <option type='obsolete' id='USE_WINDOWS_ENCODING'/> <option type='obsolete' id='DETAILS_AT_TOP'/> <option type='obsolete' id='QTHELP_FILE'/> diff --git a/src/configoptions.cpp b/src/configoptions.cpp index 9d9c489..2aad2bc 100644 --- a/src/configoptions.cpp +++ b/src/configoptions.cpp @@ -636,6 +636,14 @@ void addConfigOptions(Config *cfg) ); //---- cb = cfg->addBool( + "SHOW_USED_FILES", + "Set the SHOW_USED_FILES tag to NO to disable the list of files generated\n" + "at the bottom of the documentation of classes and structs. If set to YES the\n" + "list will mention the files that were used to generate the documentation.", + TRUE + ); + //---- + cb = cfg->addBool( "SHOW_DIRECTORIES", "If the sources in your project are distributed over multiple directories\n" "then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy\n" @@ -1293,7 +1301,7 @@ void addConfigOptions(Config *cfg) "GENERATE_TREEVIEW", "The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n" "structure should be generated to display hierarchical information.\n" - "If the tag value is set to FRAME, a side panel will be generated\n" + "If the tag value is set to YES, a side panel will be generated\n" "containing a tree-like index structure (just like the one that\n" "is generated for HTML Help). For this to work a browser that supports\n" "JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).\n" @@ -2089,8 +2097,6 @@ void addConfigOptions(Config *cfg) ); cb->addDependency("HAVE_DOT"); //---- - cfg->addObsolete("SHOW_USED_FILES"); - //---- cfg->addObsolete("USE_WINDOWS_ENCODING"); //---- cfg->addObsolete("DETAILS_AT_TOP"); diff --git a/src/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp index 8a07d81..514039f 100644 --- a/src/dbusxmlscanner.cpp +++ b/src/dbusxmlscanner.cpp @@ -354,6 +354,7 @@ public: // Interface: if (DBUS("interface")) { + CONDITION(m_currentInterface, "end of interface found without start."); m_currentInterface->endBodyLine = lineNumber(); closeScopes(); m_currentInterface = 0; @@ -361,6 +362,8 @@ public: if (DBUS("method") || DBUS("signal")) { + CONDITION(m_currentMethod, "end of method found without start."); + CONDITION(m_currentInterface, "end of method found outside interface."); m_currentMethod->endBodyLine = lineNumber(); m_currentInterface->addSubEntry(m_currentMethod); m_currentMethod = 0; @@ -368,6 +371,8 @@ public: if (DBUS("property")) { + CONDITION(m_currentMethod, "end of property found without start."); + CONDITION(m_currentInterface, "end of property found outside interface."); m_currentProperty->endBodyLine = lineNumber(); m_currentInterface->addSubEntry(m_currentProperty); m_currentProperty = 0; @@ -375,6 +380,7 @@ public: if (DBUS("arg")) { + CONDITION(m_currentMethod, "end of arg found outside method."); m_currentMethod->argList->append(m_currentArgument); m_currentArgument = 0; } @@ -382,6 +388,7 @@ public: if (EXTENSION("namespace")) { Entry * current = m_namespaceStack.last(); + CONDITION(current, "end of namespace without start."); m_namespaceStack.removeLast(); current->endBodyLine = lineNumber(); @@ -391,6 +398,7 @@ public: if (EXTENSION("struct")) { StructData * data = m_structStack.last(); + CONDITION(data, "end of struct without start."); data->entry->endBodyLine = lineNumber(); @@ -408,11 +416,14 @@ public: if (EXTENSION("member")) { - m_structStack.last()->entry->addSubEntry(m_currentEntry); + StructData * data = m_structStack.last(); + CONDITION(data, "end of struct without start"); + data->entry->addSubEntry(m_currentEntry); } if (EXTENSION("enum") || EXTENSION("flagset")) { + CONDITION(m_currentEnum, "end of enum without start"); m_currentEnum->endBodyLine = lineNumber(); closeScopes(); @@ -421,6 +432,7 @@ public: if (EXTENSION("value")) { + CONDITION(m_currentEntry, "end of value without start"); m_currentEntry->endBodyLine = lineNumber(); m_currentEnum->addSubEntry(m_currentEntry); @@ -847,7 +859,8 @@ void DBusXMLScanner::parseInput(const char * fileName, reader.parse(inputSource); if (handler.errorString()) - { err("ERROR parsing XML: %s\n", handler.errorString().utf8().data()); } + { err("DBus XML Parser: Error at line %d: %s\n", + handler.locator()->lineNumber(),handler.errorString().utf8().data()); } groupLeaveFile(fileName, 1); } diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 6a0c12d..56f713c 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -702,10 +702,12 @@ void DirRelation::writeDocumentation(OutputList &ol) ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - QCString shortTitle=m_src->shortName()+" → "+ - m_dst->dir()->shortName()+" Relation";//theTranslator->trDirRelation(m_shortName); - QCString title=m_src->displayName()+" -> "+ - m_dst->dir()->shortName()+" Relation";//theTranslator->trDirRelation(m_dispName); + QCString shortTitle=theTranslator->trDirRelation( + m_src->shortName()+" → "+ + m_dst->dir()->shortName()); + QCString title=theTranslator->trDirRelation( + m_src->displayName()+" -> "+ + m_dst->dir()->shortName()); startFile(ol,getOutputFileBase(),getOutputFileBase(),title); // write navigation path diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 399371e..cc9fbad 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -725,7 +725,7 @@ REFWORD ("#"|"::")?({ID}{TEMPLPART}?("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCA unput(' '); return 0; } -<St_Ref>{WS}+"\"" { // white space following by quoted string +<St_Ref>{WS}+"\""{WS}* { // white space following by quoted string BEGIN(St_Ref2); } <St_Ref>\n { // new line diff --git a/src/doxygen.cpp b/src/doxygen.cpp index d256e8f..f53a291 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -6330,6 +6330,7 @@ static void findEnums(EntryNav *rootNav) md->setMemberGroupId(root->mGrpId); md->enableCallGraph(root->callGraph); md->enableCallerGraph(root->callerGraph); + //printf("%s::setRefItems(%d)\n",md->name().data(),root->sli?root->sli->count():-1); md->setRefItems(root->sli); //printf("found enum %s nd=%p\n",name.data(),nd); bool defSet=FALSE; @@ -6755,8 +6756,9 @@ static void findEnumDocumentation(EntryNav *rootNav) { md->setMemberGroupId(root->mGrpId); } - + md->addSectionsToDefinition(root->anchors); + md->setRefItems(root->sli); GroupDef *gd=md->getGroupDef(); if (gd==0 &&root->groups->first()!=0) // member not grouped but out-of-line documentation is diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index 17b4466..c1fcf54 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -590,7 +590,7 @@ void FTVHelp::generateTreeView(QString* OutString) //t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\">\n"; t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n"; t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n"; - t << "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"/>\n"; + t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"; t << "<title>"; if (Config_getString("PROJECT_NAME").isEmpty()) { diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 66d3ea4..fbea282 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -672,7 +672,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title, // t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"; t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n" - "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\"/>\n" + "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n" "<title>"; t << convertToHtml(title); t << "</title>\n"; diff --git a/src/index.cpp b/src/index.cpp index 39171a2..6646075 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -2523,6 +2523,7 @@ void writeSearchIndex() t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"" " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" << endl; t << "<html><head><title></title>" << endl; + t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>" << endl; t << "<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>" << endl; t << "<script type=\"text/javascript\" src=\"search.js\"></script>" << endl; t << "</head>" << endl; @@ -2552,17 +2553,30 @@ void writeSearchIndex() << "return searchResults.Nav(event," << itemCount << ")\" " << "onkeyup=\"" << "return searchResults.Nav(event," << itemCount << ")\" " - << "class=\"SRSymbol\" href=\"../" - << d->getOutputFileBase() << Doxygen::htmlFileExtension; + << "class=\"SRSymbol\" "; + if (!d->getReference().isEmpty()) + { + QCString *dest; + t << "doxygen=\"" << d->getReference() << ":../"; + if ((dest=Doxygen::tagDestinationDict[d->getReference()])) t << *dest << "/"; + t << "\" "; + t << "href=\"../"; + if ((dest=Doxygen::tagDestinationDict[d->getReference()])) t << *dest << "/"; + } + else + { + t << "href=\"../"; + } + t << d->getOutputFileBase() << Doxygen::htmlFileExtension; if (isMemberDef) { t << "#" << ((MemberDef *)d)->anchor(); } t << "\" target=\""; if (treeView) t << "basefrm"; else t << "_parent"; - t << "\">" - << convertToXML(d->localName()) - << "</a>" << endl; + t << "\">"; + t << convertToXML(d->localName()); + t << "</a>" << endl; if (d->getOuterScope()!=Doxygen::globalScope) { t << " <span class=\"SRScope\">" @@ -2622,8 +2636,21 @@ void writeSearchIndex() << "onkeyup=\"" << "return searchResults.NavChild(event," << itemCount << "," << childCount << ")\" " - << "class=\"SRScope\" href=\"../" << - d->getOutputFileBase() << Doxygen::htmlFileExtension; + << "class=\"SRScope\" "; + if (!d->getReference().isEmpty()) + { + QCString *dest; + t << "doxygen=\"" << d->getReference() << ":../"; + if ((dest=Doxygen::tagDestinationDict[d->getReference()])) t << *dest << "/"; + t << "\" "; + t << "href=\"../"; + if ((dest=Doxygen::tagDestinationDict[d->getReference()])) t << *dest << "/"; + } + else + { + t << "href=\"../"; + } + t << d->getOutputFileBase() << Doxygen::htmlFileExtension; if (isMemberDef) { t << "#" << ((MemberDef *)d)->anchor(); @@ -2791,6 +2818,7 @@ void writeSearchIndex() t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" << endl; t << "<html><head><title></title>" << endl; + t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>" << endl; t << "<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>" << endl; t << "<script type=\"text/javascript\" src=\"search.js\"></script>" << endl; t << "</head>" << endl; diff --git a/src/membergroup.cpp b/src/membergroup.cpp index f20ae0f..a191354 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -28,6 +28,8 @@ #include "doxygen.h" #include "docparser.h" #include "marshal.h" +#include "entry.h" +#include "md5.h" //static QCString idToName(int id) //{ @@ -55,6 +57,8 @@ MemberGroup::MemberGroup(Definition *parent, m_numDocMembers = -1; m_parent = parent; m_docFile = docFile; + m_xrefListItems = 0; + doc.prepend("<a name=\""+anchor()+"\"></a>"); //printf("Member group docs=`%s'\n",doc.data()); } @@ -200,9 +204,9 @@ void MemberGroup::distributeMemberGroupDocumentation() } } -int MemberGroup::varCount() const -{ - return memberList->varCount(); +int MemberGroup::varCount() const +{ + return memberList->varCount(); } int MemberGroup::funcCount() const @@ -255,9 +259,23 @@ void MemberGroup::setInGroup(bool b) memberList->setInGroup(b); } +QCString MemberGroup::anchor() const +{ + uchar md5_sig[16]; + QCString sigStr(33); + MD5Buffer((const unsigned char *)grpHeader.data(),grpHeader.length(),md5_sig); + MD5SigToString(md5_sig,sigStr.data(),33); + return "amgrp"+sigStr; +} + void MemberGroup::addListReferences(Definition *def) { memberList->addListReferences(def); + if (m_xrefListItems && def) + { + addRefItem(m_xrefListItems,theTranslator->trGroup(TRUE,TRUE), + def->getOutputFileBase()+"#"+anchor(),grpHeader,0); + } } void MemberGroup::findSectionsInDocumentation() @@ -280,6 +298,7 @@ void MemberGroup::marshal(StorageIntf *s) marshalInt(s,m_numDocMembers); marshalObjPointer(s,m_parent); marshalQCString(s,m_docFile); + marshalItemInfoList (Doxygen::symbolStorage,m_xrefListItems); } void MemberGroup::unmarshal(StorageIntf *s) @@ -296,5 +315,41 @@ void MemberGroup::unmarshal(StorageIntf *s) m_numDocMembers = unmarshalInt(s); m_parent = (Definition *)unmarshalObjPointer(s); m_docFile = unmarshalQCString(s); + m_xrefListItems = unmarshalItemInfoList (Doxygen::symbolStorage); } +void MemberGroup::setRefItems(const QList<ListItemInfo> *sli) +{ + if (sli) + { + // deep copy the list + if (m_xrefListItems==0) + { + m_xrefListItems=new QList<ListItemInfo>; + m_xrefListItems->setAutoDelete(TRUE); + } + QListIterator<ListItemInfo> slii(*sli); + ListItemInfo *lii; + for (slii.toFirst();(lii=slii.current());++slii) + { + m_xrefListItems->append(new ListItemInfo(*lii)); + } + } +} +//-------------------------------------------------------------------------- + +void MemberGroupInfo::setRefItems(const QList<ListItemInfo> *sli) +{ + if (!sli) return; + if (m_sli==0) + { + m_sli = new QList<ListItemInfo>; + m_sli->setAutoDelete(TRUE); + } + QListIterator<ListItemInfo> slii(*sli); + ListItemInfo *ili; + for (slii.toFirst();(ili=slii.current());++slii) + { + m_sli->append(new ListItemInfo(*ili)); + } +} diff --git a/src/membergroup.h b/src/membergroup.h index e7bd457..ddef6fc 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -34,6 +34,7 @@ class GroupDef; class OutputList; class Definition; class StorageIntf; +struct ListItemInfo; class MemberGroup { @@ -74,8 +75,10 @@ class MemberGroup int numDocMembers() const; void setInGroup(bool b); void addListReferences(Definition *d); + void setRefItems(const QList<ListItemInfo> *sli); MemberList *members() const { return memberList; } Definition *parent() const { return m_parent; } + QCString anchor() const; void marshal(StorageIntf *s); void unmarshal(StorageIntf *s); @@ -93,6 +96,7 @@ class MemberGroup int m_numDocMembers; Definition *m_parent; QCString m_docFile; + QList<ListItemInfo> *m_xrefListItems; }; class MemberGroupList : public QList<MemberGroup> @@ -113,12 +117,17 @@ class MemberGroupSDict : public SIntDict<MemberGroup> ~MemberGroupSDict() {} }; + struct MemberGroupInfo { + MemberGroupInfo() : m_sli(0) {} + ~MemberGroupInfo() { delete m_sli; m_sli=0; } + void setRefItems(const QList<ListItemInfo> *sli); QCString header; QCString doc; QCString docFile; QCString compoundName; + QList<ListItemInfo> *m_sli; }; //class MemberGroupDict : public QIntDict<MemberGroup> @@ -179,26 +179,31 @@ static Define *isDefined(const char *name) static QDict<void> g_allIncludes(10009); -static FileState *checkAndOpenFile(const QCString &fileName) +static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyIncluded) { + alreadyIncluded = FALSE; FileState *fs = 0; - //printf("checkAndOpenFile(%s)\n",absName.data()); + //printf("checkAndOpenFile(%s)\n",fileName.data()); QFileInfo fi(fileName); if (fi.exists() && fi.isFile()) { QCString absName = convertToQCString(fi.absFilePath()); -#if 1 // global guard - if (g_allIncludes.find(absName)) return 0; // already done - g_allIncludes.insert(absName,(void *)0x8); + if (g_curlyCount==0) // not #include inside { ... } + { + if (g_allIncludes.find(absName)==0) + { + alreadyIncluded = TRUE; + //printf(" already included 1\n"); + return 0; // already done + } + g_allIncludes.insert(absName,(void *)0x8); + } // check include stack for absName -#endif -#if 0 // stack based recusive inclusion detection QStack<FileState> tmpStack; g_includeStack.setAutoDelete(FALSE); - bool alreadyIncluded=FALSE; while ((fs=g_includeStack.pop())) { if (fs->fileName==absName) alreadyIncluded=TRUE; @@ -210,37 +215,52 @@ static FileState *checkAndOpenFile(const QCString &fileName) } g_includeStack.setAutoDelete(TRUE); - if (alreadyIncluded) return 0; -#endif + if (alreadyIncluded) + { + //printf(" already included 2\n"); + return 0; + } //printf("#include %s\n",absName.data()); fs = new FileState; - + alreadyIncluded = FALSE; + QCString filterName = getFileFilter(absName); if (!filterName.isEmpty()) { fs->isPlainFile = FALSE; QCString cmd = filterName+" \""+absName+"\""; fs->filePtr=portable_popen(cmd,"r"); - if (!fs->filePtr) err("Error: could not execute filter %s\n",cmd.data()); + if (!fs->filePtr) + { + err("Error: could not execute filter %s, reason: %s\n",cmd.data(), + strerror(errno)); + } } else { fs->isPlainFile = TRUE; fs->filePtr=fopen(absName,"r"); - if (!fs->filePtr) err("Error: could not open file %s for reading\n",absName.data()); + if (!fs->filePtr) + { + err("Error: could not open file %s for reading, reason: %s \n", + absName.data(),strerror(errno)); + } } if (!fs->filePtr) // error -> cleanup { delete fs; fs=0; } - fs->oldYYin = preYYin; + else + { + fs->oldYYin = preYYin; + } } return fs; } -static FileState *findFile(const char *fileName,bool localInclude) +static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyIncluded) { //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data()); if (localInclude && !g_yyFileName.isEmpty()) @@ -249,13 +269,17 @@ static FileState *findFile(const char *fileName,bool localInclude) if (fi.exists()) { QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+fileName; - FileState *fs = checkAndOpenFile(absName); + FileState *fs = checkAndOpenFile(absName,alreadyIncluded); if (fs) { setFileName(absName); g_yyLineNr=1; return fs; } + else if (alreadyIncluded) + { + return 0; + } } } if (g_pathList==0) @@ -266,13 +290,17 @@ static FileState *findFile(const char *fileName,bool localInclude) while (s) { QCString absName = (QCString)s+"/"+fileName; - FileState *fs = checkAndOpenFile(absName); + FileState *fs = checkAndOpenFile(absName,alreadyIncluded); if (fs) { setFileName(absName); g_yyLineNr=1; return fs; } + else if (alreadyIncluded) + { + return 0; + } s=g_pathList->next(); } @@ -1081,10 +1109,10 @@ void addDefine() int l=g_defLitText.find('\n'); if (l>0 && g_defLitText.left(l).stripWhiteSpace()=="\\") { - // strip first line if it only contains a slash + // strip first line if it only contains a slash g_defLitText = g_defLitText.right(g_defLitText.length()-l-1); } - else if (l>0) + else if (l>0) { // align the items on the first line with the items on the second line int k=l+1; @@ -1094,7 +1122,7 @@ void addDefine() g_defLitText=g_defLitText.mid(l+1,k-l-1)+g_defLitText.stripWhiteSpace(); } md->setInitializer(g_defLitText.stripWhiteSpace()); - + md->setFileDef(g_inputFileDef); md->setDefinition("#define "+g_defName); @@ -1106,7 +1134,7 @@ void addDefine() } mn->append(md); if (g_yyFileDef) g_yyFileDef->insertMember(md); - + //Define *d; //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine()); } @@ -1114,7 +1142,7 @@ void addDefine() static inline void outputChar(char c) { if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c); -} +} static inline void outputArray(const char *a,int len) { @@ -1125,32 +1153,34 @@ static void readIncludeFile(const QCString &inc) { if (!Config_getBool("SEARCH_INCLUDES")) return; // do not read include files uint i=0; - + // find the start of the include file name while (i<inc.length() && (inc.at(i)==' ' || inc.at(i)=='"' || inc.at(i)=='<') ) i++; uint s=i; - + // was it a local include? bool localInclude = s>0 && inc.at(s-1)=='"'; - + // find the end of the include file name - while (i<inc.length() && inc.at(i)!='"' && inc.at(i)!='>') i++; + while (i<inc.length() && inc.at(i)!='"' && inc.at(i)!='>') i++; if (s<inc.length() && i>s) // valid include file name found { // extract include path+name - QCString incFileName=inc.mid(s,i-s).stripWhiteSpace(); + QCString incFileName=inc.mid(s,i-s).stripWhiteSpace(); QCString oldFileName = g_yyFileName.copy(); FileDef *oldFileDef = g_yyFileDef; int oldLineNr = g_yyLineNr; //printf("Searching for `%s'\n",incFileName.data()); - + // findFile will overwrite g_yyFileDef if found FileState *fs; - if ((fs=findFile(incFileName,localInclude))) // see if the include file can be found + bool alreadyIncluded = FALSE; + //printf("calling findFile(%s)\n",incFileName.data()); + if ((fs=findFile(incFileName,localInclude,alreadyIncluded))) // see if the include file can be found { //printf("Found include file!\n"); if (Debug::isFlagSet(Debug::Preprocessor)) @@ -1158,7 +1188,7 @@ static void readIncludeFile(const QCString &inc) for (i=0;i<g_includeStack.count();i++) msg(" "); msg("#include %s: parsing...\n",incFileName.data()); } - if (oldFileDef) + if (oldFileDef) { // add include dependency to the file in which the #include was found oldFileDef->addIncludeDependency(g_yyFileDef,incFileName,localInclude,g_isImported); @@ -1181,14 +1211,15 @@ static void readIncludeFile(const QCString &inc) QCString lineStr(g_yyFileName.length()+20); lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data()); outputArray(lineStr.data(),lineStr.length()); - + //fprintf(stderr,"Switching to include file %s\n",incFileName.data()); preYYin=fs->filePtr; yy_switch_to_buffer(yy_create_buffer(preYYin, YY_BUF_SIZE)); - } + } else { - if (oldFileDef) + //printf(" calling findFile(%s) alreadyInc=%d\n",incFileName.data(),alreadyIncluded); + if (oldFileDef) { bool ambig; FileDef *fd = findFileDef(Doxygen::inputNameDict,incFileName,ambig); @@ -1199,7 +1230,7 @@ static void readIncludeFile(const QCString &inc) if (fd) { //printf("Adding include dependency (2) %s->%s ambig=%d\n",oldFileDef->name().data(),fd->name().data(),ambig); - fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported); + fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported); } } if (Debug::isFlagSet(Debug::Preprocessor)) @@ -1207,7 +1238,7 @@ static void readIncludeFile(const QCString &inc) msg("#include %s: not found or already included! skipping...\n",incFileName.data()); //printf("Error: include file %s not found\n",yytext); } - if (g_curlyCount>0) // failed to find #include inside { ... } + if (g_curlyCount>0 && !alreadyIncluded) // failed to find #include inside { ... } { warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data()); } diff --git a/src/translator_cz.h b/src/translator_cz.h index cd02dac..daad247 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -20,6 +20,8 @@ // Updates: // -------- +// 2009/08/24 - +// 2008/06/09 - Corrections in trLegendDocs(). // 2007/11/13 - Update for "new since 1.5.4 (mainly for Fortran)". // 2007/03/20 - removing decode(), conversion of literals to UTF-8. // 2006/06/13 - translation of the trEnumerationValueDocumentation(). @@ -77,7 +79,7 @@ // something else. It is difficult to find the general translation // for all kinds in the Czech language. -class TranslatorCzech : public TranslatorAdapter_1_6_0 +class TranslatorCzech : public Translator { public: // --- Language control methods ------------------- @@ -1053,7 +1055,7 @@ class TranslatorCzech : public TranslatorAdapter_1_6_0 /*! page explaining how the dot graph's should be interpreted */ virtual QCString trLegendDocs() { - QCString result( + return "Zde naleznete vysvětlení, jak mají být interpretovány grafy, " "které byly generovány programem doxygen.<p>\n" "Uvažujte následující příklad:\n" @@ -1064,22 +1066,21 @@ class TranslatorCzech : public TranslatorAdapter_1_6_0 "/*! Třída, u které došlo k ořezání grafu. Vztah dědičnosti " "je skryt. */\n" "class Truncated : public Invisible { };\n\n" + "/* Třída, která není dokumentována komentáři programu doxygen. */\n" + "class Undocumented { };\n\n" "/*! Bázová třída děděná veřejně (public inheritance). */\n" "class PublicBase : public Truncated { };\n\n" + "/*! Šablona třídy. */\n" + "template<class T> class Templ { };\n\n" "/*! Bázová třída, použitá pro chráněné dědění " "(protected inheritance). */\n" "class ProtectedBase { };\n\n" "/*! Bázová třída, využitá pro privátní dědění " "(private inheritance). */\n" "class PrivateBase { };\n\n" - "/* Třída, která není dokumentována komentáři programu doxygen. */\n" - "class Undocumented { };\n\n" - "/*! Šablona třídy. */\n" - "template<class T> class Templ { };\n\n" "/*! Třída, která je využívána třídou Inherited. */\n" "class Used { };\n\n" - "/*! Odvozená třída, která různým způsobem dědí z více bázových " - "tříd. */\n" + "/*! Odvozená třída, která dědí z více tříd. */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -1090,13 +1091,12 @@ class TranslatorCzech : public TranslatorAdapter_1_6_0 " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Pokud je položka \\c MAX_DOT_GRAPH_HEIGHT konfiguračního souboru " - "nastavena na hodnotu 200, bude vygenerován následující graf:" + "K výše uvedenému bude vygenerován následující graf:" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p>\n" "Bloky (tj. uzly) v uvedeném grafu mají následující význam:\n" "<ul>\n" - "<li>Černě vyplněný obdélník reprezentuje strukturu nebo třídu, " + "<li>Šedě vyplněný obdélník reprezentuje strukturu nebo třídu, " "pro kterou byl graf generován.\n" "<li>Obdélník s černým obrysem označuje dokumentovanou " "strukturu nebo třídu.\n" @@ -1125,9 +1125,7 @@ class TranslatorCzech : public TranslatorAdapter_1_6_0 "a šablonou třídy, na základě které byla\n" "instance šablony vytvořena. V popisu šipky jsou uvedeny příslušné" " parametry šablony.\n" - "</ul>\n"); - - return result; + "</ul>\n"; } /*! text for the link to the legend page */ virtual QCString trLegend() @@ -1816,6 +1814,40 @@ class TranslatorCzech : public TranslatorAdapter_1_6_0 return "Omezení typů (Type Constraints)"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return "Relace "+QCString(name); + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "Načítám..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Globální prostor jmen"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "Vyhledávám..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "Nic se nenašlo"; + } + }; #endif // TRANSLATOR_CZ_H diff --git a/src/translator_za.h b/src/translator_za.h index 1e45be3..2a5f299 100644 --- a/src/translator_za.h +++ b/src/translator_za.h @@ -14,7 +14,7 @@ * input used in their production; they are not affected by this license. * */ - + /* * Bronne vir hierdie vertaling (Sources for this translation): * Die Stigting vir Afrikaans se rekenaartermelys: @@ -26,7 +26,7 @@ #ifndef TRANSLATOR_ZA_H #define TRANSLATOR_ZA_H -class TranslatorAfrikaans : public TranslatorAdapter_1_4_6 +class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 { public: @@ -1022,7 +1022,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_4_6 " protected ProtectedBase,\n" " private PrivateBase,\n" " public Ongedokumenteer,\n" - " public Templ<int>\n" + " public Templ<int>\n" "{\n" " private:\n" " Used *m_usedClass;\n" @@ -1260,7 +1260,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_4_6 { QCString result((first_capital ? "Bladsy" : "bladsy")); if (!singular) result+="e"; - return result; + return result; } /*! This is used for translation of the word that will possibly @@ -1268,12 +1268,12 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_4_6 * of the category. */ virtual QCString trMember(bool first_capital, bool singular) - { + { QCString result((first_capital ? "Lid" : "lid")); if (!singular) result = (first_capital ? "Lede" : "lede"); return result; } - + /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names * of the category. @@ -1548,8 +1548,220 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_4_6 "funksie in die argument(e) wat dit aanvaar."; } +////////////////////////////////////////////////////////////////////////// +// new since 1.4.6 +////////////////////////////////////////////////////////////////////////// + + /*! This is used to introduce a caller (or called-by) graph */ + virtual QCString trCallerGraph() + { + return "Hier is die roep skema vir die funksie:"; + } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration values + */ + virtual QCString trEnumerationValueDocumentation() + { return "Enumerator Dokumentasie"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Lede Funksie/Subroetine Dokumentasie"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Data Tipes Lys"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Data Velde"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Hier is die data tipes met kort beskrywings:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Hier is 'n lys van alle "; + if (!extractAll) + { + result+="gedokumenteerde "; + } + result+="data tipe lede"; + result+=" met skakels na "; + if (!extractAll) + { + result+="die data strukture dokumentasie vir elke lid"; + } + else + { + result+="die data tipes waaraan hulle behoort:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Data Tipe Indeks"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Data Tipe Dokumentasie"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Funksies/Subroetines"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Funksies/Subroetine Dokumentasie"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Data Tipes"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Modules Lys"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Hier is 'n lys van alle "; + if (!extractAll) result+="gedokumenteerde "; + result+="modules met kort beskrywings:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result=(QCString)clName; + switch(compType) + { + case ClassDef::Class: result+=" Module"; break; + case ClassDef::Struct: result+=" Tipe"; break; + case ClassDef::Union: result+=" Unie"; break; + case ClassDef::Interface: result+=" Interflak"; break; + case ClassDef::Protocol: result+=" Protokol"; break; + case ClassDef::Category: result+=" Kategorie"; break; + case ClassDef::Exception: result+=" Eksepsie"; break; + } + if (isTemplate) result+=" Template"; + result+=" Bron"; + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" Module Bron"; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Module Lede"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Hier is 'n lys van alle "; + if (!extractAll) result+="gedokumenteerde "; + result+="module lede met skakels na "; + if (extractAll) + { + result+="die module dokumentasie vir elke lid:"; + } + else + { + result+="die modules waaraan hulle behoort:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Modules Indeks"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Module" : "module")); + if (!singular) result+="s"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { + // single is true implies a single file + QCString result=(QCString)"The documentation for this "; + switch(compType) + { + case ClassDef::Class: result+="module"; break; + case ClassDef::Struct: result+="tipe"; break; + case ClassDef::Union: result+="unie"; break; + case ClassDef::Interface: result+="Interflak"; break; + case ClassDef::Protocol: result+="protokcol"; break; + case ClassDef::Category: result+="kategorie"; break; + case ClassDef::Exception: result+="eksepsie"; break; + } + result+=" is gegenereer vanaf die foldende leer"; + if (single) result+=":"; else result+="s:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "Tipe" : "tipe")); + if (!singular) result+="s"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Subprogram" : "subprogram")); + if (!singular) result+="me"; + return result; + } + + /*! C# Type Constraint list */ + virtual QCString trTypeConstraints() + { + return "Tipe Limiete"; + } }; #endif - diff --git a/src/util.cpp b/src/util.cpp index d6440d3..c164c2d 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -5399,6 +5399,7 @@ void addMembersToMemberGroup(MemberList *ml, } md = ml->take(index); // remove from member list mg->insertMember(md); // insert in member group + mg->setRefItems(info->m_sli); md->setMemberGroup(mg); continue; } @@ -6502,7 +6503,7 @@ void initDefaultExtensionMapping() updateLanguageMapping(".f90", "fortran"); updateLanguageMapping(".vhd", "vhdl"); updateLanguageMapping(".vhdl", "vhdl"); - updateLanguageMapping(".xml", "dbusxml"); + //updateLanguageMapping(".xml", "dbusxml"); } SrcLangExt getLanguageFromFileName(const QCString fileName) diff --git a/src/vhdlcode.l b/src/vhdlcode.l index c5df9f0..57d5eaf 100644 --- a/src/vhdlcode.l +++ b/src/vhdlcode.l @@ -579,7 +579,7 @@ static void startFontClass(const char *s) static void writeFont(const char *s,const char* text) { if (s==0 || text==0) return; - printf("writeFont(%d,\"%s\")\n",g_yyLineNr,text); + //printf("writeFont(%d,\"%s\")\n",g_yyLineNr,text); g_code->startFontClass(s); g_code->codify(text); g_code->endFontClass(); |