diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/classdef.cpp | 12 | ||||
-rw-r--r-- | src/config.l | 10 | ||||
-rw-r--r-- | src/docparser.cpp | 15 | ||||
-rw-r--r-- | src/doctokenizer.l | 12 | ||||
-rw-r--r-- | src/doxygen.cpp | 4 | ||||
-rw-r--r-- | src/filedef.cpp | 8 | ||||
-rw-r--r-- | src/htmlgen.cpp | 2 | ||||
-rw-r--r-- | src/mangen.cpp | 1 | ||||
-rw-r--r-- | src/namespacedef.cpp | 8 | ||||
-rw-r--r-- | src/pre.l | 18 | ||||
-rw-r--r-- | src/scanner.l | 86 | ||||
-rw-r--r-- | src/translator_sr.h | 18 | ||||
-rw-r--r-- | src/util.cpp | 85 |
13 files changed, 225 insertions, 54 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index f4b0c9a..bfe7cac 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -727,7 +727,13 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && !documentation().isEmpty()) { - ol.newParagraph(); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Man); + ol.newParagraph(); + ol.enableAll(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString("\n\n"); + ol.popGeneratorState(); } // write documentation if (!documentation().isEmpty()) @@ -1032,14 +1038,12 @@ void ClassDef::writeDocumentation(OutputList &ol) ol.endDotGraph(usageImplGraph); if (Config_getBool("GENERATE_LEGEND")) { - ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); ol.writeString("<center><font size=\"2\">["); ol.startHtmlLink("graph_legend"+Doxygen::htmlFileExtension); ol.docify(theTranslator->trLegend()); ol.endHtmlLink(); ol.writeString("]</font></center>"); - ol.popGeneratorState(); } ol.popGeneratorState(); } @@ -1051,11 +1055,13 @@ void ClassDef::writeDocumentation(OutputList &ol) /* && !Config_getBool("INLINE_INHERITED_MEMB") */ ) { + ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); ol.startTextLink(m_memListFileName,0); ol.parseText(theTranslator->trListOfAllMembers()); ol.endTextLink(); ol.enableAll(); + ol.popGeneratorState(); } ol.endTextBlock(); diff --git a/src/config.l b/src/config.l index a2ace80..88442d2 100644 --- a/src/config.l +++ b/src/config.l @@ -1396,7 +1396,7 @@ void Config::create() "overviews. This option has no effect if EXTRACT_ALL is enabled. \n", FALSE ); - cb = addBool( + cb = addBool( "HIDE_FRIEND_COMPOUNDS", "If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \n" "friend (class|struct|union) declarations. \n" @@ -1405,6 +1405,14 @@ void Config::create() FALSE ); cb = addBool( + "HIDE_IN_BODY_DOCS", + "If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \n" + "documentation blocks found inside the body of a function. \n" + "If set to NO (the default) these blocks will be appended to the \n" + "function's detailed documentation block. \n", + FALSE + ); + cb = addBool( "BRIEF_MEMBER_DESC", "If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \n" "include brief member descriptions after the members that are listed in \n" diff --git a/src/docparser.cpp b/src/docparser.cpp index 4b15a2b..53f58bc 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -423,7 +423,11 @@ static bool findDocsForMemberOrCompound(const char *commandName, NamespaceDef *nd=0; GroupDef *gd=0; PageInfo *pi=0; - bool found = getDefs(g_context.latin1(),name.latin1(),args,md,cd,fd,nd,gd,FALSE,0,TRUE); + bool found = getDefs( + g_context.find('.')==-1?g_context.latin1():"", // `find('.') is a hack to detect files + name.latin1(), + args.isEmpty()?0:args.latin1(), + md,cd,fd,nd,gd,FALSE,0,TRUE); if (found && md) { *pDoc=md->documentation(); @@ -4371,6 +4375,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, // pretty print the result PrintDocVisitor *v = new PrintDocVisitor; root->accept(v); + delete v; } checkUndocumentedParams(); @@ -4413,6 +4418,14 @@ DocNode *validatingParseText(const char *input) DocText *txt = new DocText; txt->parse(); + if (Debug::isFlagSet(Debug::PrintTree)) + { + // pretty print the result + PrintDocVisitor *v = new PrintDocVisitor; + txt->accept(v); + delete v; + } + delete g_token; return txt; diff --git a/src/doctokenizer.l b/src/doctokenizer.l index f92a6f3..879ca2c 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -319,7 +319,7 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU} g_token->name=yytext; return TK_URL; } -<St_Para>[a-z_A-Z0-9.-]+"@"[a-z_A-Z0-9.-]+ { +<St_Para>[a-z_A-Z0-9.-]+"@"[a-z_A-Z0-9-]+"."[a-z_A-Z0-9.-]+ { g_token->name=yytext; return TK_URL; } @@ -383,7 +383,10 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU} <St_Para,St_Text>{WORD1} | <St_Para,St_Text>{WORD2} { /* function call */ - g_token->name = yytext; + if (yytext[0]=='%') // strip % if present + g_token->name = &yytext[1]; + else + g_token->name = yytext; return TK_WORD; /* the following is dummy code to please the @@ -465,7 +468,10 @@ HTMLKEYW {HTMLKEYL}|{HTMLKEYU} } <St_TitleN>{WORD1} | <St_TitleN>{WORD2} { /* word */ - g_token->name = yytext; + if (yytext[0]=='%') // strip % if present + g_token->name = &yytext[1]; + else + g_token->name = yytext; return TK_WORD; } <St_TitleN>[ \t]+ { diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 22b12e5..e32300c 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -4556,7 +4556,7 @@ static void findMember(Entry *root, warn_cont("%s ",md->typeString()); } warn_cont("%s::%s%s\n", - cd->name().data(), + cd->qualifiedNameWithTemplateParameters().data(), md->name().data(),md->argsString()); } } @@ -7806,6 +7806,7 @@ void generateOutput() msg("Generating group index...\n"); writeGroupIndex(*outputList); + //msg("Generating package index...\n"); //generatePackageDocs(); @@ -7831,6 +7832,7 @@ void generateOutput() generateSearchIndex(); msg("Generating style sheet...\n"); + //printf("writing style info\n"); outputList->writeStyleInfo(0); // write first part outputList->disableAllBut(OutputGenerator::Latex); outputList->parseText( diff --git a/src/filedef.cpp b/src/filedef.cpp index 02716ee..e2e6be0 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -122,7 +122,13 @@ void FileDef::writeDetailedDocumentation(OutputList &ol) if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && !documentation().isEmpty()) { - ol.newParagraph(); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Man); + ol.newParagraph(); + ol.enableAll(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString("\n\n"); + ol.popGeneratorState(); } if (!documentation().isEmpty()) { diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index fd2ef70..02f2b91 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -313,10 +313,12 @@ void HtmlGenerator::endProjectNumber() void HtmlGenerator::writeStyleInfo(int part) { + //printf("writeStyleInfo(%d)\n",part); if (part==0) { if (Config_getString("HTML_STYLESHEET").isEmpty()) // write default style sheet { + //printf("write doxygen.css\n"); startPlainFile("doxygen.css"); // alternative, cooler looking titles diff --git a/src/mangen.cpp b/src/mangen.cpp index 8712328..06f0204 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -619,6 +619,5 @@ void ManGenerator::printDoc(DocNode *n) ManDocVisitor *visitor = new ManDocVisitor(t,*this); n->accept(visitor); delete visitor; - t << endl; } diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 0f32a94..b0842f5 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -207,7 +207,13 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol) if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") && !documentation().isEmpty()) { - ol.newParagraph(); + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Man); + ol.newParagraph(); + ol.enableAll(); + ol.disableAllBut(OutputGenerator::Man); + ol.writeString("\n\n"); + ol.popGeneratorState(); } if (!documentation().isEmpty()) { @@ -971,11 +971,11 @@ static void readIncludeFile(const QCString &inc) g_includeStack.push(fs); // set the scanner to the include file - // TODO: Enable this to deal with file changes due to + // Deal with file changes due to // #include's within { .. } blocks - //QCString lineStr; - //lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data()); - //outputArray(lineStr.data(),lineStr.length()); + QCString lineStr; + 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=f; @@ -1624,9 +1624,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) BEGIN(SkipCPPComment); } <SkipCComment>"*/" { + outputChar('*');outputChar('/'); if (--g_commentCount<=0) { - outputChar('*');outputChar('/'); BEGIN(g_lastCContext); } } @@ -1803,11 +1803,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) setFileName(fs->fileName.copy()); //fprintf(stderr,"######## FileName %s\n",g_yyFileName.data()); - // TODO: Enable this to deal with file changes due to + // Deal with file changes due to // #include's within { .. } blocks - //QCString lineStr; - //lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data()); - //outputArray(lineStr.data(),lineStr.length()); + QCString lineStr; + lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data()); + outputArray(lineStr.data(),lineStr.length()); delete fs; fs=0; } diff --git a/src/scanner.l b/src/scanner.l index 6d055eb..67ec602 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -657,6 +657,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) %x GetCallType %x JavaImport %x CSAccessorDecl +%x PreLineCtrl %% @@ -1356,6 +1357,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) current->bodyLine = yyLineNr; BEGIN( Define ); } +<FindMembers>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */ + yyLineNr = atoi(&yytext[1]); + BEGIN( PreLineCtrl ); + } +<PreLineCtrl>"\""[^\n\"]*"\"" { + strncpy(yyFileName,stripQuotes(yytext),4096); + } +<PreLineCtrl>. {} +<PreLineCtrl>\n { + BEGIN(FindMembers); + } <SkipCPP>. <SkipCPP>\\[\r]*"\n"[\r]* { yyLineNr++ ; } <SkipCPP>[\r]*\n[\r]* { yyLineNr++ ; @@ -2587,6 +2599,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } else { + if (!Config_getBool("HIDE_IN_BODY_DOCS") && + !current->doc.isEmpty()) + { + // copy documentation found inside the body + // to the previous item + previous->doc += current->doc; + current->doc.resize(0); + } previous->endBodyLine=yyLineNr; BEGIN( lastCurlyContext ) ; } @@ -2943,16 +2963,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) //printf("Start doc block at %d\n",yyLineNr); removeSlashes=(yytext[1]=='/'); tmpDocType=-1; - if (YY_START==ReadBody) - { - current->doc+="\n\n"; - } - else + if (YY_START!=SkipCurly) { - current->doc.resize(0); + current->doc.resize(0); + current->docLine = yyLineNr; + current->docFile = yyFileName; } - current->docLine = yyLineNr; - current->docFile = yyFileName; lastDocContext = YY_START; if (current_root->section & Entry::SCOPE_MASK) { @@ -2978,27 +2994,27 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style { tmpDocType=-1; - if (YY_START==ReadBody) + if (!Config_getBool("HIDE_IN_BODY_DOCS") && + YY_START==SkipCurly) // inside body { current->doc+="\n\n"; } else { current->doc.resize(0); + current->docLine = yyLineNr; + current->docFile = yyFileName; } - current->docLine = yyLineNr; - current->docFile = yyFileName; BEGIN( Doc ); } else // Use the javadoc style { - if (YY_START==ReadBody) + if (!Config_getBool("HIDE_IN_BODY_DOCS") && + YY_START==SkipCurly) // inside body { tmpDocType=-1; current->doc+="\n\n"; - lastDocContext = ReadBody; - current->docLine = yyLineNr; - current->docFile = yyFileName; + lastDocContext = SkipCurly; BEGIN( Doc ); } else @@ -3014,10 +3030,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } } } -<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"//!" { - current->brief.resize(0); - current->briefFile=yyFileName; - current->briefLine=yyLineNr; +<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases>"//!" { + if (YY_START!=SkipCurly) + { + current->brief.resize(0); + current->briefFile=yyFileName; + current->briefLine=yyLineNr; + } tmpDocType=-1; lastDocContext = YY_START; if (current_root->section & Entry::SCOPE_MASK) @@ -3030,10 +3049,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } BEGIN( LineDoc ); } -<FindMembers,FindFields,MemberSpec,FuncQual,Operator,ClassVar,Bases>"///"/[^/] { - current->brief.resize(0); - current->briefFile=yyFileName; - current->briefLine=yyLineNr; +<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases>"///"/[^/] { + if (YY_START!=SkipCurly) + { + current->brief.resize(0); + current->briefFile=yyFileName; + current->briefLine=yyLineNr; + } tmpDocType=-1; lastDocContext = YY_START; if (current_root->section & Entry::SCOPE_MASK) @@ -4089,6 +4111,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) else { current->brief += " "; + if (!current->doc.isEmpty()) + { + current->doc += "<p>"; + } yyLineNr++ ; } } @@ -4194,6 +4220,16 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) <LineDoc>[\n\r]+{B}*"//"[!/] { lineCount(); } <LineDoc>\n { yyLineNr++; + if (!Config_getBool("HIDE_IN_BODY_DOCS") && + lastDocContext==SkipCurly) // inside body + { + if (!previous->doc.isEmpty()) + { + previous->doc+="<p>"; + } + previous->doc += current->brief; + current->brief.resize(0); + } BEGIN( lastDocContext ); } <DefLineDoc>\n { @@ -4318,6 +4354,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) checkDocs(); current->doc += "\n\n"; //printf("End of docs at line %d\n",yyLineNr); + if (lastDocContext==SkipCurly && Config_getBool("HIDE_IN_BODY_DOCS")) + { + current->doc.resize(0); + } BEGIN( lastDocContext ); } <JavaDoc>"*/" { diff --git a/src/translator_sr.h b/src/translator_sr.h index 3047274..dab7d15 100644 --- a/src/translator_sr.h +++ b/src/translator_sr.h @@ -272,7 +272,7 @@ private: result+="članova klasa"; } result+=" sa linkovima na "; - if (!extractAll) + if (extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { @@ -331,7 +331,7 @@ private: /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return decode( "Spisak svih slčinih stranica:" ); } + { return decode( "Spisak svih sličnih stranica:" ); } /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() @@ -945,11 +945,11 @@ private: { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return decode( "Član" ); + return decode( "Članovi" ); } else { - return decode( "Javni član" ); + return decode( "Javni članovi" ); } } virtual QCString trStaticPublicAttribs() @@ -1403,7 +1403,17 @@ private: return decode( "Sadržaj" ); } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.17 +////////////////////////////////////////////////////////////////////////// + /*! Used as the header of the list of item that have been + * flagged deprecated + */ + virtual QCString trDeprecatedList() + { + return decode( "Spisak zastarelih funkcija članica" ); + } }; diff --git a/src/util.cpp b/src/util.cpp index 56f61c3..b445c34 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -308,7 +308,7 @@ void writePageRef(OutputDocInterface &od,const char *cn,const char *mn) QCString generateMarker(int id) { QCString result; - result.sprintf("@%d\n",id); + result.sprintf("@%d",id); return result; } @@ -1228,7 +1228,69 @@ static QCString trimTemplateSpecifiers( return result; } -// removes the (one and only) occurrence of name:: from s. +/*! + * @param pattern pattern to look for + * @param s string to search in + * @param p position to start + * @param len resulting pattern length + * @returns position on which string is found, or -1 if not found + */ +static int findScopePattern(const QCString &pattern,const QCString &s, + int p,int *len) +{ + int sl=s.length(); + int pl=pattern.length(); + int sp=0; + *len=0; + while (p<sl) + { + sp=p; // start of match + int pp=0; // pattern position + while (p<sl && pp<pl) + { + if (s.at(p)=='<') // skip template arguments while matching + { + int bc=1; + //printf("skipping pos=%d c=%c\n",p,s.at(p)); + p++; + while (p<sl) + { + if (s.at(p)=='<') bc++; + else if (s.at(p)=='>') + { + bc--; + if (bc==0) + { + p++; + break; + } + } + //printf("skipping pos=%d c=%c\n",p,s.at(p)); + p++; + } + } + else if (s.at(p)==pattern.at(pp)) + { + //printf("match at position p=%d pp=%d c=%c\n",p,pp,s.at(p)); + p++; + pp++; + } + else // no match + { + //printf("restarting at %d c=%c pat=%s\n",p,s.at(p),pattern.data()); + p=sp+1; + break; + } + } + if (pp==pl) // whole pattern matches + { + *len=p-sp; + return sp; + } + } + return -1; +} + static QCString trimScope(const QCString &name,const QCString &s) { int scopeOffset=name.length(); @@ -1239,11 +1301,11 @@ static QCString trimScope(const QCString &name,const QCString &s) QCString scope=name.left(scopeOffset)+"::"; //printf("Trying with scope=`%s'\n",scope.data()); - int i,p=0; - while ((i=result.find(scope,p))!=-1) // for each occurrence + int i,p=0,l; + while ((i=findScopePattern(scope,result,p,&l))!=-1) // for each occurrence { tmp+=result.mid(p,i-p); // add part before pattern - p=i+scope.length(); + p=i+l; } tmp+=result.right(result.length()-p); // add trailing part @@ -1462,6 +1524,17 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA, stripIrrelevantConstVolatile(srcAType); stripIrrelevantConstVolatile(dstAType); + // strip typename keyword + if (strncmp(srcAType,"typename ",9)==0) + { + srcAType = srcAType.right(srcAType.length()-9); + } + if (strncmp(dstAType,"typename ",9)==0) + { + dstAType = dstAType.right(dstAType.length()-9); + } + + srcAType = removeRedundantWhiteSpace(srcAType); dstAType = removeRedundantWhiteSpace(dstAType); @@ -2146,7 +2219,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, } } } - //printf("found %d candidate members\n",members.count()); if (members.count()!=1 && !strcmp(args,"()")) { // no exact match found, but if args="()" an arbitrary @@ -2167,6 +2239,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, md=mn->prev(); } } + //printf("found %d candidate members\n",members.count()); if (members.count()==1 || currentFile!=0) { md=members.first(); |