Moved XSLT model query python code so that XSLT part can be reused for other transformations (i.e. in SVGHMI) svghmi
authorEdouard Tisserant
Fri, 09 Aug 2019 12:07:33 +0200
branchsvghmi
changeset 2752 a8c9b7f0a54a
parent 2751 eab6161e603d
child 2753 9a7e12e96399
Moved XSLT model query python code so that XSLT part can be reused for other transformations (i.e. in SVGHMI)
XSLTransform.py
plcopen/Makefile
plcopen/XSLTModelQuery.py
plcopen/yslt_noindent.yml2
yslt_noindent.yml2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XSLTransform.py	Fri Aug 09 12:07:33 2019 +0200
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# This file is part of Beremiz.
+# See COPYING file for copyrights details.
+
+from __future__ import absolute_import
+from lxml import etree
+
+class XSLTransform(object):
+    """ a class to handle XSLT queries on project and libs """
+    def __init__(self, xsltpath, xsltext):
+
+        # parse and compile. "beremiz" arbitrary namespace for extensions
+        self.xslt = etree.XSLT(
+            etree.parse(
+                xsltpath,
+                etree.XMLParser()),
+            extensions={("beremiz", name): call for name, call in xsltext})
+
+    def transform(self, root, **kwargs):
+        res = self.xslt(root, **{k: etree.XSLT.strparam(v) for k, v in kwargs.iteritems()})
+        # print(self.xslt.error_log)
+        return res
+
+
--- a/plcopen/Makefile	Thu Aug 08 15:56:17 2019 +0200
+++ b/plcopen/Makefile	Fri Aug 09 12:07:33 2019 +0200
@@ -1,13 +1,23 @@
 #! gmake
 
-yml := ../../yml2
+# Makefile to generate XSLT stylesheets from ysl2 files in the same directory
+
+# This uses YML2. 
+#   hg clone https://pep.foundation/dev/repos/yml2/
+
+# It should be just fine if yml2 is cloned just asside beremiz
+# otherwise, point yml2path to yml2 source directory
+#   make yml2path=path/to/yml/dir
+
+yml2path ?= $(abspath ../../yml2)
+
 ysl2files := $(wildcard *.ysl2)
 xsltfiles := $(patsubst %.ysl2, %.xslt, $(ysl2files))
 
 all:$(xsltfiles)
 
-%.xslt: %.ysl2 yslt_noindent.yml2
-	$(yml)/yml2c -I $(yml) $< -o $@.tmp
+%.xslt: %.ysl2 ../yslt_noindent.yml2
+	$(yml2path)/yml2c -I $(yml2path):../ $< -o $@.tmp
 	xmlstarlet fo $@.tmp > $@
 	rm $@.tmp
 	
--- a/plcopen/XSLTModelQuery.py	Thu Aug 08 15:56:17 2019 +0200
+++ b/plcopen/XSLTModelQuery.py	Fri Aug 09 12:07:33 2019 +0200
@@ -8,13 +8,14 @@
 from lxml import etree
 import util.paths as paths
 from plcopen.structures import StdBlckLibs
+from XSLTransform import XSLTransform
 
 ScriptDirectory = paths.AbsDir(__file__)
 
-
-class XSLTModelQuery(object):
+class XSLTModelQuery(XSLTransform):
     """ a class to handle XSLT queries on project and libs """
     def __init__(self, controller, xsltpath, ext=None):
+
         # arbitrary set debug to false, updated later
         self.debug = False
 
@@ -31,19 +32,12 @@
         if ext is not None:
             xsltext.extend(ext)
 
-        # parse and compile. "beremiz" arbitrary namespace for extensions
-        self.xslt = etree.XSLT(
-            etree.parse(
-                os.path.join(ScriptDirectory, xsltpath),
-                etree.XMLParser()),
-            extensions={("beremiz", name): call for name, call in xsltext})
-
+        XSLTransform.__init__(self,
+                           os.path.join(ScriptDirectory, xsltpath),
+                           xsltext)
     def _process_xslt(self, root, debug, **kwargs):
         self.debug = debug
-        res = self.xslt(root, **{k: etree.XSLT.strparam(v) for k, v in kwargs.iteritems()})
-        # print(self.xslt.error_log)
-        return res
-
+        return self.transform(root, **kwargs)
 
 # -------------------------------------------------------------------------------
 #           Helpers functions for translating list of arguments
--- a/plcopen/yslt_noindent.yml2	Thu Aug 08 15:56:17 2019 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-include yslt.yml2
-
-in xsl {
-    decl istylesheet (
-        *output="xml",
-        version="1.0",
-        xmlns:xsl="http://www.w3.org/1999/XSL/Transform",
-        xmlns:exsl='http://exslt.org/common',
-        extension-element-prefixes='exsl'
-    ) alias stylesheet {
-        output *output;
-        content;
-    };
-
-    decl template(match) {
-        content;
-    };
-
-    decl function(name) alias template {
-        content;
-    };
-   
-    decl call(name) alias call-template {
-        content;
-    };
-
-    decl apply(select) alias apply-templates {
-        content;
-    };
-}
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/yslt_noindent.yml2	Fri Aug 09 12:07:33 2019 +0200
@@ -0,0 +1,32 @@
+include yslt.yml2
+
+in xsl {
+    decl istylesheet (
+        *output="xml",
+        version="1.0",
+        xmlns:xsl="http://www.w3.org/1999/XSL/Transform",
+        xmlns:exsl='http://exslt.org/common',
+        extension-element-prefixes='exsl'
+    ) alias stylesheet {
+        output *output;
+        content;
+    };
+
+    decl template(match) {
+        content;
+    };
+
+    decl function(name) alias template {
+        content;
+    };
+   
+    decl call(name) alias call-template {
+        content;
+    };
+
+    decl apply(select) alias apply-templates {
+        content;
+    };
+}
+
+