Re: \li2, \li3 revisited
Matthew Woehlke <[email protected]>
| Newsgroups | gmane.text.doxygen.devel |
|---|---|
| Message-ID | <[email protected]> |
Dimitri Van Heesch wrote: >> Dmitri, can we revisit this? I'm happy to see about getting it cleaned >> up against current svn if you'd be willing to accept it. > > Yes, I'm interested in a patch for this if it provides a solution to > make > \param like commands. Here's the old patch updated against svn r614. It built but I haven't tried to run it yet. Please let me know if this looks right, also if there are any changes that need to be made for this to be accepted. -- Matthew "Doggy!" -- Robots from Freefall (http://freefall.purrsia.com) ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Doxygen-develop mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/doxygen-develop
doxygen_li.patch.svn
(text/plain, 12.7 KB)
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index 4ad3b38..20eaaf0 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -109,6 +109,8 @@ CommandMap cmdMap[] =
{ "endmanonly", CMD_ENDMANONLY },
{ "includelineno", CMD_INCWITHLINES },
{ "inheritdoc", CMD_INHERITDOC },
+ { "li2", CMD_LI2 },
+ { "li3", CMD_LI3 },
{ 0, 0 }
};
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index 95ba3e1..e64848a 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -110,7 +110,9 @@ enum CommandType
CMD_ENDMANONLY = 76,
CMD_INCWITHLINES = 77,
CMD_INHERITDOC = 78,
- CMD_TPARAM = 79 | SIMPLESECT_BIT
+ CMD_TPARAM = 79 | SIMPLESECT_BIT,
+ CMD_LI2 = 80 | SIMPLESECT_BIT,
+ CMD_LI3 = 81 | SIMPLESECT_BIT
};
enum HtmlTagType
diff --git a/src/compound_xsd.h b/src/compound_xsd.h
index 47de4d3..83698e7 100644
--- a/src/compound_xsd.h
+++ b/src/compound_xsd.h
@@ -774,6 +774,8 @@
" <xsd:restriction base=\"xsd:string\">\n"
" <xsd:enumeration value=\"param\" />\n"
" <xsd:enumeration value=\"retval\" />\n"
+" <xsd:enumeration value=\"li2\" />\n"
+" <xsd:enumeration value=\"li3\" />\n"
" <xsd:enumeration value=\"exception\" />\n"
" <xsd:enumeration value=\"templateparam\" />\n"
" </xsd:restriction>\n"
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 63ff330..6265f0c 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -3918,6 +3918,25 @@ int DocParamList::parse(const QString &cmdName)
cmdName.data());
}
doctokenizerYYsetStateParam();
+
+ if (cmdName=="li3") {
+ tok=doctokenizerYYlex();
+ while (tok==TK_WORD) /* there is a parameter name */
+ {
+ if (g_token->name!="-")
+ handleLinkedWord(this,m_iparams);
+ tok=doctokenizerYYlex();
+ }
+ if (tok==0) /* premature end of comment block */
+ {
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected end of comment block while parsing the "
+ "argument of command %s",cmdName.data());
+ retval=0;
+ goto endparamlist;
+ }
+ ASSERT(tok==TK_WORD || tok==TK_WHITESPACE);
+ }
+
tok=doctokenizerYYlex();
while (tok==TK_WORD) /* there is a parameter name */
{
@@ -4653,6 +4672,12 @@ int DocPara::handleCommand(const QString &cmdName)
case CMD_RETVAL:
retval = handleParamSection(cmdName,DocParamSect::RetVal);
break;
+ case CMD_LI2:
+ retval = handleParamSection(cmdName,DocParamSect::List2Item);
+ break;
+ case CMD_LI3:
+ retval = handleParamSection(cmdName,DocParamSect::List3Item);
+ break;
case CMD_EXCEPTION:
retval = handleParamSection(cmdName,DocParamSect::Exception);
break;
diff --git a/src/docparser.h b/src/docparser.h
index 478f1b9..47933a3 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -939,7 +939,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode
public:
enum Type
{
- Unknown, Param, RetVal, Exception, TemplateParam
+ Unknown, Param, RetVal, Exception, TemplateParam, List2Item, List3Item
};
enum Direction
{
@@ -950,6 +950,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode
int parse(const QString &cmdName,bool xmlContext,Direction d);
Kind kind() const { return Kind_ParamSect; }
Type type() const { return m_type; }
+ bool isInline() const { return m_type == List2Item || m_type == List3Item; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocParamSect>::accept(this,v); }
@@ -1015,6 +1016,7 @@ class DocParamList : public DocNode
Kind kind() const { return Kind_ParamList; }
DocNode *parent() const { return m_parent; }
const QList<DocNode> ¶meters() { return m_params; }
+ const QList<DocNode> &iparameters() { return m_iparams; }
DocParamSect::Type type() const { return m_type; }
DocParamSect::Direction direction() const { return m_dir; }
void markFirst(bool b=TRUE) { m_isFirst=b; }
@@ -1036,6 +1038,7 @@ class DocParamList : public DocNode
DocNode * m_parent;
QList<DocPara> m_paragraphs;
QList<DocNode> m_params;
+ QList<DocNode> m_iparams;
DocParamSect::Type m_type;
DocParamSect::Direction m_dir;
bool m_isFirst;
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index fcd8157..6c91bfd 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -926,25 +926,28 @@ void HtmlDocVisitor::visitPost(DocSecRefList *)
void HtmlDocVisitor::visitPre(DocParamSect *s)
{
if (m_hide) return;
- m_t << "<dl compact><dt><b>";
- switch(s->type())
+ if (!s->isInline())
{
- case DocParamSect::Param:
- m_t << theTranslator->trParameters(); break;
- case DocParamSect::RetVal:
- m_t << theTranslator->trReturnValues(); break;
- case DocParamSect::Exception:
- m_t << theTranslator->trExceptions(); break;
- case DocParamSect::TemplateParam:
- /* TODO: add this
- m_t << theTranslator->trTemplateParam(); break;
- */
- m_t << "Template Parameters"; break;
- default:
- ASSERT(0);
+ m_t << "<dl compact><dt><b>";
+ switch(s->type())
+ {
+ case DocParamSect::Param:
+ m_t << theTranslator->trParameters(); break;
+ case DocParamSect::RetVal:
+ m_t << theTranslator->trReturnValues(); break;
+ case DocParamSect::Exception:
+ m_t << theTranslator->trExceptions(); break;
+ case DocParamSect::TemplateParam:
+ /* TODO: add this
+ m_t << theTranslator->trTemplateParam(); break;
+ */
+ m_t << "Template Parameters"; break;
+ default:
+ ASSERT(0);
+ }
+ m_t << ":";
+ m_t << "</b></dt><dd>" << endl;
}
- m_t << ":";
- m_t << "</b></dt><dd>" << endl;
m_t << " <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl;
}
@@ -976,6 +979,23 @@ void HtmlDocVisitor::visitPre(DocParamList *pl)
}
m_t << "]</tt> ";
}
+ QListIterator<DocNode> lii(pl->iparameters());
+ if (lii.count()>0) {
+ DocNode *iparam;
+ bool ifirst=TRUE;
+ for (lii.toFirst();(iparam=lii.current());++lii)
+ {
+ if (!ifirst) m_t << ","; else ifirst=FALSE;
+ if (iparam->kind()==DocNode::Kind_Word)
+ {
+ visit((DocWord*)iparam);
+ }
+ else if (iparam->kind()==DocNode::Kind_LinkedWord)
+ {
+ visit((DocLinkedWord*)iparam);
+ }
+ }
+ }
m_t << "</td><td valign=\"top\"><em>";
//QStrListIterator li(pl->parameters());
//const char *s;
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 0516e37..9e81bc8 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -917,25 +917,28 @@ void LatexDocVisitor::visitPost(DocSecRefList *)
void LatexDocVisitor::visitPre(DocParamSect *s)
{
if (m_hide) return;
- m_t << "\\begin{Desc}" << endl;
- m_t << "\\item[";
- switch(s->type())
+ if (!s->isInline())
{
- case DocParamSect::Param:
- filter(theTranslator->trParameters()); break;
- case DocParamSect::RetVal:
- filter(theTranslator->trReturnValues()); break;
- case DocParamSect::Exception:
- filter(theTranslator->trExceptions()); break;
- case DocParamSect::TemplateParam:
- /* TODO: add this
- filter(theTranslator->trTemplateParam()); break;
- */
- filter("Template Parameters"); break;
- default:
- ASSERT(0);
+ m_t << "\\begin{Desc}" << endl;
+ m_t << "\\item[";
+ switch(s->type())
+ {
+ case DocParamSect::Param:
+ filter(theTranslator->trParameters()); break;
+ case DocParamSect::RetVal:
+ filter(theTranslator->trReturnValues()); break;
+ case DocParamSect::Exception:
+ filter(theTranslator->trExceptions()); break;
+ case DocParamSect::TemplateParam:
+ /* TODO: add this
+ filter(theTranslator->trTemplateParam()); break;
+ */
+ filter("Template Parameters"); break;
+ default:
+ ASSERT(0);
+ }
+ m_t << ":]" << endl;
}
- m_t << ":]" << endl;
m_t << "\\begin{description}" << endl;
}
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index 4dd8010..5d4c72f 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -798,6 +798,7 @@ void ManDocVisitor::visitPre(DocParamSect *s)
m_t << endl;
m_t << ".PP" << endl;
}
+ if (s->isInline()) return;
m_t << "\\fB";
switch(s->type())
{
@@ -819,11 +820,11 @@ void ManDocVisitor::visitPre(DocParamSect *s)
m_t << ".RS 4" << endl;
}
-void ManDocVisitor::visitPost(DocParamSect *)
+void ManDocVisitor::visitPost(DocParamSect *s)
{
if (m_hide) return;
if (!m_firstCol) m_t << endl;
- m_t << ".RE" << endl;
+ if (!s->isInline()) m_t << ".RE" << endl;
m_t << ".PP" << endl;
m_firstCol=TRUE;
}
diff --git a/src/outputgen.h b/src/outputgen.h
index 9dbe5dc..328f21a 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -88,7 +88,7 @@ class BaseOutputDocInterface : public CodeOutputInterface
{
public:
virtual ~BaseOutputDocInterface() {}
- enum ParamListTypes { Param, RetVal, Exception };
+ enum ParamListTypes { Param, RetVal, Exception, List2Item, List3Item };
enum SectionTypes { /*See, Return, Author, Version,
Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre,
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index 9c7f033..e29202c 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -1160,6 +1160,8 @@ void PerlModDocVisitor::visitPre(DocParamSect *s)
{
case DocParamSect::Param: type = "params"; break;
case DocParamSect::RetVal: type = "retvals"; break;
+ case DocParamSect::List2Item: type = "list2items"; break;
+ case DocParamSect::List3Item: type = "list3items"; break;
case DocParamSect::Exception: type = "exceptions"; break;
case DocParamSect::TemplateParam: type = "templateparam"; break;
case DocParamSect::Unknown:
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 30e919e..a0d9ef9 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -588,6 +588,8 @@ class PrintDocVisitor : public DocVisitor
{
case DocParamSect::Param: printf("param"); break;
case DocParamSect::RetVal: printf("retval"); break;
+ case DocParamSect::List2Item: printf("li2"); break;
+ case DocParamSect::List3Item: printf("li3"); break;
case DocParamSect::Exception: printf("exception"); break;
case DocParamSect::TemplateParam: printf("templateparam"); break;
case DocParamSect::Unknown: printf("unknown"); break;
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 4ed7c16..0da218c 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -1163,39 +1163,42 @@ void RTFDocVisitor::visitPre(DocParamSect *s)
if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocParamSect)}\n");
m_t << "{"; // start param list
- if (!m_lastIsPara) m_t << "\\par" << endl;
- //m_t << "{\\b "; // start bold
- m_t << "{" << rtf_Style["Heading5"]->reference << endl;
- switch(s->type())
+ if (!s->isInline())
{
- case DocParamSect::Param:
- m_t << theTranslator->trParameters(); break;
- case DocParamSect::RetVal:
- m_t << theTranslator->trReturnValues(); break;
- case DocParamSect::Exception:
- m_t << theTranslator->trExceptions(); break;
- case DocParamSect::TemplateParam:
- /* TODO: add this
- m_t << theTranslator->trTemplateParam(); break;
- */
- m_t << "Template Parameters"; break;
- default:
- ASSERT(0);
+ if (!m_lastIsPara) m_t << "\\par" << endl;
+ //m_t << "{\\b "; // start bold
+ m_t << "{" << rtf_Style["Heading5"]->reference << endl;
+ switch(s->type())
+ {
+ case DocParamSect::Param:
+ m_t << theTranslator->trParameters(); break;
+ case DocParamSect::RetVal:
+ m_t << theTranslator->trReturnValues(); break;
+ case DocParamSect::Exception:
+ m_t << theTranslator->trExceptions(); break;
+ case DocParamSect::TemplateParam:
+ /* TODO: add this
+ m_t << theTranslator->trTemplateParam(); break;
+ */
+ m_t << "Template Parameters"; break;
+ default:
+ ASSERT(0);
+ }
+ m_t << ":";
+ m_t << "\\par";
+ m_t << "}" << endl;
+ incIndentLevel();
}
- m_t << ":";
- m_t << "\\par";
- m_t << "}" << endl;
- incIndentLevel();
m_t << rtf_Style_Reset << getStyle("DescContinue");
m_lastIsPara=TRUE;
}
-void RTFDocVisitor::visitPost(DocParamSect *)
+void RTFDocVisitor::visitPost(DocParamSect *s)
{
if (m_hide) return;
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocParamSect)}\n");
//m_t << "\\par" << endl;
- decIndentLevel();
+ if (!s->isInline()) decIndentLevel();
m_t << "}" << endl;
}