Show More
@@ -172,6 +172,26 b' def _parsetemplate(tmpl, start, stop, qu' | |||
|
172 | 172 | raise error.ProgrammingError('unexpected type: %s' % typ) |
|
173 | 173 | raise error.ProgrammingError('unterminated scanning of template') |
|
174 | 174 | |
|
175 | def scantemplate(tmpl): | |
|
176 | """Scan (type, start, end) positions of outermost elements in template | |
|
177 | ||
|
178 | >>> list(scantemplate(b'foo{bar}"baz')) | |
|
179 | [('string', 0, 3), ('template', 3, 8), ('string', 8, 12)] | |
|
180 | >>> list(scantemplate(b'outer{"inner"}outer')) | |
|
181 | [('string', 0, 5), ('template', 5, 14), ('string', 14, 19)] | |
|
182 | >>> list(scantemplate(b'foo\\{escaped}')) | |
|
183 | [('string', 0, 5), ('string', 5, 13)] | |
|
184 | """ | |
|
185 | last = None | |
|
186 | for typ, val, pos in _scantemplate(tmpl, 0, len(tmpl)): | |
|
187 | if last: | |
|
188 | yield last + (pos,) | |
|
189 | if typ == 'end': | |
|
190 | return | |
|
191 | else: | |
|
192 | last = (typ, pos) | |
|
193 | raise error.ProgrammingError('unterminated scanning of template') | |
|
194 | ||
|
175 | 195 | def _scantemplate(tmpl, start, stop, quote=''): |
|
176 | 196 | """Parse template string into chunks of strings and template expressions""" |
|
177 | 197 | sepchars = '{' + quote |
General Comments 0
You need to be logged in to leave comments.
Login now