[mlpack-git] master: Better labeling of doxygen template output. (75c8b77)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Thu Aug 27 19:40:54 EDT 2015


Repository : https://github.com/mlpack/mlpack.org

On branch  : master
Link       : https://github.com/mlpack/mlpack.org/compare/5278e8fd3c5436ace56cd787823ddab483d0bfb3...75c8b77a6b071b5f071810492ddc919172e55047

>---------------------------------------------------------------

commit 75c8b77a6b071b5f071810492ddc919172e55047
Author: Ryan Curtin <ryan at ratml.org>
Date:   Thu Aug 27 19:40:30 2015 -0400

    Better labeling of doxygen template output.


>---------------------------------------------------------------

75c8b77a6b071b5f071810492ddc919172e55047
 docs/doxygen-post/template_annotator.py      | 48 ++++++++++++++++++++++++----
 docs/doxygen-post/test_template_annotator.py | 12 +++++--
 2 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/docs/doxygen-post/template_annotator.py b/docs/doxygen-post/template_annotator.py
index e73d692..3410b9f 100644
--- a/docs/doxygen-post/template_annotator.py
+++ b/docs/doxygen-post/template_annotator.py
@@ -1,6 +1,8 @@
 from pyparsing import Literal, Word, Combine, Group, Optional, ZeroOrMore, \
     Forward, nums, alphas, alphanums, LineEnd, ParseException, Suppress, \
     OneOrMore, delimitedList
+import re
+import sys
 
 class TemplateAnnotator:
 
@@ -13,7 +15,7 @@ class TemplateAnnotator:
     typenameLiteral = Literal("typename")("type_decl")
     classLiteral = Literal("class")("type_decl")
     equalLiteral = Literal("=")
-    comma = Literal(",")
+    comma = Literal(",")("comma")
     ellipses = Literal("...")
     operatorLiteral = Literal("operator")
     tildeLiteral = Literal("~")
@@ -29,13 +31,25 @@ class TemplateAnnotator:
 
     template_param_list = Forward()
 
-    template_param = Group((classLiteral + Optional(identifier) + Optional(default_argument)) |\
-                           (typenameLiteral + Optional(identifier) + Optional(default_argument)) |\
-                           (templateLiteral + openBracket + template_param_list + closeBracket + classLiteral + Optional(identifier) + Optional(default_argument)))("template_param*")
+    template_param = Group(classLiteral + Optional(identifier) + Optional(default_argument))("template_param*") |\
+                     Group(typenameLiteral + Optional(identifier) + Optional(default_argument))("template_param*") |\
+                     Group(templateLiteral + openBracket + template_param_list + closeBracket + classLiteral + Optional(identifier) + Optional(default_argument))("template_template_param*")
 
-    template_param_list << Group(delimitedList(template_param))("template_param_list")
+    # This needs to be its own separate thing so that the comma gets grouped in
+    # the template_param div.
+    template_param_with_comma = Group(classLiteral + Optional(identifier) + Optional(default_argument) + comma)("template_param*") |\
+                                Group(typenameLiteral + Optional(identifier) + Optional(default_argument) + comma)("template_param*") |\
+                                Group(templateLiteral + openBracket + template_param_list + Group(classLiteral + Optional(identifier) + Optional(default_argument) + comma)("template_template_param_name"))("template_template_param*")
 
-    self.grammar = (Literal("template")("template_decl") + openBracket + template_param_list + closeBracket) |\
+    # This also needs to be its own separate thing so that the closing bracket
+    # gets grouped in the template_param div.
+    template_param_with_close = Group(classLiteral + Optional(identifier) + Optional(default_argument) + closeBracket)("template_param*") |\
+                                Group(typenameLiteral + Optional(identifier) + Optional(default_argument) + closeBracket)("template_param*") |\
+                                Group(templateLiteral + openBracket + template_param_list + Group(classLiteral + Optional(identifier) + Optional(default_argument) + closeBracket)("template_template_param_name"))("template_template_param")
+
+    template_param_list << Group(ZeroOrMore(template_param_with_comma) + template_param_with_close)("template_param_list")
+
+    self.grammar = (Literal("template")("template_decl") + openBracket + template_param_list) |\
                    (Literal("template")("template_decl") + openBracket + closeBracket)
 
   def process(self, string):
@@ -43,7 +57,7 @@ class TemplateAnnotator:
       a = self.grammar.parseString(string)
 
       # Now process the string.  We get XML back, but we really need named divs.
-      return a.asXML('template_expr')\
+      retstr = a.asXML('template_expr')\
           .replace('<template_expr', '<div class="template_expr"')\
           .replace('</template_expr', '</div')\
           .replace('<template_decl', '<div class="template_decl"')\
@@ -58,10 +72,30 @@ class TemplateAnnotator:
           .replace('</template_param_list', '</div')\
           .replace('<template_param', '<div class="template_param"')\
           .replace('</template_param', '</div')\
+          .replace('<template_template_param_name', '<div class="template_template_param_name"')\
+          .replace('</template_template_param_name', '</div')\
+          .replace('<template_template_param', '<div class="template_template_param"')\
+          .replace('</template_template_param', '</div')\
           .replace('<type_decl', '<div class="type_decl"')\
           .replace('</type_decl', '</div')\
           .replace('<identifier', '<div class="identifier"')\
           .replace('</identifier', '</div')\
+          .replace('<default_argument', '<div class="default_argument"')\
+          .replace('</default_argument', '</div')\
+          .replace('<equals', '<div class="equals"')\
+          .replace('</equals', '</div')\
+          .replace('<comma', '<div class="comma"')\
+          .replace('</comma', '</div')\
+          .replace('<template', '<div class="template"')\
+          .replace('</template', '</div')
+
+      # Strip away extra spaces.
+      retstr = re.sub(r"^[ ]*", "", retstr)
+      retstr = re.sub(r"[ ]*$", "", retstr)
+      retstr = re.sub(r"\n[ ]*", "\n", retstr)
+      retstr = re.sub(r"[ ]*\n", "\n", retstr)
+
+      return retstr.replace('\n', '')
 
     except ParseException, err:
 #      print err.line
diff --git a/docs/doxygen-post/test_template_annotator.py b/docs/doxygen-post/test_template_annotator.py
index 5953448..9bf698b 100755
--- a/docs/doxygen-post/test_template_annotator.py
+++ b/docs/doxygen-post/test_template_annotator.py
@@ -6,10 +6,10 @@ a = t.grammar.parseString('template &lt; typename A &gt;')
 print a.asXML('div')
 print ''
 
-a = t.grammar.parseString('template &lt; &gt;')
+#a = t.grammar.parseString('template &lt; &gt;')
 
-print a.asXML('div')
-print ''
+#print a.asXML('div')
+#print ''
 
 a = t.grammar.parseString('template &lt; typename A, typename B &gt;')
 
@@ -35,3 +35,9 @@ a = t.grammar.parseString('template &lt; template &lt; typename A &gt; class B &
 
 print a.asXML('div')
 print ''
+
+a = t.grammar.parseString('template&lt;typename MetricType, typename StatisticType = EmptyStatistic, typename MatType = arma::mat, template&lt; typename BoundMetricType &gt; class BoundType = bound::HRectBound, template&lt; typename SplitBoundType, typename SplitMatType &gt; class SplitType = MidpointSplit &gt;')
+#a = t.grammar.parseString('template&lt;template&lt; typename BoundMetricType &gt; class BoundType = bound::HRectBound, template&lt; typename SplitBoundType, typename SplitMatType &gt; class SplitType = MidpointSplit &gt;')
+
+print a.asXML('div')
+print ''



More information about the mlpack-git mailing list