Mercurial > genshi > genshi-test
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 | 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 | 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:] |