Changeset 364
- Timestamp:
- Oct 13, 2006, 4:27:15 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/genshi/template.py
r356 r364 426 426 </ul> 427 427 """ 428 __slots__ = ['assign' ]428 __slots__ = ['assign', 'filename'] 429 429 430 430 ATTRIBUTE = 'each' … … 438 438 ast = compiler.parse(assign, 'exec') 439 439 self.assign = _assignment(ast.node.nodes[0].expr) 440 self.filename = filename 440 441 Directive.__init__(self, value.strip(), namespaces, filename, lineno, 441 442 offset) … … 458 459 ctxt.pop() 459 460 except TypeError, e: 460 raise TemplateRuntimeError(str(e), *stream[0][2])461 raise TemplateRuntimeError(str(e), self.filename, *stream[0][2][1:]) 461 462 462 463 def __repr__(self): … … 664 665 See the documentation of `py:choose` for usage. 665 666 """ 667 __slots__ = ['filename'] 666 668 667 669 ATTRIBUTE = 'test' 670 671 def __init__(self, value, namespaces=None, filename=None, lineno=-1, 672 offset=-1): 673 Directive.__init__(self, value, namespaces, filename, lineno, offset) 674 self.filename = filename 668 675 669 676 def __call__(self, stream, ctxt, directives): … … 672 679 raise TemplateRuntimeError('"when" directives can only be used ' 673 680 'inside a "choose" directive', 674 *stream.next()[2])681 self.filename, *stream.next()[2][1:]) 675 682 if matched: 676 683 return [] 677 684 if not self.expr: 678 685 raise TemplateRuntimeError('"when" directive has no test condition', 679 *stream.next()[2])686 self.filename, *stream.next()[2][1:]) 680 687 value = self.expr.evaluate(ctxt) 681 688 if '_choose.value' in frame: … … 696 703 See the documentation of `py:choose` for usage. 697 704 """ 705 __slots__ = ['filename'] 706 707 def __init__(self, value, namespaces=None, filename=None, lineno=-1, 708 offset=-1): 709 Directive.__init__(self, None, namespaces, filename, lineno, offset) 710 self.filename = filename 711 698 712 def __call__(self, stream, ctxt, directives): 699 713 matched, frame = ctxt._find('_choose.matched') … … 701 715 raise TemplateRuntimeError('an "otherwise" directive can only be ' 702 716 'used inside a "choose" directive', 703 *stream.next()[2])717 self.filename, *stream.next()[2][1:]) 704 718 if matched: 705 719 return [] … … 817 831 _SHORT_EXPR_RE = re.compile(r'(?<!\$)\$([a-zA-Z_][a-zA-Z0-9_\.]*)') 818 832 819 def _interpolate(cls, text, filename=None, lineno=-1, offset=-1): 833 def _interpolate(cls, text, basedir=None, filename=None, lineno=-1, 834 offset=0): 820 835 """Parse the given string and extract expressions. 821 836 … … 998 1013 depth = 0 999 1014 1000 for kind, data, pos in XMLParser(self.source, filename=self.file path):1015 for kind, data, pos in XMLParser(self.source, filename=self.filename): 1001 1016 1002 1017 if kind is START_NS: … … 1021 1036 cls = self._dir_by_name.get(tag.localname) 1022 1037 if cls is None: 1023 raise BadDirectiveError(tag.localname, pos[0], pos[1]) 1038 raise BadDirectiveError(tag.localname, self.filepath, 1039 pos[1]) 1024 1040 value = attrib.get(getattr(cls, 'ATTRIBUTE', None), '') 1025 directives.append(cls(value, ns_prefix, *pos)) 1041 directives.append(cls(value, ns_prefix, self.filepath, 1042 pos[1], pos[2])) 1026 1043 strip = True 1027 1044 … … 1031 1048 cls = self._dir_by_name.get(name.localname) 1032 1049 if cls is None: 1033 raise BadDirectiveError(name.localname, pos[0], 1034 pos[1]) 1035 directives.append(cls(value, ns_prefix, *pos)) 1050 raise BadDirectiveError(name.localname, 1051 self.filepath, pos[1]) 1052 directives.append(cls(value, ns_prefix, self.filepath, 1053 pos[1], pos[2])) 1036 1054 else: 1037 1055 if value: 1038 value = list(self._interpolate(value, *pos)) 1056 value = list(self._interpolate(value, self.basedir, 1057 *pos)) 1039 1058 if len(value) == 1 and value[0][0] is TEXT: 1040 1059 value = value[0][1] … … 1067 1086 1068 1087 elif kind is TEXT: 1069 for kind, data, pos in self._interpolate(data, *pos): 1088 for kind, data, pos in self._interpolate(data, self.basedir, 1089 *pos): 1070 1090 stream.append((kind, data, pos)) 1071 1091 … … 1201 1221 if start > offset: 1202 1222 text = source[offset:start] 1203 for kind, data, pos in self._interpolate(text, self. filepath,1204 lineno, 0):1223 for kind, data, pos in self._interpolate(text, self.basedir, 1224 self.filename, lineno): 1205 1225 stream.append((kind, data, pos)) 1206 1226 lineno += len(text.splitlines()) … … 1233 1253 if offset < len(source): 1234 1254 text = source[offset:].replace('\\#', '#') 1235 for kind, data, pos in self._interpolate(text, self. filepath,1236 lineno, 0):1255 for kind, data, pos in self._interpolate(text, self.basedir, 1256 self.filename, lineno): 1237 1257 stream.append((kind, data, pos)) 1238 1258
Note: See TracChangeset
for help on using the changeset viewer.