Fixing bug when updating name of project elements in utf-8 formatted text
authorlaurent
Fri, 09 Dec 2011 10:06:44 +0100
changeset 594 41e62b3174dc
parent 593 34c3569042db
child 595 15df411e9463
Fixing bug when updating name of project elements in utf-8 formatted text
plcopen/plcopen.py
xmlclass/xmlclass.py
--- a/plcopen/plcopen.py	Thu Nov 24 16:30:06 2011 +0100
+++ b/plcopen/plcopen.py	Fri Dec 09 10:06:44 2011 +0100
@@ -129,26 +129,30 @@
 cls = PLCOpenClasses.get("formattedText", None)
 if cls:
     def updateElementName(self, old_name, new_name):
-        index = self.text.find(old_name)
+        text = self.text.decode("utf-8")
+        index = text.find(old_name)
         while index != -1:
-            if index > 0 and (self.text[index - 1].isalnum() or self.text[index - 1] == "_"):
-                index = self.text.find(old_name, index + len(old_name))
-            elif index < len(self.text) - len(old_name) and (self.text[index + len(old_name)].isalnum() or self.text[index + len(old_name)] == "_"):
-                index = self.text.find(old_name, index + len(old_name))
+            if index > 0 and (text[index - 1].isalnum() or text[index - 1] == "_"):
+                index = text.find(old_name, index + len(old_name))
+            elif index < len(text) - len(old_name) and (text[index + len(old_name)].isalnum() or text[index + len(old_name)] == "_"):
+                index = text.find(old_name, index + len(old_name))
             else:
-                self.text = self.text[:index] + new_name + self.text[index + len(old_name):]
-                index = self.text.find(old_name, index + len(new_name))
+                text = text[:index] + new_name + text[index + len(old_name):]
+                index = text.find(old_name, index + len(new_name))
+        self.text = text.encode("utf-8")
     setattr(cls, "updateElementName", updateElementName)
     
     def updateElementAddress(self, address_model, new_leading):
+        text = self.text.decode("utf-8")
         startpos = 0
-        result = address_model.search(self.text, startpos)
+        result = address_model.search(text, startpos)
         while result is not None:
             groups = result.groups()
             new_address = groups[0] + new_leading + groups[2]
-            self.text = self.text[:result.start()] + new_address + self.text[result.end():]
+            text = text[:result.start()] + new_address + text[result.end():]
             startpos = result.start() + len(new_address)
             result = address_model.search(self.text, startpos)
+        self.text = text.encode("utf-8")
     setattr(cls, "updateElementAddress", updateElementAddress)
     
     def Search(self, criteria, parent_infos):
--- a/xmlclass/xmlclass.py	Thu Nov 24 16:30:06 2011 +0100
+++ b/xmlclass/xmlclass.py	Fri Dec 09 10:06:44 2011 +0100
@@ -1402,7 +1402,6 @@
                 structure_model = re.compile("(%s)$" % structure_pattern)
                 result = structure_model.match(children_structure)
                 if not result:
-                    print structure_model.pattern, children_structure
                     raise ValueError("Invalid structure for \"%s\" children!." % tree.nodeName)
         required_attributes = dict([(attr["name"], True) for attr in classinfos["attributes"] if attr["use"] == "required"])
         if classinfos.has_key("base"):