Mercurial > genshi > mirror
diff genshi/template/markup.py @ 590:36b5a03534a0 trunk
Fix includes so that they again raise an exception when the included template is not found and no fallback has been provided.
author | cmlenz |
---|---|
date | Fri, 10 Aug 2007 09:44:00 +0000 |
parents | b59d99d2f631 |
children | 59fbd7586454 |
line wrap: on
line diff
--- a/genshi/template/markup.py +++ b/genshi/template/markup.py @@ -83,8 +83,8 @@ dirmap = {} # temporary mapping of directives to elements ns_prefix = {} depth = 0 - in_fallback = 0 - include_href = None + fallbacks = [] + includes = [] if not isinstance(source, Stream): source = XMLParser(source, filename=self.filename, @@ -155,9 +155,11 @@ raise TemplateSyntaxError('Include misses required ' 'attribute "href"', self.filepath, *pos[1:]) + includes.append(include_href) streams.append([]) elif tag.localname == 'fallback': - in_fallback += 1 + streams.append([]) + fallbacks.append(streams[-1]) else: stream.append((kind, (tag, new_attrs), pos)) @@ -167,12 +169,16 @@ elif kind is END: depth -= 1 - if in_fallback and data == self.XINCLUDE_NAMESPACE['fallback']: - in_fallback -= 1 + if fallbacks and data == self.XINCLUDE_NAMESPACE['fallback']: + assert streams.pop() is fallbacks[-1] elif data == self.XINCLUDE_NAMESPACE['include']: - fallback = streams.pop() + fallback = None + if len(fallbacks) == len(includes): + fallback = fallbacks.pop() + streams.pop() # discard anything between the include tags + # and the fallback element stream = streams[-1] - stream.append((INCLUDE, (include_href, fallback), pos)) + stream.append((INCLUDE, (includes.pop(), fallback), pos)) else: stream.append((kind, data, pos))