]> rtime.felk.cvut.cz Git - opencv.git/commitdiff
Latex parser, first cut
authorjamesb <jamesb@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Tue, 16 Mar 2010 21:46:39 +0000 (21:46 +0000)
committerjamesb <jamesb@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Tue, 16 Mar 2010 21:46:39 +0000 (21:46 +0000)
git-svn-id: https://code.ros.org/svn/opencv/trunk@2838 73c94f0f-984f-4a5f-82bc-2d8db8d8ee08

opencv/doc/plastex/latex.py [new file with mode: 0644]

diff --git a/opencv/doc/plastex/latex.py b/opencv/doc/plastex/latex.py
new file mode 100644 (file)
index 0000000..01c41f3
--- /dev/null
@@ -0,0 +1,74 @@
+import sys
+from pyparsing import Word, CharsNotIn, Optional, OneOrMore, ZeroOrMore, Group, ParseException, Literal, replaceWith
+
+import pyparsing
+help(pyparsing)
+
+class Argument:
+    def __init__(self, s, loc, toks):
+        self.str = toks[1]
+    def __repr__(self):
+        return "[%s]" % self.str
+def argfun(s, loc, toks):
+    return Argument(s, loc, toks)
+
+class Parameter:
+    def __init__(self, s, loc, toks):
+        self.str = toks[1]
+    def __repr__(self):
+        return "{%s}" % self.str
+def paramfun(s, loc, toks):
+    return Parameter(s, loc, toks)
+
+class TexCmd:
+    def __init__(self, s, loc, toks):
+        self.cmd = str(toks[0])[1:]
+        print 'cmd', self.cmd
+        self.args = toks[1].asList()
+        self.params = toks[2].asList()
+    def __repr__(self):
+        return self.cmd + "".join([repr(a) for a in self.args]) + "".join([repr(p) for p in self.params])
+
+class ZeroOrMoreAsList(ZeroOrMore):
+    def __init__(self, *args):
+        ZeroOrMore.__init__(self, *args)
+        def listify(s, loc, toks):
+            return [toks]
+        self.setParseAction(listify)
+
+arg = '[' + CharsNotIn("]") + ']'
+arg.setParseAction(argfun)
+param = '{' + Optional(CharsNotIn("}")) + '}'
+param.setParseAction(paramfun)
+texcmd = Word("\\", "abcdefghijklmnopqrstuvwxyz") + ZeroOrMoreAsList(arg) + ZeroOrMoreAsList(param)
+def texcmdfun(s, loc, toks):
+    if str(toks[0])[1:] == 'input':
+        filename = toks[2].asList()[0].str + "-py.tex"
+        print 'Now parsing', filename
+        return parsefile(filename)
+    else:
+        return TexCmd(s, loc, toks)
+texcmd.setParseAction(texcmdfun)
+
+legal = "".join([chr(x) for x in set(range(32, 127)) - set("\\")])
+document = ZeroOrMore(texcmd | Word(legal)) + Literal(chr(127)).suppress()
+
+def parsefile(filename):
+    f = open(filename, "rt")
+
+    lines = list(f)
+    def uncomment(s):
+        if '%' in s:
+            return s[:s.index('%')] + '\n'
+        else:
+            return s
+
+    lines = [uncomment(l) for l in lines]
+
+    docstr = "".join(lines) + chr(127)
+    print docstr
+    # document.setFailAction(None)
+    return document.parseString(docstr)
+
+for x in parsefile(sys.argv[1]):
+    print x