Ticket #101: genshi-0.4.3-xinclude-parse-attr.patch
| File genshi-0.4.3-xinclude-parse-attr.patch, 3.2 KB (added by djc@…, 16 years ago) |
|---|
-
template/markup.py
old new 26 26 from genshi.template.interpolation import interpolate 27 27 from genshi.template.loader import TemplateNotFound 28 28 from genshi.template.directives import * 29 from genshi.template.text import TextTemplate # for parse="text" 29 30 30 31 if sys.version_info < (2, 4): 31 32 _ctxt2dict = lambda ctxt: ctxt.frames[0] … … 85 86 depth = 0 86 87 in_fallback = 0 87 88 include_href = None 89 include_cls = None 88 90 89 91 if not isinstance(source, Stream): 90 92 source = XMLParser(source, filename=self.filename, … … 154 156 raise TemplateSyntaxError('Include misses required ' 155 157 'attribute "href"', 156 158 self.filepath, *pos[1:]) 159 parse = new_attrs.get('parse', MarkupTemplate) 160 if parse == 'xml': include_cls = MarkupTemplate 161 elif parse == 'text': include_cls = TextTemplate 162 else: raise TemplateSyntaxError('Unknown value "%s" for ' 163 'attribute "parse"' % 164 repr(parse), 165 self.filepath, 166 *pos[1:]) 157 167 streams.append([]) 158 168 elif tag.localname == 'fallback': 159 169 in_fallback += 1 … … 171 181 elif data == self.XINCLUDE_NAMESPACE['include']: 172 182 fallback = streams.pop() 173 183 stream = streams[-1] 174 stream.append((INCLUDE, (include_href, fallback), pos))184 stream.append((INCLUDE, (include_href, include_cls, fallback), pos)) 175 185 else: 176 186 stream.append((kind, data, pos)) 177 187 … … 226 236 def _prepare(self, stream): 227 237 for kind, data, pos in Template._prepare(self, stream): 228 238 if kind is INCLUDE: 229 data = data[0], list(self._prepare(data[1]))239 data = data[0], data[1], list(self._prepare(data[2])) 230 240 yield kind, data, pos 231 241 232 242 def _exec(self, stream, ctxt): … … 245 255 """ 246 256 for event in stream: 247 257 if event[0] is INCLUDE: 248 href, fallback = event[1]258 href, template_cls, fallback = event[1] 249 259 if not isinstance(href, basestring): 250 260 parts = [] 251 261 for subkind, subdata, subpos in self._eval(href, ctxt): … … 253 263 parts.append(subdata) 254 264 href = u''.join([x for x in parts if x is not None]) 255 265 try: 256 tmpl = self.loader.load(href, relative_to=event[2][0]) 266 tmpl = self.loader.load(href, relative_to=event[2][0], 267 cls=template_cls) 257 268 for event in tmpl.generate(ctxt): 258 269 yield event 259 270 except TemplateNotFound:
