diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2014-10-26 16:27:25 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2014-10-26 16:27:25 +1300 |
commit | bd1f7ebb5c3cf3dfa613e194f4728bae1420b241 (patch) | |
tree | 1b7f5cc713b766c9cc088436033a36ee49600045 /libpathod/language.py | |
parent | 974bd9d0f9f3d231ff99496c55ae40355398cfc6 (diff) | |
download | mitmproxy-bd1f7ebb5c3cf3dfa613e194f4728bae1420b241.tar.gz mitmproxy-bd1f7ebb5c3cf3dfa613e194f4728bae1420b241.tar.bz2 mitmproxy-bd1f7ebb5c3cf3dfa613e194f4728bae1420b241.zip |
Improve netability of grammars
Diffstat (limited to 'libpathod/language.py')
-rw-r--r-- | libpathod/language.py | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/libpathod/language.py b/libpathod/language.py index 42fffcf8..e1f6820f 100644 --- a/libpathod/language.py +++ b/libpathod/language.py @@ -14,6 +14,11 @@ import utils BLOCKSIZE = 1024 TRUNCATE = 1024 + +def escape_backslash(s): + return s.replace("\\", "\\\\") + + def quote(s): quotechar = s[0] s = s[1:-1] @@ -186,7 +191,7 @@ class LiteralGenerator: return self.s.__getslice__(a, b) def __repr__(self): - return '"%s"'%self.s + return "'%s'"%self.s class RandomGenerator: @@ -274,10 +279,16 @@ class ValueLiteral(_ValueLiteral): @classmethod def expr(klass): e = v_literal.copy() - return e.setParseAction(lambda x: klass(*x)) + return e.setParseAction(klass.parseAction) + + @classmethod + def parseAction(klass, x): + v = klass(*x) + return v def spec(self): - return quote("'%s'"%self.val.encode("string_escape")) + ret = "'%s'"%self.val.encode("string_escape") + return ret class ValueNakedLiteral(_ValueLiteral): @@ -361,7 +372,7 @@ class ValueFile(_Token): return FileGenerator(s) def spec(self): - return '<"%s"'%self.path.encode("string_escape") + return "<'%s'"%self.path.encode("string_escape") Value = pp.MatchFirst( @@ -561,8 +572,7 @@ class PathodSpec(_Token): def freeze(self, settings): f = self.parsed.freeze(settings).spec() - print [f] - return PathodSpec(ValueLiteral(f)) + return PathodSpec(ValueLiteral(f.encode("string_escape"))) class Path(_Component): |