X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/e74117f172e29e8a980e2c9de929ad50d3769150..4c4a51cb6bd01e2e813354502b8327285fc00e75:/blib2to3/pgen2/literals.py?ds=sidebyside diff --git a/blib2to3/pgen2/literals.py b/blib2to3/pgen2/literals.py index b9b63e6..93bee52 100644 --- a/blib2to3/pgen2/literals.py +++ b/blib2to3/pgen2/literals.py @@ -3,18 +3,21 @@ """Safely evaluate Python string literals without using eval().""" -import re - -simple_escapes = {"a": "\a", - "b": "\b", - "f": "\f", - "n": "\n", - "r": "\r", - "t": "\t", - "v": "\v", - "'": "'", - '"': '"', - "\\": "\\"} +import regex as re + +simple_escapes = { + "a": "\a", + "b": "\b", + "f": "\f", + "n": "\n", + "r": "\r", + "t": "\t", + "v": "\v", + "'": "'", + '"': '"', + "\\": "\\", +} + def escape(m): all, tail = m.group(0, 1) @@ -37,16 +40,18 @@ def escape(m): raise ValueError("invalid octal string escape ('\\%s')" % tail) from None return chr(i) + def evalString(s): assert s.startswith("'") or s.startswith('"'), repr(s[:1]) q = s[0] - if s[:3] == q*3: - q = q*3 - assert s.endswith(q), repr(s[-len(q):]) - assert len(s) >= 2*len(q) - s = s[len(q):-len(q)] + if s[:3] == q * 3: + q = q * 3 + assert s.endswith(q), repr(s[-len(q) :]) + assert len(s) >= 2 * len(q) + s = s[len(q) : -len(q)] return re.sub(r"\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3})", escape, s) + def test(): for i in range(256): c = chr(i)