Mercurial > public > mercurial-scm > hg
comparison mercurial/templater.py @ 1902:1cc5f25653a3
make parsestring work with strings that do not have quotes.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Mon, 27 Feb 2006 11:18:56 -0800 |
parents | c64bef3d7043 |
children | a7e416bf3c1d |
comparison
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): |