[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