diff options
Diffstat (limited to 'lib/spack/external/jinja2/ext.py')
-rw-r--r-- | lib/spack/external/jinja2/ext.py | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/spack/external/jinja2/ext.py b/lib/spack/external/jinja2/ext.py index 75e1f3b625..0734a84f73 100644 --- a/lib/spack/external/jinja2/ext.py +++ b/lib/spack/external/jinja2/ext.py @@ -10,6 +10,8 @@ :copyright: (c) 2017 by the Jinja Team. :license: BSD. """ +import re + from jinja2 import nodes from jinja2.defaults import BLOCK_START_STRING, \ BLOCK_END_STRING, VARIABLE_START_STRING, VARIABLE_END_STRING, \ @@ -223,6 +225,7 @@ class InternationalizationExtension(Extension): plural_expr = None plural_expr_assignment = None variables = {} + trimmed = None while parser.stream.current.type != 'block_end': if variables: parser.stream.expect('comma') @@ -241,6 +244,9 @@ class InternationalizationExtension(Extension): if parser.stream.current.type == 'assign': next(parser.stream) variables[name.value] = var = parser.parse_expression() + elif trimmed is None and name.value in ('trimmed', 'notrimmed'): + trimmed = name.value == 'trimmed' + continue else: variables[name.value] = var = nodes.Name(name.value, 'load') @@ -256,7 +262,7 @@ class InternationalizationExtension(Extension): parser.stream.expect('block_end') - plural = plural_names = None + plural = None have_plural = False referenced = set() @@ -297,6 +303,13 @@ class InternationalizationExtension(Extension): elif plural_expr is None: parser.fail('pluralize without variables', lineno) + if trimmed is None: + trimmed = self.environment.policies['ext.i18n.trimmed'] + if trimmed: + singular = self._trim_whitespace(singular) + if plural: + plural = self._trim_whitespace(plural) + node = self._make_node(singular, plural, variables, plural_expr, bool(referenced), num_called_num and have_plural) @@ -306,6 +319,9 @@ class InternationalizationExtension(Extension): else: return node + def _trim_whitespace(self, string, _ws_re=re.compile(r'\s*\n\s*')): + return _ws_re.sub(' ', string.strip()) + def _parse_block(self, parser, allow_pluralize): """Parse until the next block tag with a given name.""" referenced = [] @@ -583,6 +599,8 @@ def babel_extract(fileobj, keywords, comment_tags, options): auto_reload=False ) + if getbool(options, 'trimmed'): + environment.policies['ext.i18n.trimmed'] = True if getbool(options, 'newstyle_gettext'): environment.newstyle_gettext = True |