From ldr at codespeak.net Mon Jul 5 20:11:36 2010
From: ldr at codespeak.net (ldr at codespeak.net)
Date: Mon, 5 Jul 2010 20:11:36 +0200 (CEST)
Subject: [z3-checkins] r75852 - in z3/xdv/branches/multistage-compiler: .
lib/xdv lib/xdv/tests/modify-theme
Message-ID: <20100705181136.363C0282BFC@codespeak.net>
Author: ldr
Date: Mon Jul 5 20:11:33 2010
New Revision: 75852
Added:
z3/xdv/branches/multistage-compiler/lib/xdv/dummy.html
z3/xdv/branches/multistage-compiler/lib/xdv/identity.xsl
Modified:
z3/xdv/branches/multistage-compiler/buildout.cfg
z3/xdv/branches/multistage-compiler/lib/xdv/annotate-rules.xsl
z3/xdv/branches/multistage-compiler/lib/xdv/annotate-themes.xsl
z3/xdv/branches/multistage-compiler/lib/xdv/boilerplate.xsl
z3/xdv/branches/multistage-compiler/lib/xdv/defaults.xsl
z3/xdv/branches/multistage-compiler/lib/xdv/emit-stylesheet.xsl
z3/xdv/branches/multistage-compiler/lib/xdv/rules.py
z3/xdv/branches/multistage-compiler/lib/xdv/tests/modify-theme/rules.xml
z3/xdv/branches/multistage-compiler/lib/xdv/utils.py
Log:
All but the output doctype test passes now. Probably still some whitespace problems (untested as the tests pretty print). Some stray xmlns should probably be stripped out so never making it into the compiled output.
Modified: z3/xdv/branches/multistage-compiler/buildout.cfg
==============================================================================
--- z3/xdv/branches/multistage-compiler/buildout.cfg (original)
+++ z3/xdv/branches/multistage-compiler/buildout.cfg Mon Jul 5 20:11:33 2010
@@ -12,3 +12,4 @@
[test]
recipe = zc.recipe.testrunner
eggs = xdv
+defaults = ['--auto-color']
Modified: z3/xdv/branches/multistage-compiler/lib/xdv/annotate-rules.xsl
==============================================================================
--- z3/xdv/branches/multistage-compiler/lib/xdv/annotate-rules.xsl (original)
+++ z3/xdv/branches/multistage-compiler/lib/xdv/annotate-rules.xsl Mon Jul 5 20:11:33 2010
@@ -3,6 +3,7 @@
xmlns:dyn="http://exslt.org/dynamic"
xmlns:esi="http://www.edge-delivery.org/esi/1.0"
xmlns:exsl="http://exslt.org/common"
+ xmlns:str="http://exslt.org/strings"
xmlns:xdv="http://namespaces.plone.org/xdv"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
@@ -78,7 +79,7 @@
-
+
@@ -105,7 +106,7 @@
-
+
@@ -117,7 +118,7 @@
" wait="yes"
-
+
@@ -129,7 +130,7 @@
-
+
ERROR: Unknown includemode or @method attribute
Modified: z3/xdv/branches/multistage-compiler/lib/xdv/annotate-themes.xsl
==============================================================================
--- z3/xdv/branches/multistage-compiler/lib/xdv/annotate-themes.xsl (original)
+++ z3/xdv/branches/multistage-compiler/lib/xdv/annotate-themes.xsl Mon Jul 5 20:11:33 2010
@@ -1,6 +1,7 @@
+ exclude-result-prefixes="exsl str dv xhtml">
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
+
+
-
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
+
@@ -140,7 +141,7 @@
-
+
Added: z3/xdv/branches/multistage-compiler/lib/xdv/identity.xsl
==============================================================================
--- (empty file)
+++ z3/xdv/branches/multistage-compiler/lib/xdv/identity.xsl Mon Jul 5 20:11:33 2010
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Modified: z3/xdv/branches/multistage-compiler/lib/xdv/rules.py
==============================================================================
--- z3/xdv/branches/multistage-compiler/lib/xdv/rules.py (original)
+++ z3/xdv/branches/multistage-compiler/lib/xdv/rules.py Mon Jul 5 20:11:33 2010
@@ -15,14 +15,14 @@
from urlparse import urljoin
from xdv.cssrules import convert_css_selectors
-from xdv.utils import namespaces, fullname, AC_READ_NET, AC_READ_FILE
+from xdv.utils import namespaces, fullname, AC_READ_NET, AC_READ_FILE, CustomResolver
logger = logging.getLogger('xdv')
IMPORT_STYLESHEET = re.compile(r'''(@import\s+(?:url\(['"]?|['"]))(.+)(['"]?\)|['"])''', re.IGNORECASE)
-def pkg_xsl(name):
- return etree.XSLT(etree.parse(pkg_resources.resource_filename('xdv', name)))
+def pkg_xsl(name, parser=None):
+ return etree.XSLT(etree.parse(pkg_resources.resource_filename('xdv', name), parser=parser))
update_transform = pkg_xsl('update-namespace.xsl')
normalize_rules = pkg_xsl('normalize-rules.xsl')
@@ -31,7 +31,6 @@
apply_rules = pkg_xsl('apply-rules.xsl')
emit_stylesheet = pkg_xsl('emit-stylesheet.xsl')
-
def update_namespace(rules_doc):
"""Convert old namespace to new namespace in place
"""
@@ -58,6 +57,10 @@
return rules_doc
def apply_absolute_prefix(theme_doc, absolute_prefix):
+ if not absolute_prefix:
+ return
+ if not absolute_prefix.endswith('/'):
+ absolute_prefix = absolute_prefix + '/'
for node in theme_doc.xpath('//*[@src]'):
url = urljoin(absolute_prefix, node.get('src'))
node.set('src', url)
@@ -88,11 +91,24 @@
root.append(element)
return rules_doc
+def set_parser(stylesheet, parser, compiler_parser=None):
+ dummy_doc = etree.parse(pkg_resources.resource_filename('xdv', 'dummy.html'), parser=parser)
+ name = 'file:///__xdv__'
+ resolver = CustomResolver({name: stylesheet})
+ if compiler_parser is None:
+ compiler_parser = etree.XMLParser()
+ compiler_parser.resolvers.add(resolver)
+ identity = pkg_xsl('identity.xsl', compiler_parser)
+ output_doc = identity(dummy_doc, docurl="'%s'"%name)
+ compiler_parser.resolvers.remove(resolver)
+ return output_doc
+
def process_rules(rules, theme=None, extra=None, trace=None, css=True, xinclude=True, absolute_prefix=None, includemode=None, update=True, parser=None, rules_parser=None, compiler_parser=None, access_control=None):
if rules_parser is None:
rules_parser = etree.XMLParser(recover=False)
rules_doc = etree.parse(rules, parser=rules_parser)
-
+ if parser is None:
+ parser = etree.HTMLParser()
if xinclude:
rules_doc.xinclude()
if update:
@@ -106,11 +122,12 @@
includemode = 'document'
includemode = "'%s'" % includemode
rules_doc = normalize_rules(rules_doc, includemode=includemode)
+ #import pdb; pdb.set_trace()
rules_doc = annotate_themes(rules_doc)
rules_doc = annotate_rules(rules_doc)
rules_doc = apply_rules(rules_doc)
compiled_doc = emit_stylesheet(rules_doc)
- #import pdb; pdb.set_trace()
+ compiled_doc = set_parser(etree.tostring(compiled_doc), parser, compiler_parser)
return compiled_doc
Modified: z3/xdv/branches/multistage-compiler/lib/xdv/tests/modify-theme/rules.xml
==============================================================================
--- z3/xdv/branches/multistage-compiler/lib/xdv/tests/modify-theme/rules.xml (original)
+++ z3/xdv/branches/multistage-compiler/lib/xdv/tests/modify-theme/rules.xml Mon Jul 5 20:11:33 2010
@@ -12,7 +12,7 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link
+
+