annotate genshi/template/interpolation.py @ 798:c690de5abafd stable-0.5.x

Ported [914], [970], and [971] to 0.5.x branch.
author cmlenz
date Thu, 15 Jan 2009 23:50:09 +0000
parents df6a09d69d5c
children 4376010bb97e
rev   line source
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
2 #
719
09a90feb9269 Fix copyright years.
cmlenz
parents: 714
diff changeset
3 # Copyright (C) 2007-2008 Edgewall Software
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
4 # All rights reserved.
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
5 #
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
8 # are also available at http://genshi.edgewall.org/wiki/License.
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
9 #
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
12 # history and logs, available at http://genshi.edgewall.org/log/.
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
13
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
14 """String interpolation routines, i.e. the splitting up a given text into some
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
15 parts that are literal strings, and others that are Python expressions.
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
16 """
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
17
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
18 from itertools import chain
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
19 import os
732
df6a09d69d5c Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
cmlenz
parents: 719
diff changeset
20 import re
df6a09d69d5c Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
cmlenz
parents: 719
diff changeset
21 from tokenize import PseudoToken
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
22
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
23 from genshi.core import TEXT
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
24 from genshi.template.base import TemplateSyntaxError, EXPR
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
25 from genshi.template.eval import Expression
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
26
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
27 __all__ = ['interpolate']
425
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
28 __docformat__ = 'restructuredtext en'
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
29
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
30 NAMESTART = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
31 NAMECHARS = NAMESTART + '.0123456789'
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
32 PREFIX = '$'
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
33
732
df6a09d69d5c Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
cmlenz
parents: 719
diff changeset
34 token_re = re.compile('%s|%s(?s)' % (
df6a09d69d5c Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
cmlenz
parents: 719
diff changeset
35 r'[uU]?[rR]?("""|\'\'\')((?<!\\)\\\1|.)*?\1',
df6a09d69d5c Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
cmlenz
parents: 719
diff changeset
36 PseudoToken
df6a09d69d5c Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
cmlenz
parents: 719
diff changeset
37 ))
df6a09d69d5c Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
cmlenz
parents: 719
diff changeset
38
714
7e6496bde18a The `Template` class and its subclasses, as well as the interpolation API, now take an `filepath` parameter instead of `basedir`. Closes #207. Thanks to Waldemar Kornewald for the patch.
cmlenz
parents: 606
diff changeset
39 def interpolate(text, filepath=None, lineno=-1, offset=0, lookup='strict'):
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
40 """Parse the given string and extract expressions.
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
41
425
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
42 This function is a generator that yields `TEXT` events for literal strings,
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
43 and `EXPR` events for expressions, depending on the results of parsing the
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
44 string.
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
45
442
ff7c72b52fb2 Back out [510] and instead implement configurable error handling modes. The default is the old 0.3.x behaviour, but more strict error handling is available as an option.
cmlenz
parents: 425
diff changeset
46 >>> for kind, data, pos in interpolate("hey ${foo}bar"):
798
c690de5abafd Ported [914], [970], and [971] to 0.5.x branch.
cmlenz
parents: 732
diff changeset
47 ... print kind, repr(data)
442
ff7c72b52fb2 Back out [510] and instead implement configurable error handling modes. The default is the old 0.3.x behaviour, but more strict error handling is available as an option.
cmlenz
parents: 425
diff changeset
48 TEXT u'hey '
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
49 EXPR Expression('foo')
442
ff7c72b52fb2 Back out [510] and instead implement configurable error handling modes. The default is the old 0.3.x behaviour, but more strict error handling is available as an option.
cmlenz
parents: 425
diff changeset
50 TEXT u'bar'
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
51
425
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
52 :param text: the text to parse
714
7e6496bde18a The `Template` class and its subclasses, as well as the interpolation API, now take an `filepath` parameter instead of `basedir`. Closes #207. Thanks to Waldemar Kornewald for the patch.
cmlenz
parents: 606
diff changeset
53 :param filepath: absolute path to the file in which the text was found
7e6496bde18a The `Template` class and its subclasses, as well as the interpolation API, now take an `filepath` parameter instead of `basedir`. Closes #207. Thanks to Waldemar Kornewald for the patch.
cmlenz
parents: 606
diff changeset
54 (optional)
425
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
55 :param lineno: the line number at which the text was found (optional)
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
56 :param offset: the column number at which the text starts in the source
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
57 (optional)
442
ff7c72b52fb2 Back out [510] and instead implement configurable error handling modes. The default is the old 0.3.x behaviour, but more strict error handling is available as an option.
cmlenz
parents: 425
diff changeset
58 :param lookup: the variable lookup mechanism; either "lenient" (the
ff7c72b52fb2 Back out [510] and instead implement configurable error handling modes. The default is the old 0.3.x behaviour, but more strict error handling is available as an option.
cmlenz
parents: 425
diff changeset
59 default), "strict", or a custom lookup class
425
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
60 :return: a list of `TEXT` and `EXPR` events
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
61 :raise TemplateSyntaxError: when a syntax error in an expression is
5b248708bbed Try to use proper reStructuredText for docstrings throughout.
cmlenz
parents: 422
diff changeset
62 encountered
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
63 """
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
64 pos = [filepath, lineno, offset]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
65
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
66 textbuf = []
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
67 textpos = None
422
95089b6e37ca More work to include absolute file paths in exceptions.
cmlenz
parents: 407
diff changeset
68 for is_expr, chunk in chain(lex(text, pos, filepath), [(True, '')]):
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
69 if is_expr:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
70 if textbuf:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
71 yield TEXT, u''.join(textbuf), textpos
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
72 del textbuf[:]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
73 textpos = None
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
74 if chunk:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
75 try:
442
ff7c72b52fb2 Back out [510] and instead implement configurable error handling modes. The default is the old 0.3.x behaviour, but more strict error handling is available as an option.
cmlenz
parents: 425
diff changeset
76 expr = Expression(chunk.strip(), pos[0], pos[1],
601
9ae986bcba9a Simplify implementation of `py:with` directive by compiling to a `Suite`, instead of manually breaking up the statement and compiling each part to an `Expression`. Also, the first line of code in a `Suite` is now stored as the "function name" of the bytecode, so that it shows up in tracebacks.
cmlenz
parents: 544
diff changeset
77 lookup=lookup)
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
78 yield EXPR, expr, tuple(pos)
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
79 except SyntaxError, err:
422
95089b6e37ca More work to include absolute file paths in exceptions.
cmlenz
parents: 407
diff changeset
80 raise TemplateSyntaxError(err, filepath, pos[1],
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
81 pos[2] + (err.offset or 0))
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
82 else:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
83 textbuf.append(chunk)
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
84 if textpos is None:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
85 textpos = tuple(pos)
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
86
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
87 if '\n' in chunk:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
88 lines = chunk.splitlines()
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
89 pos[1] += len(lines) - 1
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
90 pos[2] += len(lines[-1])
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
91 else:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
92 pos[2] += len(chunk)
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
93
422
95089b6e37ca More work to include absolute file paths in exceptions.
cmlenz
parents: 407
diff changeset
94 def lex(text, textpos, filepath):
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
95 offset = pos = 0
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
96 end = len(text)
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
97 escaped = False
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
98
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
99 while 1:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
100 if escaped:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
101 offset = text.find(PREFIX, offset + 2)
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
102 escaped = False
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
103 else:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
104 offset = text.find(PREFIX, pos)
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
105 if offset < 0 or offset == end - 1:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
106 break
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
107 next = text[offset + 1]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
108
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
109 if next == '{':
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
110 if offset > pos:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
111 yield False, text[pos:offset]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
112 pos = offset + 2
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
113 level = 1
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
114 while level:
732
df6a09d69d5c Fix expression interpolation for expression containing triple-quoted multiline strings. Thanks to Armin Ronacher for reporting the issue and providing a patch.
cmlenz
parents: 719
diff changeset
115 match = token_re.match(text, pos)
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
116 if match is None:
422
95089b6e37ca More work to include absolute file paths in exceptions.
cmlenz
parents: 407
diff changeset
117 raise TemplateSyntaxError('invalid syntax', filepath,
95089b6e37ca More work to include absolute file paths in exceptions.
cmlenz
parents: 407
diff changeset
118 *textpos[1:])
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
119 pos = match.end()
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
120 tstart, tend = match.regs[3]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
121 token = text[tstart:tend]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
122 if token == '{':
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
123 level += 1
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
124 elif token == '}':
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
125 level -= 1
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
126 yield True, text[offset + 2:pos - 1]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
127
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
128 elif next in NAMESTART:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
129 if offset > pos:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
130 yield False, text[pos:offset]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
131 pos = offset
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
132 pos += 1
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
133 while pos < end:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
134 char = text[pos]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
135 if char not in NAMECHARS:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
136 break
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
137 pos += 1
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
138 yield True, text[offset + 1:pos].strip()
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
139
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
140 elif not escaped and next == PREFIX:
526
bd13c96cbfe4 Fix interpolation of short-form expressions that include literal text before the expression. Thanks to Alec for reporting the issue.
cmlenz
parents: 442
diff changeset
141 if offset > pos:
bd13c96cbfe4 Fix interpolation of short-form expressions that include literal text before the expression. Thanks to Alec for reporting the issue.
cmlenz
parents: 442
diff changeset
142 yield False, text[pos:offset]
407
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
143 escaped = True
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
144 pos = offset + 1
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
145
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
146 else:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
147 yield False, text[pos:offset + 1]
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
148 pos = offset + 1
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
149
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
150 if pos < end:
ea71a51e0258 Move string interpolation code into separate module (`genshi.template.interpolation`).
cmlenz
parents:
diff changeset
151 yield False, text[pos:]
Copyright (C) 2012-2017 Edgewall Software