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> &parameters()    { 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>&nbsp;";
   }
+  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;
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.