mercurial/templater.py
changeset 1902 1cc5f25653a3
parent 1901 c64bef3d7043
child 1904 a7e416bf3c1d
equal deleted inserted replaced
1901:c64bef3d7043 1902:1cc5f25653a3
     9     't': '\t',
     9     't': '\t',
    10     'n': '\n',
    10     'n': '\n',
    11     'v': '\v',
    11     'v': '\v',
    12     }
    12     }
    13 
    13 
    14 def parsestring(s):
    14 def parsestring(s, quoted=True):
    15     fp = cStringIO.StringIO()
    15     fp = cStringIO.StringIO()
       
    16     if quoted:
       
    17         first = s[0]
       
    18         if len(s) < 2: raise SyntaxError(_('string too short'))
       
    19         if first not in "'\"": raise SyntaxError(_('invalid quote'))
       
    20         if s[-1] != first: raise SyntaxError(_('unmatched quotes'))
       
    21         s = s[1:-1]
    16     escape = False
    22     escape = False
    17     first = s[0]
    23     for c in s:
    18     if len(s) < 2: raise SyntaxError(_('string too short'))
       
    19     if first not in "'\"": raise SyntaxError(_('invalid quote'))
       
    20     if s[-1] != first: raise SyntaxError(_('unmatched quotes'))
       
    21     for c in s[1:-1]:
       
    22         if escape:
    24         if escape:
    23             fp.write(esctable.get(c, c))
    25             fp.write(esctable.get(c, c))
    24             escape = False
    26             escape = False
    25         elif c == '\\': escape = True
    27         elif c == '\\': escape = True
    26         elif c == first: raise SyntaxError(_('string ends early'))
    28         elif quoted and c == first: raise SyntaxError(_('string ends early'))
    27         else: fp.write(c)
    29         else: fp.write(c)
    28     if escape: raise SyntaxError(_('unterminated escape'))
    30     if escape: raise SyntaxError(_('unterminated escape'))
    29     return fp.getvalue()
    31     return fp.getvalue()
    30 
    32 
    31 class templater(object):
    33 class templater(object):