diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/docparser.cpp | 20 | ||||
-rw-r--r-- | src/docparser.h | 3 | ||||
-rw-r--r-- | src/doxygen.cpp | 9 | ||||
-rw-r--r-- | src/htmlgen.cpp | 2 | ||||
-rw-r--r-- | src/latexdocvisitor.cpp | 13 | ||||
-rw-r--r-- | src/mandocvisitor.cpp | 3 | ||||
-rw-r--r-- | src/memberdef.cpp | 6 | ||||
-rw-r--r-- | src/outputlist.cpp | 5 | ||||
-rw-r--r-- | src/outputlist.h | 2 | ||||
-rw-r--r-- | src/perlmodgen.cpp | 2 | ||||
-rw-r--r-- | src/rtfdocvisitor.cpp | 3 | ||||
-rw-r--r-- | src/scanner.l | 16 | ||||
-rw-r--r-- | src/util.cpp | 15 | ||||
-rw-r--r-- | src/util.h | 2 | ||||
-rw-r--r-- | src/xmldocvisitor.cpp | 3 |
15 files changed, 72 insertions, 32 deletions
diff --git a/src/docparser.cpp b/src/docparser.cpp index e84bf96..822f530 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -63,6 +63,7 @@ static bool g_hasParamCommand; static MemberDef * g_memberDef; static QDict<void> g_paramsFound; static bool g_isExample; +static QCString g_exampleName; static SectionDict *g_sectionDict; // include file state @@ -811,7 +812,7 @@ reparsetoken: { doctokenizerYYsetStateHtmlOnly(); tok = doctokenizerYYlex(); - children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_fileName)); + children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName)); if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: htmlonly section ended without end marker"); doctokenizerYYsetStatePara(); } @@ -820,7 +821,7 @@ reparsetoken: { doctokenizerYYsetStateLatexOnly(); tok = doctokenizerYYlex(); - children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_fileName)); + children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_exampleName)); if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: latexonly section ended without end marker",doctokenizerYYlineno); doctokenizerYYsetStatePara(); } @@ -3168,7 +3169,7 @@ void DocPara::handleIncludeOperator(const QString &cmdName,DocIncOperator::Type tokToString(tok),cmdName.data()); return; } - DocIncOperator *op = new DocIncOperator(this,t,g_token->name,g_context,g_isExample,g_fileName); + DocIncOperator *op = new DocIncOperator(this,t,g_token->name,g_context,g_isExample,g_exampleName); DocNode *n1 = m_children.last(); DocNode *n2 = n1!=0 ? m_children.prev() : 0; bool isFirst = n1==0 || // no last node @@ -3389,7 +3390,7 @@ void DocPara::handleInclude(const QString &cmdName,DocInclude::Type t) tokToString(tok),cmdName.data()); return; } - DocInclude *inc = new DocInclude(this,g_token->name,g_context,t,g_isExample,g_fileName); + DocInclude *inc = new DocInclude(this,g_token->name,g_context,t,g_isExample,g_exampleName); m_children.append(inc); inc->parse(); } @@ -3564,7 +3565,7 @@ int DocPara::handleCommand(const QString &cmdName) if (g_token->verb.at(i)=='\n') li=i+1; i++; } - m_children.append(new DocVerbatim(this,g_context,g_token->verb.mid(li),DocVerbatim::Code,g_isExample,g_fileName)); + m_children.append(new DocVerbatim(this,g_context,g_token->verb.mid(li),DocVerbatim::Code,g_isExample,g_exampleName)); if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: code section ended without end marker"); doctokenizerYYsetStatePara(); } @@ -3573,7 +3574,7 @@ int DocPara::handleCommand(const QString &cmdName) { doctokenizerYYsetStateHtmlOnly(); retval = doctokenizerYYlex(); - m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_fileName)); + m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName)); if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: htmlonly section ended without end marker"); doctokenizerYYsetStatePara(); } @@ -3582,7 +3583,7 @@ int DocPara::handleCommand(const QString &cmdName) { doctokenizerYYsetStateLatexOnly(); retval = doctokenizerYYlex(); - m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_fileName)); + m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_exampleName)); if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: latexonly section ended without end marker"); doctokenizerYYsetStatePara(); } @@ -3591,7 +3592,7 @@ int DocPara::handleCommand(const QString &cmdName) { doctokenizerYYsetStateVerbatim(); retval = doctokenizerYYlex(); - m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Verbatim,g_isExample,g_fileName)); + m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Verbatim,g_isExample,g_exampleName)); if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: verbatim section ended without end marker"); doctokenizerYYsetStatePara(); } @@ -4652,6 +4653,7 @@ void DocRoot::parse() DocNode *validatingParseDoc(const char *fileName,int startLine, const char *context,MemberDef *md, const char *input,bool isExample, + const char *exampleName, SectionDict *sections) { @@ -4671,6 +4673,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, g_includeFileOffset = 0; g_includeFileLength = 0; g_isExample = isExample; + g_exampleName = exampleName; g_hasParamCommand = FALSE; g_paramsFound.setAutoDelete(FALSE); g_paramsFound.clear(); @@ -4721,6 +4724,7 @@ DocNode *validatingParseText(const char *input) g_includeFileOffset = 0; g_includeFileLength = 0; g_isExample = FALSE; + g_exampleName = ""; g_hasParamCommand = FALSE; g_paramsFound.setAutoDelete(FALSE); g_paramsFound.clear(); diff --git a/src/docparser.h b/src/docparser.h index 4afafd8..ca9e82e 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -47,6 +47,7 @@ class SectionDict; * Can be 0. * @param input String representation of the documentation block. * @param isExample TRUE if the documentation belongs to an example. + * @param exampleName Base name of the example file (0 if isExample is FALSE). * @param sections Sections (and anchors) found in the documentation are * collected here (if not 0). * @returns Root node of the abstract syntax tree. Ownership of the @@ -55,7 +56,7 @@ class SectionDict; DocNode *validatingParseDoc(const char *fileName,int startLine, const char *context, MemberDef *md, const char *input,bool isExample, - SectionDict *sections=0); + const char *exampleName=0,SectionDict *sections=0); /*! Main entry point for parsing simple text fragments. These * fragments are limited to words, whitespace and symbols. diff --git a/src/doxygen.cpp b/src/doxygen.cpp index a386468..748a490 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -3769,7 +3769,8 @@ static void addMemberDocs(Entry *root, fullName+=md->name(); if (al) { - mergeArguments(md->argumentList(),al); + //printf("merging arguments (1)\n"); + mergeArguments(md->argumentList(),al,TRUE); } else { @@ -3781,7 +3782,8 @@ static void addMemberDocs(Entry *root, ) ) { - mergeArguments(md->argumentList(),root->argList); + //printf("merging arguments (2)\n"); + mergeArguments(md->argumentList(),root->argList,TRUE); } } if (over_load) // the \overload keyword was used @@ -6283,7 +6285,8 @@ static void generateExampleDocs() pd->getOuterScope()?pd->getOuterScope()->name().data():0, // context 0, // memberDef pd->documentation()+"\n\\include "+pd->name(), // docs - TRUE // is example + TRUE, // is example + pd->name() ); endFile(*outputList); } diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 02ea3f0..d729f2b 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -59,7 +59,7 @@ static const char *defaultStyleSheet = " width: 98%;\n" " border: 1px solid #CCCCCC;\n" " background-color: #f5f5f5;\n" -" padding: 0px;\n" +" padding-left: 4px;\n" " margin: 4px;\n" "}\n" "DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }\n" diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index cdbea1b..b3dc1d9 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -241,7 +241,7 @@ void LatexDocVisitor::visit(DocVerbatim *s) if (m_hide) return; switch(s->type()) { - case DocVerbatim::Code: // fall though + case DocVerbatim::Code: m_t << "\n\n\\footnotesize\\begin{verbatim}"; parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile()); m_t << "\\end{verbatim}\\normalsize" << endl; @@ -295,8 +295,8 @@ void LatexDocVisitor::visit(DocInclude *inc) void LatexDocVisitor::visit(DocIncOperator *op) { - //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n", - // op->type(),op->isFirst(),op->isLast(),op->text().data()); + printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n", + op->type(),op->isFirst(),op->isLast(),op->text().data()); if (op->isFirst()) { if (!m_hide) m_t << "\n\n\\footnotesize\\begin{verbatim}"; @@ -305,16 +305,19 @@ void LatexDocVisitor::visit(DocIncOperator *op) } if (op->type()!=DocIncOperator::Skip) { + popEnabled(); if (!m_hide) parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile()); + pushEnabled(); + m_hide=TRUE; } if (op->isLast()) { popEnabled(); - if (m_hide) m_t << "\\end{verbatim}\\normalsize" << endl; + if (!m_hide) m_t << "\\end{verbatim}\\normalsize" << endl; } else { - m_t << endl; + if (!m_hide) m_t << endl; } } diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 903d6e0..a94a3f7 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -258,7 +258,10 @@ void ManDocVisitor::visit(DocIncOperator *op) } if (op->type()!=DocIncOperator::Skip) { + popEnabled(); if (!m_hide) parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile()); + pushEnabled(); + m_hide=TRUE; } if (op->isLast()) { diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 8416478..f5ddf13 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -424,7 +424,7 @@ void MemberDef::insertEnumField(MemberDef *md) bool MemberDef::addExample(const char *anchor,const char *nameStr, const char *file) { - //printf("%s::addExample(%s,%s,%s)\n",name.data(),anchor,nameStr,file); + //printf("%s::addExample(%s,%s,%s)\n",name().data(),anchor,nameStr,file); if (exampleSDict==0) exampleSDict = new ExampleSDict; if (exampleSDict->find(nameStr)==0) { @@ -1029,8 +1029,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, QCString cname = container->name(); QCString cfname = container->getOutputFileBase(); - ol.addIndexItem(name(),cname); - ol.addIndexItem(cname,name()); + //ol.addIndexItem(name(),cname); + //ol.addIndexItem(cname,name()); if (Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP")) { diff --git a/src/outputlist.cpp b/src/outputlist.cpp index 7a074c7..3145e1f 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -194,7 +194,7 @@ void OutputList::popGeneratorState() void OutputList::parseDoc(const char *fileName,int startLine, const char * clName,MemberDef * md, const QCString &docStr,bool isExample, - SectionDict *sections) + const char *exampleName,SectionDict *sections) { int count=0; OutputGenerator *og=outputs->first(); @@ -206,7 +206,8 @@ void OutputList::parseDoc(const char *fileName,int startLine, if (count==0) return; // no output formats enabled. DocNode *root = validatingParseDoc(fileName,startLine, - clName,md,docStr,isExample,sections); + clName,md,docStr,isExample,exampleName, + sections); og=outputs->first(); while (og) diff --git a/src/outputlist.h b/src/outputlist.h index 4b6f9fe..b96ab13 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -62,7 +62,7 @@ class OutputList : public OutputDocInterface void parseDoc(const char *fileName,int startLine, const char *clName,MemberDef *md,const QCString &docStr, - bool isExample,SectionDict *sections=0); + bool isExample,const char *exampleName=0,SectionDict *sections=0); void parseText(const QCString &textStr); diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index f5b7e1b..98fa326 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -1272,7 +1272,7 @@ static void addPerlModDocBlock(PerlModOutput &output, if (stext.isEmpty()) output.addField(name).add("{}"); else { - DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,stext,FALSE); + DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,stext,FALSE,0); output.openHash(name); PerlModDocVisitor *visitor = new PerlModDocVisitor(output); root->accept(visitor); diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index e10b3f1..4b69abe 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -377,7 +377,10 @@ void RTFDocVisitor::visit(DocIncOperator *op) } if (op->type()!=DocIncOperator::Skip) { + popEnabled(); if (!m_hide) parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile()); + pushEnabled(); + m_hide=TRUE; } if (op->isLast()) { diff --git a/src/scanner.l b/src/scanner.l index c979bfb..0cf4f97 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -2126,7 +2126,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] <ReadBody,ReadNSBody>{BN}+ { current->program += yytext ; lineCount() ; } -<ReadBody,ReadNSBody>. { current->program += yytext ; } +<ReadBody,ReadNSBody>. { current->program += yytext ; } +<ReadBody,ReadNSBody>"'#" { current->program += yytext ; } <FindMembers>"("/({BN}*{ID}{BN}*"::")*{ID}{BN}*")"{BN}*"(" | /* typedef void (A::func_t)(args...) */ <FindMembers>("("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) */ @@ -2337,6 +2338,11 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] lastCContext = YY_START; BEGIN( SkipCxxComment ); } +<ReadFuncArgType,ReadTempArgs>"'#" { if (! insidePHP) + REJECT; + *copyArgString+=yytext; + fullArgString+=yytext; + } <ReadFuncArgType,ReadTempArgs>"#" { if (! insidePHP) REJECT; @@ -4590,11 +4596,17 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] <Doc>"*/" { checkDocs(); current->doc += "\n\n"; - //printf("End of docs at line %d\n",yyLineNr); + //printf("End of docs at line %d: %s\n",yyLineNr,current->doc.data()); if (lastDocContext==SkipCurly && Config_getBool("HIDE_IN_BODY_DOCS")) { current->doc.resize(0); } + if (current->section==Entry::GROUPDOC_SEC) + { + current_root->addSubEntry(current); + current = new Entry ; + initEntry(); + } BEGIN( lastDocContext ); } <JavaDoc>"*/" { diff --git a/src/util.cpp b/src/util.cpp index 2035bb3..741291c 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1909,7 +1909,7 @@ bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl, // merges the initializer of two argument lists // pre: the types of the arguments in the list should match. -void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl) +void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwrite) { //printf("mergeArguments `%s', `%s'\n", // argListToString(srcAl).data(),argListToString(dstAl).data()); @@ -1951,13 +1951,20 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl) } else if (!srcA->name.isEmpty() && !dstA->name.isEmpty()) { - if (srcA->docs.isEmpty() && !dstA->docs.isEmpty()) + if (forceNameOverwrite) { srcA->name = dstA->name.copy(); } - else if (!srcA->docs.isEmpty() && dstA->docs.isEmpty()) + else { - dstA->name = srcA->name.copy(); + if (srcA->docs.isEmpty() && !dstA->docs.isEmpty()) + { + srcA->name = dstA->name.copy(); + } + else if (!srcA->docs.isEmpty() && dstA->docs.isEmpty()) + { + dstA->name = srcA->name.copy(); + } } } } @@ -122,7 +122,7 @@ bool matchArguments(ArgumentList *,ArgumentList *, const char *cl=0,const char *ns=0,bool checkCV=TRUE, NamespaceList *usingNamespaces=0, ClassList *usingClasses=0); -void mergeArguments(ArgumentList *,ArgumentList *); +void mergeArguments(ArgumentList *,ArgumentList *,bool forceNameOverwrite=FALSE); QCString substituteClassNames(const QCString &s); QCString substitute(const char *s,const char *src,const char *dst); QCString resolveDefines(const char *n); diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index bcb4082..360d434 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -234,7 +234,10 @@ void XmlDocVisitor::visit(DocIncOperator *op) } if (op->type()!=DocIncOperator::Skip) { + popEnabled(); if (!m_hide) parseCode(m_ci,op->context(),op->text().latin1(),op->isExample(),op->exampleFile()); + pushEnabled(); + m_hide=TRUE; } if (op->isLast()) { |