--- a/svghmi/svghmi.py Tue Aug 20 10:30:59 2019 +0200
+++ b/svghmi/svghmi.py Tue Aug 20 10:32:34 2019 +0200
@@ -9,7 +9,7 @@
from __future__ import absolute_import
import os
import shutil
-from itertools import izip
+from itertools import izip, imap
from pprint import pprint, pformat
import wx
@@ -71,12 +71,33 @@
else:
self.children.append(node)
+ def etree(self):
+
+ attribs = dict(name=self.name)
+ if self.path is not None:
+ attribs["path"]=".".join(self.path)
+
+ res = etree.Element(self.nodetype, **attribs)
+
+ if hasattr(self, "children"):
+ for child_etree in imap(lambda c:c.etree(), self.children):
+ res.append(child_etree)
+
+ return res
+
+# module scope for HMITree root
+# so that CTN can use HMITree deduced in Library
+# note: this only works because library's Generate_C is
+# systematicaly invoked before CTN's CTNGenerate_C
+
+hmi_tree_root = None
class SVGHMILibrary(POULibrary):
def GetLibraryPath(self):
return paths.AbsNeighbourFile(__file__, "pous.xml")
def Generate_C(self, buildpath, varlist, IECCFLAGS):
+ global hmi_tree_root
"""
PLC Instance Tree:
@@ -209,6 +230,11 @@
return res
+ def GetHMITree(self):
+ global hmi_tree_root
+ res = [hmi_tree_root.etree()]
+ return res
+
def CTNGenerate_C(self, buildpath, locations):
"""
Return C code generated by iec2c compiler
@@ -224,7 +250,8 @@
# TODO : move to __init__
transform = XSLTransform(os.path.join(ScriptDirectory, "gen_index_xhtml.xslt"),
- [("GetSVGGeometry", lambda *_ignored:self.GetSVGGeometry())])
+ [("GetSVGGeometry", lambda *_ignored:self.GetSVGGeometry()),
+ ("GetHMITree", lambda *_ignored:self.GetHMITree())])
# load svg as a DOM with Etree