summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/docparser.cpp20
-rw-r--r--src/docparser.h3
-rw-r--r--src/doxygen.cpp9
-rw-r--r--src/htmlgen.cpp2
-rw-r--r--src/latexdocvisitor.cpp13
-rw-r--r--src/mandocvisitor.cpp3
-rw-r--r--src/memberdef.cpp6
-rw-r--r--src/outputlist.cpp5
-rw-r--r--src/outputlist.h2
-rw-r--r--src/perlmodgen.cpp2
-rw-r--r--src/rtfdocvisitor.cpp3
-rw-r--r--src/scanner.l16
-rw-r--r--src/util.cpp15
-rw-r--r--src/util.h2
-rw-r--r--src/xmldocvisitor.cpp3
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();
+ }
}
}
}
diff --git a/src/util.h b/src/util.h
index eac09ae..f8f1c58 100644
--- a/src/util.h
+++ b/src/util.h
@@ -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())
{