Edgewall Software

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)

Updated patch for genshi-0.4.3

  • template/markup.py

    old new  
    2626from genshi.template.interpolation import interpolate
    2727from genshi.template.loader import TemplateNotFound
    2828from genshi.template.directives import *
     29from genshi.template.text import TextTemplate # for parse="text"
    2930
    3031if sys.version_info < (2, 4):
    3132    _ctxt2dict = lambda ctxt: ctxt.frames[0]
     
    8586        depth = 0
    8687        in_fallback = 0
    8788        include_href = None
     89        include_cls = None
    8890
    8991        if not isinstance(source, Stream):
    9092            source = XMLParser(source, filename=self.filename,
     
    154156                            raise TemplateSyntaxError('Include misses required '
    155157                                                      'attribute "href"',
    156158                                                      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:])
    157167                        streams.append([])
    158168                    elif tag.localname == 'fallback':
    159169                        in_fallback += 1
     
    171181                elif data == self.XINCLUDE_NAMESPACE['include']:
    172182                    fallback = streams.pop()
    173183                    stream = streams[-1]
    174                     stream.append((INCLUDE, (include_href, fallback), pos))
     184                    stream.append((INCLUDE, (include_href, include_cls, fallback), pos))
    175185                else:
    176186                    stream.append((kind, data, pos))
    177187
     
    226236    def _prepare(self, stream):
    227237        for kind, data, pos in Template._prepare(self, stream):
    228238            if kind is INCLUDE:
    229                 data = data[0], list(self._prepare(data[1]))
     239                data = data[0], data[1], list(self._prepare(data[2]))
    230240            yield kind, data, pos
    231241
    232242    def _exec(self, stream, ctxt):
     
    245255        """
    246256        for event in stream:
    247257            if event[0] is INCLUDE:
    248                 href, fallback = event[1]
     258                href, template_cls, fallback = event[1]
    249259                if not isinstance(href, basestring):
    250260                    parts = []
    251261                    for subkind, subdata, subpos in self._eval(href, ctxt):
     
    253263                            parts.append(subdata)
    254264                    href = u''.join([x for x in parts if x is not None])
    255265                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)
    257268                    for event in tmpl.generate(ctxt):
    258269                        yield event
    259270                except TemplateNotFound: