22 # You should have received a copy of the GNU General Public License |
22 # You should have received a copy of the GNU General Public License |
23 # along with this program; if not, write to the Free Software |
23 # along with this program; if not, write to the Free Software |
24 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
24 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
25 |
25 |
26 |
26 |
27 from __future__ import absolute_import |
27 |
28 from __future__ import division |
28 |
29 import re |
29 import re |
30 from collections import OrderedDict |
30 from collections import OrderedDict |
31 |
31 |
32 from six.moves import xrange |
32 from six.moves import xrange |
33 from lxml import etree |
33 from lxml import etree |
438 return contentheader |
438 return contentheader |
439 setattr(cls, "getcontentHeader", getcontentHeader) |
439 setattr(cls, "getcontentHeader", getcontentHeader) |
440 |
440 |
441 def setcontentHeader(self, contentheader): |
441 def setcontentHeader(self, contentheader): |
442 contentheader_obj = self.contentHeader |
442 contentheader_obj = self.contentHeader |
443 for attr, value in contentheader.iteritems(): |
443 for attr, value in contentheader.items(): |
444 func = {"projectName": contentheader_obj.setname, |
444 func = {"projectName": contentheader_obj.setname, |
445 "projectVersion": contentheader_obj.setversion, |
445 "projectVersion": contentheader_obj.setversion, |
446 "authorName": contentheader_obj.setauthor, |
446 "authorName": contentheader_obj.setauthor, |
447 "pageSize": lambda v: contentheader_obj.setpageSize(*v), |
447 "pageSize": lambda v: contentheader_obj.setpageSize(*v), |
448 "scaling": contentheader_obj.setscaling}.get(attr) |
448 "scaling": contentheader_obj.setscaling}.get(attr) |
493 filter = [] if filter is None else filter |
493 filter = [] if filter is None else filter |
494 return self.xpath( |
494 return self.xpath( |
495 "ppx:types/ppx:pous/ppx:pou%s%s" % |
495 "ppx:types/ppx:pous/ppx:pou%s%s" % |
496 (("[@name!='%s']" % exclude) if exclude is not None else '', |
496 (("[@name!='%s']" % exclude) if exclude is not None else '', |
497 ("[%s]" % " or ".join( |
497 ("[%s]" % " or ".join( |
498 map(lambda x: "@pouType='%s'" % x, filter))) |
498 ["@pouType='%s'" % x for x in filter])) |
499 if len(filter) > 0 else ""), |
499 if len(filter) > 0 else ""), |
500 namespaces=PLCOpenParser.NSMAP) |
500 namespaces=PLCOpenParser.NSMAP) |
501 setattr(cls, "getpous", getpous) |
501 setattr(cls, "getpous", getpous) |
502 |
502 |
503 setattr(cls, "getpou", gettypeElementFunc("pou")) |
503 setattr(cls, "getpou", gettypeElementFunc("pou")) |
648 def getpageSize(self): |
648 def getpageSize(self): |
649 return self.coordinateInfo.getpageSize() |
649 return self.coordinateInfo.getpageSize() |
650 setattr(cls, "getpageSize", getpageSize) |
650 setattr(cls, "getpageSize", getpageSize) |
651 |
651 |
652 def setscaling(self, scaling): |
652 def setscaling(self, scaling): |
653 for language, (x, y) in scaling.items(): |
653 for language, (x, y) in list(scaling.items()): |
654 self.coordinateInfo.setscaling(language, x, y) |
654 self.coordinateInfo.setscaling(language, x, y) |
655 setattr(cls, "setscaling", setscaling) |
655 setattr(cls, "setscaling", setscaling) |
656 |
656 |
657 def getscaling(self): |
657 def getscaling(self): |
658 scaling = {} |
658 scaling = {} |
747 |
747 |
748 |
748 |
749 def _removeConfigurationResourceVariableByAddress(self, address): |
749 def _removeConfigurationResourceVariableByAddress(self, address): |
750 for varlist in self.getglobalVars(): |
750 for varlist in self.getglobalVars(): |
751 variables = varlist.getvariable() |
751 variables = varlist.getvariable() |
752 for i in xrange(len(variables)-1, -1, -1): |
752 for i in range(len(variables)-1, -1, -1): |
753 if variables[i].getaddress() == address: |
753 if variables[i].getaddress() == address: |
754 variables.remove(variables[i]) |
754 variables.remove(variables[i]) |
755 |
755 |
756 |
756 |
757 def _removeConfigurationResourceVariableByFilter(self, address_model): |
757 def _removeConfigurationResourceVariableByFilter(self, address_model): |
758 for varlist in self.getglobalVars(): |
758 for varlist in self.getglobalVars(): |
759 variables = varlist.getvariable() |
759 variables = varlist.getvariable() |
760 for i in xrange(len(variables)-1, -1, -1): |
760 for i in range(len(variables)-1, -1, -1): |
761 var_address = variables[i].getaddress() |
761 var_address = variables[i].getaddress() |
762 if var_address is not None: |
762 if var_address is not None: |
763 result = address_model.match(var_address) |
763 result = address_model.match(var_address) |
764 if result is not None: |
764 if result is not None: |
765 variables.remove(variables[i]) |
765 variables.remove(variables[i]) |
969 elif base_type_name in ["string", "wstring"]: |
969 elif base_type_name in ["string", "wstring"]: |
970 basetype_name = base_type_name.upper() |
970 basetype_name = base_type_name.upper() |
971 # Array derived directly from an elementary type |
971 # Array derived directly from an elementary type |
972 else: |
972 else: |
973 basetype_name = base_type_name |
973 basetype_name = base_type_name |
974 return "ARRAY [%s] OF %s" % (",".join(map(lambda x: "%s..%s" % (x.getlower(), x.getupper()), vartype_content.getdimension())), basetype_name) |
974 return "ARRAY [%s] OF %s" % (",".join(["%s..%s" % (x.getlower(), x.getupper()) for x in vartype_content.getdimension()]), basetype_name) |
975 # Variable type is an elementary type |
975 # Variable type is an elementary type |
976 return vartype_content_name |
976 return vartype_content_name |
977 setattr(cls, "gettypeAsText", gettypeAsText) |
977 setattr(cls, "gettypeAsText", gettypeAsText) |
978 |
978 |
979 def Search(self, criteria, parent_infos=None): |
979 def Search(self, criteria, parent_infos=None): |
1378 |
1378 |
1379 def getvars(self): |
1379 def getvars(self): |
1380 vars = [] |
1380 vars = [] |
1381 if self.interface is not None: |
1381 if self.interface is not None: |
1382 reverse_types = {} |
1382 reverse_types = {} |
1383 for name, value in VarTypes.items(): |
1383 for name, value in list(VarTypes.items()): |
1384 reverse_types[value] = name |
1384 reverse_types[value] = name |
1385 for varlist in self.interface.getcontent(): |
1385 for varlist in self.interface.getcontent(): |
1386 vars.append((reverse_types[varlist.getLocalTag()], varlist)) |
1386 vars.append((reverse_types[varlist.getLocalTag()], varlist)) |
1387 return vars |
1387 return vars |
1388 setattr(cls, "getvars", getvars) |
1388 setattr(cls, "getvars", getvars) |