diff -r 822d483197ad -r ff14a66bbd12 py_ext/PythonFileCTNMixin.py --- a/py_ext/PythonFileCTNMixin.py Tue Sep 10 23:23:45 2013 +0200 +++ b/py_ext/PythonFileCTNMixin.py Wed Sep 11 23:48:41 2013 +0200 @@ -1,15 +1,11 @@ -import os -from PLCControler import UndoBuffer +import os, re +from lxml import etree + +from xmlclass import GenerateParserFromXSD + +from CodeFileTreeNode import CodeFile from PythonEditor import PythonEditor -from xml.dom import minidom -from xmlclass import GenerateClassesFromXSD -import cPickle - -from CodeFileTreeNode import CodeFile - -PythonClasses = GenerateClassesFromXSD(os.path.join(os.path.dirname(__file__), "py_ext_xsd.xsd")) - class PythonFileCTNMixin(CodeFile): CODEFILE_NAME = "PyFile" @@ -26,19 +22,27 @@ filepath = self.PythonFileName() - python_code = PythonClasses["Python"]() if os.path.isfile(filepath): + PythonParser = GenerateParserFromXSD( + os.path.join(os.path.dirname(__file__), "py_ext_xsd.xsd")) + xmlfile = open(filepath, 'r') - tree = minidom.parse(xmlfile) + pythonfile_xml = xmlfile.read() xmlfile.close() - for child in tree.childNodes: - if child.nodeType == tree.ELEMENT_NODE and child.nodeName == "Python": - python_code.loadXMLTree(child, ["xmlns", "xmlns:xsi", "xsi:schemaLocation"]) - self.CodeFile.globals.settext(python_code.gettext()) - os.remove(filepath) - self.CreateCodeFileBuffer(False) - self.OnCTNSave() + pythonfile_xml = pythonfile_xml.replace( + 'xmlns="http://www.w3.org/2001/XMLSchema"', + 'xmlns:xhtml="http://www.w3.org/1999/xhtml"') + for cre, repl in [ + (re.compile("(?)(?:)(?!)"), "]]>")]: + pythonfile_xml = cre.sub(repl, pythonfile_xml) + python_code = etree.fromstring(pythonfile_xml, PythonParser) + + self.CodeFile.globals.setanyText(python_code.getanyText()) + os.remove(filepath) + self.CreateCodeFileBuffer(False) + self.OnCTNSave() def CodeFileName(self): return os.path.join(self.CTNPath(), "pyfile.xml") @@ -50,7 +54,7 @@ PostSectionsTexts = {} def GetSection(self,section): return self.PreSectionsTexts.get(section,"") + "\n" + \ - getattr(self.CodeFile, section).gettext() + "\n" + \ + getattr(self.CodeFile, section).getanyText() + "\n" + \ self.PostSectionsTexts.get(section,"")