summaryrefslogtreecommitdiff
path: root/mako
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2013-12-24 07:04:27 -0500
committerNed Batchelder <ned@nedbatchelder.com>2013-12-24 11:10:24 -0500
commit4d813cabf9bd5dc8ea54673dae2d24a802a10fe3 (patch)
tree4344001e9dffc4104102465bef256d2c3779b59a /mako
parent62926b5d9c3bb2d5459d8a2c78b700c33530a333 (diff)
downloadmako-4d813cabf9bd5dc8ea54673dae2d24a802a10fe3.tar.gz
Improved handling of translator comments in Babel plugin
There's no reason an intervening node should clear the translator comments. There's already logic that discards the comments if they occurred too far away from the harvested string. This way we can write more natural templates and still have the translator comments that provide the best translated text. http://www.makotemplates.org/trac/ticket/225
Diffstat (limited to 'mako')
-rw-r--r--mako/ext/babelplugin.py18
1 files changed, 7 insertions, 11 deletions
diff --git a/mako/ext/babelplugin.py b/mako/ext/babelplugin.py
index ba244bd..538c048 100644
--- a/mako/ext/babelplugin.py
+++ b/mako/ext/babelplugin.py
@@ -80,41 +80,37 @@ def extract_nodes(nodes, keywords, comment_tags, options):
child_nodes = node.nodes
elif isinstance(node, parsetree.ControlLine):
if node.isend:
- translator_comments = []
in_translator_comments = False
continue
code = node.text
elif isinstance(node, parsetree.Code):
- # <% and <%! blocks would provide their own translator comments
- translator_comments = []
in_translator_comments = False
-
code = node.code.code
elif isinstance(node, parsetree.Expression):
code = node.code.code
else:
- translator_comments = []
- in_translator_comments = False
continue
# Comments don't apply unless they immediately preceed the message
if translator_comments and \
translator_comments[-1][0] < node.lineno - 1:
translator_comments = []
- else:
- translator_comments = \
- [comment[1] for comment in translator_comments]
+
+ translator_strings = [comment[1] for comment in translator_comments]
if isinstance(code, compat.text_type):
code = code.encode('ascii', 'backslashreplace')
+ used_translator_comments = False
code = compat.byte_buffer(code)
for lineno, funcname, messages, python_translator_comments \
in extract_python(code, keywords, comment_tags, options):
yield (node.lineno + (lineno - 1), funcname, messages,
- translator_comments + python_translator_comments)
+ translator_strings + python_translator_comments)
+ used_translator_comments = True
- translator_comments = []
+ if used_translator_comments:
+ translator_comments = []
in_translator_comments = False
if child_nodes: