Mercurial > genshi > genshi-test
changeset 12:87238328a71d
Make the XInclude filter track namespace context, to enable it to omit `END_NS` events for the XInclude namespace.
author | cmlenz |
---|---|
date | Sun, 04 Jun 2006 20:37:59 +0000 |
parents | d69d935e4299 |
children | bf9de5a4c896 |
files | markup/filters.py |
diffstat | 1 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/markup/filters.py +++ b/markup/filters.py @@ -95,15 +95,17 @@ """ self.loader = loader - def __call__(self, stream, ctxt=None): + def __call__(self, stream, ctxt=None, ns_prefixes=None): """Filter the stream, processing any XInclude directives it may contain. @param ctxt: the template context @param stream: the markup event stream to filter """ - from markup.template import TemplateError, TemplateNotFound + from markup.template import Template, TemplateError, TemplateNotFound + if ns_prefixes is None: + ns_prefixes = [] in_fallback = False include_href, fallback_stream = None, None indent = 0 @@ -156,6 +158,11 @@ fallback_stream.append((kind, data, pos)) elif kind is Stream.START_NS and data[1] == self._NAMESPACE: + ns_prefixes.append(data[0]) + continue + + elif kind is Stream.END_NS and data in ns_prefixes: + ns_prefixes.pop() continue else: @@ -165,7 +172,7 @@ # process return - for event in self(stream, ctxt): + for event in self(stream, ctxt, ns_prefixes=ns_prefixes): yield event