comparison markup/template.py @ 191:3289055a8c32 trunk

Allow leading whitespace in expressions. Closes #38. Thanks to Christian Boos for the patch!
author cmlenz
date Wed, 23 Aug 2006 15:00:28 +0000
parents 769d945ac030
children b64e36bc1100
comparison
equal deleted inserted replaced
190:769d945ac030 191:3289055a8c32
851 @param offset: the column number at which the text starts in the source 851 @param offset: the column number at which the text starts in the source
852 (optional) 852 (optional)
853 """ 853 """
854 def _interpolate(text, patterns, filename=filename, lineno=lineno, 854 def _interpolate(text, patterns, filename=filename, lineno=lineno,
855 offset=offset): 855 offset=offset):
856 for idx, group in enumerate(patterns.pop(0).split(text)): 856 for idx, grp in enumerate(patterns.pop(0).split(text)):
857 if idx % 2: 857 if idx % 2:
858 try: 858 try:
859 yield EXPR, Expression(group, filename, lineno), \ 859 yield EXPR, Expression(grp.strip(), filename, lineno), \
860 (filename, lineno, offset) 860 (filename, lineno, offset)
861 except SyntaxError, err: 861 except SyntaxError, err:
862 raise TemplateSyntaxError(err, filename, lineno, 862 raise TemplateSyntaxError(err, filename, lineno,
863 offset + (err.offset or 0)) 863 offset + (err.offset or 0))
864 elif group: 864 elif grp:
865 if patterns: 865 if patterns:
866 for result in _interpolate(group, patterns[:]): 866 for result in _interpolate(grp, patterns[:]):
867 yield result 867 yield result
868 else: 868 else:
869 yield TEXT, group.replace('$$', '$'), \ 869 yield TEXT, grp.replace('$$', '$'), \
870 (filename, lineno, offset) 870 (filename, lineno, offset)
871 if '\n' in group: 871 if '\n' in grp:
872 lines = group.splitlines() 872 lines = grp.splitlines()
873 lineno += len(lines) - 1 873 lineno += len(lines) - 1
874 offset += len(lines[-1]) 874 offset += len(lines[-1])
875 else: 875 else:
876 offset += len(group) 876 offset += len(grp)
877 return _interpolate(text, [cls._FULL_EXPR_RE, cls._SHORT_EXPR_RE]) 877 return _interpolate(text, [cls._FULL_EXPR_RE, cls._SHORT_EXPR_RE])
878 _interpolate = classmethod(_interpolate) 878 _interpolate = classmethod(_interpolate)
879 879
880 def generate(self, *args, **kwargs): 880 def generate(self, *args, **kwargs):
881 """Apply the template to the given context data. 881 """Apply the template to the given context data.
Copyright (C) 2012-2017 Edgewall Software