diff options
author | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2000-11-19 15:15:27 (GMT) |
---|---|---|
committer | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2000-11-19 15:15:27 (GMT) |
commit | f769c300f488c8ab450622701dcebee19e2dc332 (patch) | |
tree | 73fb7f0440c64c3b3ce21bfc475058ffb46a5bfc | |
parent | dd4999a16d69ec0784e2e2bd43f22fbaf4451f1f (diff) | |
download | Doxygen-f769c300f488c8ab450622701dcebee19e2dc332.zip Doxygen-f769c300f488c8ab450622701dcebee19e2dc332.tar.gz Doxygen-f769c300f488c8ab450622701dcebee19e2dc332.tar.bz2 |
Release-1.2.3-20001119
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | addon/configgen/configgen.cpp | 5 | ||||
-rw-r--r-- | doc/config.doc | 2 | ||||
-rw-r--r-- | packages/rpm/doxygen.spec | 2 | ||||
-rw-r--r-- | src/classdef.cpp | 6 | ||||
-rw-r--r-- | src/code.l | 127 | ||||
-rw-r--r-- | src/diagram.cpp | 1 | ||||
-rw-r--r-- | src/doxygen.cpp | 80 | ||||
-rw-r--r-- | src/filedef.cpp | 5 | ||||
-rw-r--r-- | src/groupdef.cpp | 1 | ||||
-rw-r--r-- | src/latexgen.cpp | 8 | ||||
-rw-r--r-- | src/memberdef.cpp | 27 | ||||
-rw-r--r-- | src/membergroup.cpp | 12 | ||||
-rw-r--r-- | src/namespacedef.cpp | 6 | ||||
-rw-r--r-- | src/pre.l | 24 | ||||
-rw-r--r-- | src/scanner.l | 7 | ||||
-rw-r--r-- | src/translator_it.h | 76 | ||||
-rw-r--r-- | src/translator_ru.h | 25 |
20 files changed, 311 insertions, 113 deletions
@@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.3-20001106 +DOXYGEN Version 1.2.3-20001118 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (06 November 2000) +Dimitri van Heesch (18 November 2000) @@ -1,4 +1,4 @@ -DOXYGEN Version 1.2.3-20001106 +DOXYGEN Version 1.2.3-20001118 Please read INSTALL for compilation instructions. @@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at Enjoy, -Dimitri van Heesch (06 November 2000) +Dimitri van Heesch (18 November 2000) @@ -1 +1 @@ -1.2.3-20001106 +1.2.3-20001118 diff --git a/addon/configgen/configgen.cpp b/addon/configgen/configgen.cpp index 95aab45..b9ec8f2 100644 --- a/addon/configgen/configgen.cpp +++ b/addon/configgen/configgen.cpp @@ -713,6 +713,11 @@ int main(int argc,char * argv[]) while (!ctfile.atEnd()) { ctfile.readLine(buf,maxLineLen-1); + if (buf[l-2]--'\r') // remove the \r for the folks using Windows + { + buf[l-2]='\n'; + buf[l-1]='\r'; + } if (QCString("#CONFIG Config\n" )==buf) FORALL(printConfig(t)) else if (QCString("#CONFIG Static\n" )==buf) FORALL(printStatic(t)) else if (QCString("#CONFIG Rules\n" )==buf) FORALL(printRules(t)) diff --git a/doc/config.doc b/doc/config.doc index 231cbe9..8debf84 100644 --- a/doc/config.doc +++ b/doc/config.doc @@ -407,7 +407,7 @@ followed by the descriptions of the tags grouped by category. \anchor cfg_enabled_sections <dt>\c ENABLED_SECTIONS <dd> \addindex ENABLED_SECTIONS - The \c ENABLE_SECTIONS tag can be used to enable conditional + The \c ENABLED_SECTIONS tag can be used to enable conditional documentation sections, marked by \ref cmdif "\\if" \<section-label\> ... \ref cmdendif "\\endif" blocks. diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index 2f88793..686ca25 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ Name: doxygen -Version: 1.2.3-20001106 +Version: 1.2.3-20001118 Summary: documentation system for C, C++ and IDL Release: 1 Source0: doxygen-%{version}.src.tar.gz diff --git a/src/classdef.cpp b/src/classdef.cpp index 49846b6..227f18e 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -973,9 +973,13 @@ void ClassDef::writeDocumentation(OutputList &ol) } // repeat brief description - if (!briefDescription().isEmpty()) + if (!briefDescription().isEmpty() && Config::repeatBriefFlag) { ol+=briefOutput; + } + if (!briefDescription().isEmpty() && Config::repeatBriefFlag && + !documentation().isEmpty()) + { ol.newParagraph(); } // write documentation @@ -36,6 +36,9 @@ #define YY_NEVER_INTERACTIVE 1 +#define SCOPEBLOCK (void *)1 +#define INNERBLOCK (void *)2 + /*! local class definition, used for classes that are defined * inside code fragments. */ @@ -104,6 +107,8 @@ static QCString g_parmType; static QCString g_parmName; static bool g_inClass; static QCString g_classScope; +static QCString g_realScope; +static QStack<void> g_scopeStack; // 1 if bracket starts a scope, 2 for internal blocks static OutputList * g_code; static CodeClassDef g_ccd; static CodeVarDef g_cvd; @@ -123,6 +128,60 @@ static ClassDef * g_classVar; static QCString g_saveName; static QCString g_saveType; +/*! add class/namespace name s to the scope */ +static void pushScope(const char *s) +{ + if (g_classScope.isEmpty()) + { + g_classScope = s; + } + else + { + g_classScope += "::"; + g_classScope += s; + } + //printf("pushScope() result: `%s'\n",g_classScope.data()); +} + +/*! remove the top class/namespace name from the scope */ +static void popScope() +{ + if (!g_classScope.isEmpty()) + { + int i=g_classScope.findRev("::"); + if (i==-1) // last name, strip all + { + g_classScope.resize(0); + } + else // strip name + { + g_classScope = g_classScope.left(i); + } + } + else + { + //err("Error: Too many end of scopes found!\n"); + } + //printf("popScope() result: `%s'\n",g_classScope.data()); +} + +static void setClassScope(const QCString &name) +{ + //printf("setClassScope(%s)\n",name.data()); + QCString n=name; + n=n.simplifyWhiteSpace(); + int ts=n.find('<'); // start of template + int te=n.findRev('>'); // end of template + //printf("ts=%d te=%d\n",ts,te); + if (ts!=-1 && te!=-1 && te>ts) + { + // remove template from scope + n=n.left(ts)+n.right(n.length()-te-1); + } + g_classScope = n; + //printf("--->New class scope `%s'\n",g_classScope.data()); +} + /*! start a new line of code, inserting a line number if g_sourceFileDef * is TRUE. If a definition starts at the current line, then the line * number is linked to the documentation of that definition. @@ -144,6 +203,8 @@ static void startCodeLine() QCString anchor; g_insideBody = FALSE; g_searchingForBody = TRUE; + g_realScope = d->name().copy(); + //printf("Real scope: `%s'\n",g_realScope.data()); g_bodyCurlyCount = 0; if (g_currentMemberDef) anchor=g_currentMemberDef->anchor(); g_code->startCodeAnchor(lineAnchor); @@ -256,27 +317,6 @@ static void addParmType() g_parmName.resize(0) ; } -static void setClassScope(const QCString &name) -{ - //printf("setClassScope(%s)\n",name.data()); - QCString n=name; - n=n.simplifyWhiteSpace(); - int ts=n.find('<'); // start of template - int te=n.findRev('>'); // end of template - //printf("ts=%d te=%d\n",ts,te); - if (ts!=-1 && te!=-1 && te>ts) - { - // remove template from scope - n=n.left(ts)+n.right(n.length()-te-1); - } - int index; - if ((index=n.findRev("::"))!=-1) - g_classScope=n.left(index); - else - g_classScope.resize(0); - //printf("--->New class scope `%s'\n",g_classScope.data()); -} - static void addVariable() { g_cvd.name=g_name.copy().simplifyWhiteSpace(); @@ -698,6 +738,9 @@ static void startFontClass(const char *s) g_currentFontClass=s; } + + + /* ----------------------------------------------------------------- */ #undef YY_INPUT @@ -753,7 +796,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" g_code->codify(yytext); BEGIN( ReadInclude ); } -<Body>("class"|"struct"|"union")[ \t\n]+ { +<Body>("class"|"struct"|"union"|"namespace")[ \t\n]+ { startFontClass("keyword"); codifyLines(yytext); endFontClass(); @@ -801,6 +844,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" g_code->codify(yytext); } <Body>"{" { + g_scopeStack.push(INNERBLOCK); if (g_searchingForBody) { g_searchingForBody=FALSE; @@ -813,11 +857,12 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" g_name.resize(0); } <Body>"}" { + if (g_scopeStack.pop()==SCOPEBLOCK) popScope(); g_code->codify(yytext); g_inClass=FALSE; if (--g_curlyCount<=0) { - g_classScope.resize(0); + //g_classScope.resize(0); g_codeParmList.clear(); } if (--g_bodyCurlyCount<=0) @@ -855,12 +900,18 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" if (g_insideBody) g_bodyCurlyCount++; if (!g_ccd.name.isEmpty()) { - g_classScope=g_ccd.name.copy(); + g_scopeStack.push(SCOPEBLOCK); + pushScope(g_ccd.name); + //g_classScope=g_ccd.name.copy(); CodeClassDef *cd=new CodeClassDef(g_ccd); g_codeClassList.append(cd); g_codeClassDict.insert(cd->name,cd); //printf("g_codeClassList.count()=%d\n",g_codeClassList.count()); } + else + { + g_scopeStack.push((void *)2); + } BEGIN( Body ); } <Bases>"virtual"|"public"|"protected"|"private" { @@ -951,13 +1002,6 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" g_code->codify(yytext); g_name.resize(0);g_type.resize(0); } - /* -<Body>([a-z_A-Z~][a-z_A-Z0-9]*)/([ \t]*) { - generateClassLink(*g_code,yytext); - addType(); - name+=yytext; - } - */ <Body>{TYPEKW}/{B}* { startFontClass("keywordtype"); g_code->codify(yytext); @@ -1159,7 +1203,15 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" <MemberCall2,FuncCall>")"({BN}"const"|"volatile")*{BN}*"{" { addParameter(); g_parmType.resize(0);g_parmName.resize(0); - if (g_name.find("::")!=-1) setClassScope(g_name); + if (g_name.find("::")!=-1) + { + g_scopeStack.push(SCOPEBLOCK); + setClassScope(g_realScope); + } + else + { + g_scopeStack.push(INNERBLOCK); + } g_code->codify(")"); startFontClass("keyword"); yytext[yyleng-1]='\0'; @@ -1190,7 +1242,15 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" g_insideBody=TRUE; } if (g_insideBody) g_bodyCurlyCount++; - if (g_name.find("::")!=-1) setClassScope(g_name); + if (g_name.find("::")!=-1) + { + g_scopeStack.push(SCOPEBLOCK); + setClassScope(g_realScope); + } + else + { + g_scopeStack.push(INNERBLOCK); + } g_type.resize(0); g_name.resize(0); BEGIN( Body ); } @@ -1520,6 +1580,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s, g_sharpCount = 0; g_insideTemplate = FALSE; g_classVar = 0; + g_scopeStack.clear(); g_classScope = className; g_exampleBlock = exBlock; g_exampleName = exName; diff --git a/src/diagram.cpp b/src/diagram.cpp index 517433a..f9d803c 100644 --- a/src/diagram.cpp +++ b/src/diagram.cpp @@ -1243,7 +1243,6 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path, err("Error: Problems running epstopdf. Check your TeX installation!\n"); return; } - printf("done\n"); } } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 6c268cf..1469a90 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -137,10 +137,51 @@ void clearAll() delete mainPage; mainPage=0; } -//bool unrelatedFunctionsUsed; - -//ClassDef unrelatedClass("nothing",ClassDef::Class); - // dummy class for unrelated functions +void statistics() +{ + fprintf(stderr,"--- inputNameDict stats ----\n"); + inputNameDict->statistics(); + fprintf(stderr,"--- includeNameDict stats ----\n"); + includeNameDict->statistics(); + fprintf(stderr,"--- exampleNameDict stats ----\n"); + exampleNameDict->statistics(); + fprintf(stderr,"--- imageNameDict stats ----\n"); + imageNameDict->statistics(); + fprintf(stderr,"--- classDict stats ----\n"); + classDict.statistics(); + fprintf(stderr,"--- namespaceDict stats ----\n"); + namespaceDict.statistics(); + fprintf(stderr,"--- memberNameDict stats ----\n"); + memberNameDict.statistics(); + fprintf(stderr,"--- functionNameDict stats ----\n"); + functionNameDict.statistics(); + fprintf(stderr,"--- sectionDict stats ----\n"); + sectionDict.statistics(); + fprintf(stderr,"--- excludeNameDict stats ----\n"); + excludeNameDict.statistics(); + fprintf(stderr,"--- aliasDict stats ----\n"); + aliasDict.statistics(); + fprintf(stderr,"--- typedefDict stats ----\n"); + typedefDict.statistics(); + fprintf(stderr,"--- namespaceAliasDict stats ----\n"); + namespaceAliasDict.statistics(); + fprintf(stderr,"--- groupDict stats ----\n"); + groupDict.statistics(); + fprintf(stderr,"--- formulaDict stats ----\n"); + formulaDict.statistics(); + fprintf(stderr,"--- formulaNameDict stats ----\n"); + formulaNameDict.statistics(); + fprintf(stderr,"--- tagDestinationDict stats ----\n"); + tagDestinationDict.statistics(); + fprintf(stderr,"--- compoundKeywordDict stats ----\n"); + compoundKeywordDict.statistics(); + fprintf(stderr,"--- expandAsDefinedDict stats ----\n"); + expandAsDefinedDict.statistics(); + fprintf(stderr,"--- memberHeaderDict stats ----\n"); + memberHeaderDict.statistics(); + fprintf(stderr,"--- memberDocDict stats ----\n"); + memberDocDict.statistics(); +} int annotatedClasses; int hierarchyClasses; @@ -813,6 +854,8 @@ static void buildNamespaceList(Entry *root) // the empty string test is needed for extract all case nd->setBriefDescription(root->brief); nd->insertUsedFile(root->fileName); + nd->setBodySegment(root->bodyLine,root->endBodyLine); + nd->setBodyDef(fd); // add class to the list namespaceList.inSort(nd); namespaceDict.insert(fullName,nd); @@ -4190,6 +4233,7 @@ static void generateFileDocs() static void addSourceReferences() { + // add source references for class definitions ClassListIterator cli(classList); ClassDef *cd=0; for (cli.toFirst();(cd=cli.current());++cli) @@ -4200,6 +4244,19 @@ static void addSourceReferences() fd->addSourceRef(cd->getStartBodyLine(),cd,0); } } + // add source references for namespace definitions + NamespaceListIterator nli(namespaceList); + NamespaceDef *nd=0; + for (nli.toFirst();(nd=nli.current());++nli) + { + FileDef *fd=nd->getBodyDef(); + if (fd && nd->isLinkableInProject() && nd->getStartBodyLine()!=-1) + { + fd->addSourceRef(nd->getStartBodyLine(),nd,0); + } + } + + // add source references for member names MemberNameListIterator mnli(memberNameList); MemberName *mn=0; for (mnli.toFirst();(mn=mnli.current());++mnli) @@ -4441,11 +4498,6 @@ static void findDefineDocumentation(Entry *root) md->setMaxInitLines(root->initLines); if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId); addMemberToGroups(root,md); - //FileDef *fd=md->getFileDef(); - //if (fd && root->mGrpId!=-1) - //{ - // fd->addMemberToGroup(md,root->mGrpId); - //} } md=mn->next(); } @@ -4476,16 +4528,8 @@ static void findDefineDocumentation(Entry *root) bool ambig; md->setBodyDef(findFileDef(inputNameDict,root->fileName,ambig)); md->addSectionsToDefinition(root->anchors); - //if (root->mGrpId!=-1 && md->getMemberGroup()==0) - //{ - // md->setMemberGroup(memberGroupDict[root->mGrpId]); - //} if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId); addMemberToGroups(root,md); - //if (root->mGrpId!=-1) - //{ - // fd->addMemberToGroup(md,root->mGrpId); - //} } } md=mn->next(); @@ -5979,6 +6023,8 @@ int main(int argc,char **argv) if (Config::generateHtml) writeDoxFont(Config::htmlOutputDir); if (Config::generateRTF) writeDoxFont(Config::rtfOutputDir); + //statistics(); + // count the number of documented elements in the lists we have built. // If the result is 0 we do not generate the lists and omit the // corresponding links in the index. diff --git a/src/filedef.cpp b/src/filedef.cpp index c4fe0f1..580749d 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -318,11 +318,12 @@ void FileDef::writeDocumentation(OutputList &ol) ol.startGroupHeader(); parseText(ol,theTranslator->trDetailedDescription()); ol.endGroupHeader(); - if (!briefDescription().isEmpty()) + if (!briefDescription().isEmpty() && Config::repeatBriefFlag) { ol+=briefOutput; } - if (!briefDescription().isEmpty() && !documentation().isEmpty()) + if (!briefDescription().isEmpty() && Config::repeatBriefFlag && + !documentation().isEmpty()) { ol.newParagraph(); } diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 5476dc1..3217c13 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -478,6 +478,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup) } } +/*! Add a member to all groups it is contained in */ void addMemberToGroups(Entry *root,MemberDef *md) { QListIterator<QCString> sli(*root->groups); diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 0f87add..0e37603 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -407,11 +407,11 @@ void LatexGenerator::writeStyleSheetFile(QFile &f) writeDefaultStyleSheetPart1(t); t << "Generated at " << dateToString(TRUE); if (Config::projectName.isEmpty()) t << " for " << Config::projectName << " "; - t << "by doxygen written by Dimitri van Heesch \\copyright{} 1997-2000"; + t << "by doxygen written by Dimitri van Heesch \\copyright~1997-2000"; writeDefaultStyleSheetPart2(t); t << "Generated at " << dateToString(TRUE); if (Config::projectName.isEmpty()) t << " for " << Config::projectName << " "; - t << "by doxygen written by Dimitri van Heesch \\copyright{} 1997-2000"; + t << "by doxygen written by Dimitri van Heesch \\copyright~1997-2000"; writeDefaultStyleSheetPart3(t); } @@ -778,14 +778,14 @@ void LatexGenerator::writeStyleInfo(int part) break; case 2: { - t << " Dimitri van Heesch \\copyright{} 1997-2000"; + t << " Dimitri van Heesch \\copyright~1997-2000"; t << "}]{}\n"; writeDefaultStyleSheetPart2(t); } break; case 4: { - t << " Dimitri van Heesch \\copyright{} 1997-2000"; + t << " Dimitri van Heesch \\copyright~1997-2000"; writeDefaultStyleSheetPart3(t); endPlainFile(); } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 662a8f3..5bf7e46 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -1538,21 +1538,24 @@ void MemberDef::generateXML(QTextStream &t,Definition *def) else if (xmlType==enum_t) // enum { t << " <enumvaluelist>" << endl; - MemberListIterator emli(*enumFields); - MemberDef *emd; - for (emli.toFirst();(emd=emli.current());++emli) + if (enumFields) { - t << " <enumvalue>" << endl; - t << " <name>"; - writeXMLString(t,emd->name()); - t << "</name>" << endl; - if (!emd->init.isEmpty()) + MemberListIterator emli(*enumFields); + MemberDef *emd; + for (emli.toFirst();(emd=emli.current());++emli) { - t << " <initializer>"; - writeXMLString(t,emd->init); - t << "</initializer>" << endl; + t << " <enumvalue>" << endl; + t << " <name>"; + writeXMLString(t,emd->name()); + t << "</name>" << endl; + if (!emd->init.isEmpty()) + { + t << " <initializer>"; + writeXMLString(t,emd->init); + t << "</initializer>" << endl; + } + t << " </enumvalue>" << endl; } - t << " </enumvalue>" << endl; } t << " </enumvaluelist>" << endl; } diff --git a/src/membergroup.cpp b/src/membergroup.cpp index 223932c..f1bf6bb 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -25,6 +25,7 @@ #include "filedef.h" #include "language.h" #include "scanner.h" +#include "groupdef.h" //static QCString idToName(int id) //{ @@ -58,8 +59,9 @@ void MemberGroup::insertMember(MemberDef *md) // memberList->first() ? memberList->first()->getSectionList() : 0, // memberList->count(), // md->getSectionList()); + MemberDef *firstMd = memberList->first(); if (inSameSection && memberList->count()>0 && - memberList->first()->getSectionList()!=md->getSectionList()) + firstMd->getSectionList()!=md->getSectionList()) { inSameSection=FALSE; } @@ -68,6 +70,14 @@ void MemberGroup::insertMember(MemberDef *md) inDeclSection = md->getSectionList(); } memberList->append(md); + + // copy the group of the first member in the memberGroup + GroupDef *gd; + if (firstMd && (gd=firstMd->getGroupDef())) + { + md->setGroupDef(gd); + gd->insertMember(md); + } } diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 8badc81..6377295 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -251,9 +251,13 @@ void NamespaceDef::writeDocumentation(OutputList &ol) parseText(ol,theTranslator->trDetailedDescription()); ol.endGroupHeader(); ol.startTextBlock(); - if (!briefDescription().isEmpty()) + if (!briefDescription().isEmpty() && Config::repeatBriefFlag) { ol+=briefOutput; + } + if (!briefDescription().isEmpty() && Config::repeatBriefFlag && + !documentation().isEmpty()) + { ol.newParagraph(); } if (!documentation().isEmpty()) @@ -278,16 +278,19 @@ static QCString stringize(const QCString &s) */ static void processConcatOperators(QCString &expr) { + //printf("processConcatOperators: in=`%s'\n",expr.data()); QRegExp r("[ \\t\\n]*##[ \\t\\n]*"); int l,n,i=0; if (expr.isEmpty()) return; while ((n=r.match(expr,i,&l))!=-1) { + //printf("Match: `%s'\n",expr.data()+i); if (n+l+1<(int)expr.length() && expr.at(n+l)=='@' && expr.at(n+l+1)=='-') { // remove no-rescan marker after ID l+=2; } + //printf("found `%s'\n",expr.mid(n,l).data()); // remove the ## operator and the surrounding whitespace expr=expr.left(n)+expr.right(expr.length()-n-l); int k=n-1; @@ -298,14 +301,15 @@ static void processConcatOperators(QCString &expr) expr=expr.left(k-1)+expr.right(expr.length()-k-1); n-=2; } - i=n+l; + i=n; } + //printf("processConcatOperators: out=`%s'\n",expr.data()); } /*! replaces the function macro \a def whose argument list starts at * \a pos in expression \a expr. * Notice that this routine may scan beyond the \a expr string if needed. - * The characters from the input file will be read. + * In that case the characters will be read from the input file. * The replacement string will be returned in \a result and the * length of the (unexpanded) argument list is stored in \a len. */ @@ -338,7 +342,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int int argCount=0; bool done=FALSE; - // FASE 1: read the macro arguments + // PHASE 1: read the macro arguments if (def->nargs==0) { while ((cc=getNextChar(expr,rest,j))!=EOF) @@ -442,7 +446,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int } } - // FASE 2: apply the macro function + // PHASE 2: apply the macro function if (argCount==def->nargs || (argCount>def->nargs && def->varArgs)) // matching parameters lists { @@ -486,7 +490,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int while (l<(int)d.length() && d.at(l)==' ') l++; if (l<(int)d.length()-1 && d.at(l)=='#' && d.at(l+1)=='#') hash=TRUE; } - //printf("request key %s result %s\n",key.data(),args[key]->data()); + //printf("request key %s result %s\n",key.data(),argTable[key]->data()); if (key.length()>1 && (subst=argTable[key])) { QCString substArg=*subst; @@ -817,12 +821,12 @@ void addDefine() //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine()); } -static void outputChar(char c) +static inline void outputChar(char c) { if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c); } -static void outputArray(const char *a,int len) +static inline void outputArray(const char *a,int len) { if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addArray(a,len); } @@ -1007,7 +1011,7 @@ BN [ \t\r\n] <CopyLine>{ID}/{BN}*"(" { Define *def=0; //printf("Search for define %s\n",yytext); - if (g_includeStack.isEmpty() && + if ((g_includeStack.isEmpty() || g_curlyCount>0) && Config::macroExpansionFlag && /* (expandDefine=fileDefineCache->findDefine(g_yyFileName,yytext)) */ (def=g_fileDefineDict->find(yytext)) && @@ -1037,7 +1041,7 @@ BN [ \t\r\n] <CopyLine>{ID} { Define *def=0; //printf("Search for define %s\n",yytext); - if (g_includeStack.isEmpty() && + if ((g_includeStack.isEmpty() || g_curlyCount>0) && Config::macroExpansionFlag && (def=g_fileDefineDict->find(yytext)) && def->nargs==-1 && @@ -1557,7 +1561,7 @@ BN [ \t\r\n] outputChar('\n'); Define *def=0; //printf("Define name=`%s' text=`%s' litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data()); - if (g_includeStack.isEmpty()) + if (g_includeStack.isEmpty() || g_curlyCount>0) { addDefine(); } diff --git a/src/scanner.l b/src/scanner.l index abf1b26..6bd6f2d 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -87,6 +87,7 @@ static int roundCount = 0 ; static int curlyCount = 0 ; static int squareCount = 0 ; static int ifCount = 0 ; +static int padCount = 0 ; static int todoStartContext = 0; static QCString todoString = 0; static int testStartContext = 0; @@ -1267,6 +1268,11 @@ TITLE [tT][iI][tT][lL][eE] *pCopyCurlyString+=*yytext; } <FindMembers>":" { + if (current->type.isEmpty()) // bit pad field + { + addType(current); + current->name.sprintf("__pad%d__",padCount++); + } BEGIN(BitFields); current->bitfields+=":"; } @@ -3485,6 +3491,7 @@ static void parseCompounds(Entry *rt) //printf("-- %s ---------\n%s\n---------------\n", // ce->name.data(),ce->program.data()); // init scanner state + padCount=0; inputString = ce->program; inputPosition = 0; scanYYrestart( scanYYin ) ; diff --git a/src/translator_it.h b/src/translator_it.h index 71fe2bb..11ac002 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -5,13 +5,15 @@ * Initial Italian Translation by Ahmed Aldo Faisal * Revised and completed by Alessandro Falappa (June 1999) * Updates: - * 2000/08: translated new items used since version 1.1.3, 1.1.4, 1.1.5 and 1.2.0 - * 2000/03: translated new items used since version 1.0 and 1.1.0 - * 1999/19: entirely rewritten the translation to correct small variations due - * to feature additions and to conform to the layout of the latest - * commented translator.h for the english language - * 1999/09: corrected some small typos in the "new since 0.49-990425" section - * added the "new since 0.49-990728" section + * 2000/11: modified slightly the translation in trLegendDocs() function, + * translated new items used since version 1.2.1 and 1.2.2 + * 2000/08: translated new items used since version 1.1.3, 1.1.4, 1.1.5 and 1.2.0 + * 2000/03: translated new items used since version 1.0 and 1.1.0 + * 1999/19: entirely rewritten the translation to correct small variations due + * to feature additions and to conform to the layout of the latest + * commented translator.h for the english language + * 1999/09: corrected some small typos in the "new since 0.49-990425" section + * added the "new since 0.49-990728" section * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -91,7 +93,7 @@ class TranslatorItalian : public Translator */ QCString trGeneratedAutomatically(const char *s) { - QCString result="Generato automaticamente da Doxygen"; + QCString result="Generato automaticamente da Doxygen"; if (s) result+=(QCString)" per "+s; result+=" a partire dal codice sorgente."; return result; @@ -162,8 +164,8 @@ class TranslatorItalian : public Translator /*! This is an introduction to the class hierarchy. */ QCString trClassHierarchyDescription() { - return "Questa lista di ereditarietà è ordinata " - "approssimativamente, ma non completamente, in ordine alfabetico:"; + return "Questa lista di ereditarietà è ordinata " + "approssimativamente, ma non completamente, in ordine alfabetico:"; } /*! This is an introduction to the list with all files. */ @@ -171,7 +173,7 @@ class TranslatorItalian : public Translator { QCString result="Questa è una lista "; if (!extractAll) result+="dei files documentati "; - else result+="di tutti i files "; + else result+="di tutti i files "; result+="con una loro breve descrizione:"; return result; } @@ -186,7 +188,7 @@ class TranslatorItalian : public Translator { QCString result="Questa è una lista "; if (!extractAll) result+="dei membri documentati, "; - else result+="di tutti i membri "; + else result+="di tutti i membri "; result+="con collegamenti "; if (extractAll) result+="alla documentazione della classe di ciascun membro:"; else result+="alla documentazione delle classi a cui appartengono:"; @@ -198,7 +200,7 @@ class TranslatorItalian : public Translator { QCString result="Questa è una lista "; if (!extractAll) result+="dei membri dei files documentati, "; - else result+="di tutti i membri dei files "; + else result+="di tutti i membri dei files "; result+="con collegamenti "; if (extractAll) result+="alla documentazione del file di ciascun membro:"; else result+="alla documentazione dei files a cui appartengono:"; @@ -476,7 +478,7 @@ class TranslatorItalian : public Translator { QCString result="Questa è la lista "; if (!extractAll) result+="dei namespaces documentati, "; - else result+="di tutti i namespaces "; + else result+="di tutti i namespaces "; result+="con una loro breve descrizione:"; return result; } @@ -627,7 +629,7 @@ class TranslatorItalian : public Translator { QCString result="Questa è la lista "; if (!extractAll) result+="dei membri dei namespaces documentati, "; - else result+="di tutti i membri dei namespaces "; + else result+="di tutti i membri dei namespaces "; result+="con collegamenti "; if (extractAll) result+="alla documentazione del namespace per ciascun membro:"; @@ -679,7 +681,7 @@ class TranslatorItalian : public Translator } result+=" è stata generata a partire "; if (single) result+="dal seguente file:"; - else result+="dai seguenti files:"; + else result+="dai seguenti files:"; return result; } @@ -906,21 +908,21 @@ class TranslatorItalian : public Translator "Questa pagina spiega come interpretare i grafi generati da doxygen.<p>\n" "Considerate l'esempio seguente:\n" "\\code\n" - "/*! Invisible class because of truncation */\n" + "/*! Classe invisibile per troncamento */\n" "class Invisible { };\n\n" - "/*! Truncated class, inheritance relation is hidden */\n" + "/*! Classe troncata, la relazione di ereditarietà e nascosta */\n" "class Truncated : public Invisible { };\n\n" - "/* Class not documented with doxygen comments */\n" + "/* Classe non documentata con i commenti speciali di doxygen*/\n" "class Undocumented { };\n\n" - "/*! Class that is inherited using public inheritance */\n" + "/*! Classe che utilizza una ereditarietà pubblica */\n" "class PublicBase : public Truncated { };\n\n" - "/*! Class that is inherited using protected inheritance */\n" + "/*! Classe che utilizza una ereditarietà protetta*/\n" "class ProtectedBase { };\n\n" - "/*! Class that is inherited using private inheritance */\n" + "/*! Classe che utilizza una ereditarietà privata*/\n" "class PrivateBase { };\n\n" - "/*! Class that is used by the Inherited class */\n" + "/*! Classe utilizzata dalla classe Inherited */\n" "class Used { };\n\n" - "/*! Super class that inherits a number of other classes */\n" + "/*! Classe che eredita da varie classi*/\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -970,6 +972,32 @@ class TranslatorItalian : public Translator { return "Lista dei test"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.1 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for KDE-2 IDL methods */ + virtual QCString trDCOPMethods() + { + return "Metodi DCOP"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.2 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for IDL properties */ + virtual QCString trProperties() + { + return "Proprietà"; + } + /*! Used as a section header for IDL property documentation */ + virtual QCString trPropertyDocumentation() + { + return "Documentazione delle Proprietà"; + } + }; #endif diff --git a/src/translator_ru.h b/src/translator_ru.h index 495d96a..919faae 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -796,6 +796,31 @@ class TranslatorRussian : public Translator { return "óÐÉÓÏË ôÅÓÔÏ×"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.1 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for KDE-2 IDL methods */ + virtual QCString trDCOPMethods() + { + return "íÅÔÏÄÙ DCOP"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.2 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for IDL properties */ + virtual QCString trProperties() + { + return "ó×ÏÊÓÔ×Á"; + } + /*! Used as a section header for IDL property documentation */ + virtual QCString trPropertyDocumentation() + { + return "äÏËÕÍÅÎÔÁÃÉÑ ó×ÏÊÓÔ×"; + } + }; |