-from pyparsing import Word, CharsNotIn, Optional, OneOrMore, ZeroOrMore, Group, Forward, ParseException, Literal, Suppress, replaceWith, StringEnd, lineno, QuotedString, White, NotAny, ParserElement
+from pyparsing import Word, CharsNotIn, Optional, OneOrMore, ZeroOrMore, Group, Forward, ParseException, Literal, Suppress, replaceWith, StringEnd, lineno, QuotedString, White, NotAny, ParserElement, MatchFirst
import sys
class Argument:
backslash = chr(92)
texcmd = Forward()
-filler = CharsNotIn(backslash + '\n' + '$')
-filler2 = CharsNotIn(backslash + '\n' + '$' + '{}')
+filler = CharsNotIn(backslash + '$')
+filler2 = CharsNotIn(backslash + '$' + '{}')
arg = '[' + CharsNotIn("]") + ']'
arg.setParseAction(argfun)
dollarmath = QuotedString('$', multiline=True, unquoteResults=False)
param = Suppress(Literal('{')) + ZeroOrMoreAsList(dollarmath | filler2 | QuotedString('{', endQuoteChar='}', unquoteResults=False) | texcmd) + Suppress(Literal('}'))
param.setParseAction(paramfun)
-texcmd << (Literal("\\[") | Literal("\\]") | Literal("\\{") | Literal("\\}") | Literal("\\\\") | Word("\\", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")) + ZeroOrMoreAsList(arg) + ZeroOrMoreAsList(param)
+def bs(c): return Literal("\\" + c)
+singles = bs("[") | bs("]") | bs("{") | bs("}") | bs("\\") | bs("&") | bs("_") | bs(",") | bs("#") | bs("\n") | bs(";") | bs("|") | bs("%") | bs("*")
+texcmd << (singles | Word("\\", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", min = 2)) + ZeroOrMoreAsList(arg) + ZeroOrMoreAsList(param)
def texcmdfun(s, loc, toks):
if str(toks[0])[1:] == 'input':
filename = "../" + toks[2].asList()[0].str[0] + ".tex"
document = ZeroOrMore(dollarmath | texcmd | filler) + StringEnd().suppress()
if 0:
- s = "\\frac{\\sum_{I, \\, \\texttt{mask}(I) \\ne 0} \\texttt{arr}(I)_c}{N}"
+ s = "This is \\\\ test"
print s
for t in document.parseString(s):
if isinstance(t, TexCmd):
print '====> cmd=[%s]' % t.cmd, t
- print '====>', t
+ else:
+ print '====>', t
sys.exit(-1)
def latexparser(filename, startline):