templater: use str.decode in parse_string
authorMatt Mackall <mpm@selenic.com>
Mon, 13 Nov 2006 13:26:57 -0600
changeset 3632 231393b7316f
parent 3631 770c4fc03b8e
child 3633 bf3dec184c78
templater: use str.decode in parse_string
mercurial/templater.py
--- a/mercurial/templater.py	Mon Nov 13 13:26:57 2006 -0600
+++ b/mercurial/templater.py	Mon Nov 13 13:26:57 2006 -0600
@@ -10,34 +10,19 @@
 from node import *
 demandload(globals(), "cStringIO cgi re sys os time urllib util textwrap")
 
-esctable = {
-    '\\': '\\',
-    'r': '\r',
-    't': '\t',
-    'n': '\n',
-    'v': '\v',
-    }
-
 def parsestring(s, quoted=True):
     '''parse a string using simple c-like syntax.
     string must be in quotes if quoted is True.'''
-    fp = cStringIO.StringIO()
     if quoted:
         first = s[0]
         if len(s) < 2: raise SyntaxError(_('string too short'))
         if first not in "'\"": raise SyntaxError(_('invalid quote'))
         if s[-1] != first: raise SyntaxError(_('unmatched quotes'))
-        s = s[1:-1]
-    escape = False
-    for c in s:
-        if escape:
-            fp.write(esctable.get(c, c))
-            escape = False
-        elif c == '\\': escape = True
-        elif quoted and c == first: raise SyntaxError(_('string ends early'))
-        else: fp.write(c)
-    if escape: raise SyntaxError(_('unterminated escape'))
-    return fp.getvalue()
+        s = s[1:-1].decode('string_escape')
+        if first in s: raise SyntaxError(_('string ends early'))
+        return s
+
+    return s.decode('string_escape')
 
 class templater(object):
     '''template expansion engine.