diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2013-12-24 07:04:27 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2013-12-24 11:10:24 -0500 |
commit | 4d813cabf9bd5dc8ea54673dae2d24a802a10fe3 (patch) | |
tree | 4344001e9dffc4104102465bef256d2c3779b59a /mako | |
parent | 62926b5d9c3bb2d5459d8a2c78b700c33530a333 (diff) | |
download | mako-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.py | 18 |
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: |