[z3-checkins] r33197 - in z3/deliverance/branches/packaged/deliverance: . test-data
ltucker at codespeak.net
ltucker at codespeak.net
Wed Oct 11 23:41:34 CEST 2006
Author: ltucker
Date: Wed Oct 11 23:40:57 2006
New Revision: 33197
Added:
z3/deliverance/branches/packaged/deliverance/test-data/test_debug.xml
Modified:
z3/deliverance/branches/packaged/deliverance/interpreter.py
z3/deliverance/branches/packaged/deliverance/xslt.py
Log:
added preliminary debug support for xslt
Modified: z3/deliverance/branches/packaged/deliverance/interpreter.py
==============================================================================
--- z3/deliverance/branches/packaged/deliverance/interpreter.py (original)
+++ z3/deliverance/branches/packaged/deliverance/interpreter.py Wed Oct 11 23:40:57 2006
@@ -20,6 +20,12 @@
if reference_resolver:
xinclude.include(self.rules, loader=reference_resolver)
+ debug = rules.get("debug", None)
+ if debug and debug.lower() == "true":
+ self.debug = True
+ else:
+ self.debug = False
+
def render(self, content):
result = copy.deepcopy(self.theme)
Added: z3/deliverance/branches/packaged/deliverance/test-data/test_debug.xml
==============================================================================
--- (empty file)
+++ z3/deliverance/branches/packaged/deliverance/test-data/test_debug.xml Wed Oct 11 23:40:57 2006
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<deliverance-test-suite>
+
+
+<!-- test debug mode with append -->
+<deliverance-test>
+ <rules xmlns="http://www.plone.org/deliverance" debug="true">
+ <append theme="//body" content="//body/div" />
+ </rules>
+
+ <theme base="http://example.com">
+ <html>
+ <body>
+ before the div<div>in the div</div>after the div
+ </body></html>
+ </theme>
+
+ <content>
+ <html>
+ <body><div>Real Content</div>
+ </body></html>
+ </content>
+
+ <output>
+ <html>
+ <body>
+ before the div<div>in the div</div>after the div
+ <!--Deliverance: applying rule <append theme="//body" content="//body/div"/>
+ --><div>Real Content</div><!--Deliverance: done applying rule <append theme="//body" content="//body/div"/>
+ --></body>
+ </html>
+ </output>
+</deliverance-test>
+
+
+<!-- test debug mode with append-or-replace -->
+<deliverance-test>
+ <rules xmlns="http://www.plone.org/deliverance" debug="true">
+ <append-or-replace theme="//body" content="//body/div" />
+ </rules>
+
+ <theme base="http://example.com">
+ <html>
+ <body>
+ before the div<div>in the div</div>after the div
+ </body></html>
+ </theme>
+
+ <content>
+ <html>
+ <body><div>Real Content</div>
+ </body></html>
+ </content>
+
+ <output>
+ <html>
+ <body>
+ before the divafter the div
+ <!--Deliverance: applying rule <append-or-replace theme="//body" content="//body/div"/>
+ --><div>Real Content</div><!--Deliverance: done applying rule <append-or-replace theme="//body" content="//body/div"/>
+ --></body>
+ </html>
+ </output>
+</deliverance-test>
+
+
+
+<!-- test debug mode with prepend -->
+<deliverance-test>
+ <rules xmlns="http://www.plone.org/deliverance" debug="true">
+ <prepend theme="//body" content="//body/div" />
+ </rules>
+
+ <theme base="http://example.com">
+ <html>
+ <body>
+ before the div<div>in the div</div>after the div
+ </body></html>
+ </theme>
+
+ <content>
+ <html>
+ <body><div>Real Content</div>
+ </body></html>
+ </content>
+
+ <output>
+ <html>
+ <body>
+ <!--Deliverance: applying rule <prepend theme="//body" content="//body/div"/>
+ --><div>Real Content</div><!--Deliverance: done applying rule <prepend theme="//body" content="//body/div"/>
+ -->
+ before the div<div>in the div</div>after the div
+ </body>
+ </html>
+ </output>
+</deliverance-test>
+
+
+
+<!-- test debug mode with replace -->
+<deliverance-test>
+ <rules xmlns="http://www.plone.org/deliverance" debug="true">
+ <replace theme="//body/span" content="//body/div" />
+ </rules>
+
+ <theme base="http://example.com">
+ <html>
+ <body>
+ i'm before the span<span>i'm in a span</span>i'm after the span
+ </body></html>
+ </theme>
+
+ <content>
+ <html>
+ <body><div>Real Content</div>
+ </body></html>
+ </content>
+
+ <output>
+ <html>
+ <body>
+ i'm before the span
+ <!--Deliverance: applying rule <replace theme="//body/span" content="//body/div"/>
+ --><div>Real Content</div><!--Deliverance: done applying rule <replace theme="//body/span" content="//body/div"/>
+ -->
+ i'm after the span
+ </body>
+ </html>
+ </output>
+</deliverance-test>
+
+
+
+<!-- test debug mode with copy -->
+<deliverance-test>
+ <rules xmlns="http://www.plone.org/deliverance" debug="true">
+ <copy theme="//body" content="//body/div" />
+ </rules>
+
+ <theme base="http://example.com">
+ <html>
+ <body>
+ </body></html>
+ </theme>
+
+ <content>
+ <html>
+ <body><div>Real Content</div>
+ </body></html>
+ </content>
+
+ <output>
+ <html>
+ <!--Deliverance: applying rule <copy theme="//body" content="//body/div"/>
+ --><body><div>Real Content</div></body><!--Deliverance: done applying rule <copy theme="//body" content="//body/div"/>
+ -->
+ </html>
+ </output>
+</deliverance-test>
+
+
+</deliverance-test-suite>
+
Modified: z3/deliverance/branches/packaged/deliverance/xslt.py
==============================================================================
--- z3/deliverance/branches/packaged/deliverance/xslt.py (original)
+++ z3/deliverance/branches/packaged/deliverance/xslt.py Wed Oct 11 23:40:57 2006
@@ -37,6 +37,13 @@
if reference_resolver:
xinclude.include(rules,loader=reference_resolver)
+
+ debug = rules.get("debug", None)
+ if debug and debug.lower() == "true":
+ self.debug = True
+ else:
+ self.debug = False
+
self.apply_rules(rules,theme_copy)
xslt_wrapper = etree.XML(xslt_wrapper_skel)
insertion_point = xslt_wrapper.xpath("//xsl:transform/xsl:template[@match='/']",
@@ -87,10 +94,12 @@
# no content is matched
self.add_conditional_missing_content_error(theme,rule)
- copier = etree.SubElement(theme_el,
- "{%s}copy-of" % nsmap["xsl"])
+
+ copier = etree.Element("{%s}copy-of" % nsmap["xsl"])
copier.set("select",rule.attrib[self.RULE_CONTENT_KEY])
+ self.debug_append(theme_el, copier, rule)
+
def apply_prepend(self,rule,theme):
theme_el = self.get_theme_el(rule,theme)
@@ -105,9 +114,8 @@
copier.set("select",rule.attrib[self.RULE_CONTENT_KEY])
- theme_el.insert(0,copier)
- copier.tail = theme_el.text
- theme_el.text = None
+ self.debug_prepend(theme_el, copier, rule)
+
def apply_replace(self,rule,theme):
theme_el = self.get_theme_el(rule,theme)
@@ -127,7 +135,7 @@
copy.deepcopy(theme_el),
copier)
- self.replace_element(theme_el,choose)
+ self.debug_replace(theme_el,choose,rule)
def apply_copy(self,rule,theme):
@@ -158,7 +166,7 @@
rule.attrib[self.RULE_CONTENT_KEY],
normal_theme_el,
copy_theme_el)
- self.replace_element(theme_el,choose)
+ self.debug_replace(theme_el,choose,rule)
@@ -185,8 +193,9 @@
copier = etree.Element("{%s}copy-of" % nsmap["xsl"])
copier.set("select",rule.attrib[self.RULE_CONTENT_KEY])
- theme_el.append(copier)
+ self.debug_append(theme_el, copier, rule)
+
def xsl_escape_comments(self,doc):
"""
@@ -219,3 +228,51 @@
choose.append(when)
choose.append(otherwise)
return choose
+
+
+ def debug_append(self, parent, child, rule):
+ if self.debug:
+ comment_before = etree.Element("{%s}comment" % nsmap["xsl"])
+ comment_before.text = "Deliverance: applying rule %s" % etree.tostring(rule)
+ parent.append(comment_before)
+
+ parent.append(child)
+
+ if self.debug:
+ comment_after = etree.Element("{%s}comment" % nsmap["xsl"])
+ comment_after.text = "Deliverance: done applying rule %s" % etree.tostring(rule)
+ parent.append(comment_after)
+
+
+ def debug_replace(self, old_el, new_el, rule):
+ self.replace_element(old_el, new_el)
+
+ if self.debug:
+ parent = new_el.getparent()
+ index = parent.index(new_el)
+
+ comment_before = etree.Element("{%s}comment" % nsmap["xsl"])
+ comment_before.text = "Deliverance: applying rule %s" % etree.tostring(rule)
+ comment_after = etree.Element("{%s}comment" % nsmap["xsl"])
+ comment_after.text = "Deliverance: done applying rule %s" % etree.tostring(rule)
+ comment_after.tail = new_el.tail
+ new_el.tail = None
+
+ parent.insert(index, comment_before)
+ parent.insert(index+2, comment_after)
+
+ def debug_prepend(self, parent, child, rule):
+ parent.insert(0,child)
+ child.tail = parent.text
+ parent.text = None
+
+ if self.debug:
+ comment_before = etree.Element("{%s}comment" % nsmap["xsl"])
+ comment_before.text = "Deliverance: applying rule %s" % etree.tostring(rule)
+ comment_after = etree.Element("{%s}comment" % nsmap["xsl"])
+ comment_after.text = "Deliverance: done applying rule %s" % etree.tostring(rule)
+ comment_after.tail = child.tail
+ child.tail = None
+
+ parent.insert(0, comment_before)
+ parent.insert(2, comment_after)
More information about the z3-checkins
mailing list