diff -r a7c706b9492e -r 3f2024f30553 plcopen/plcopen.py --- a/plcopen/plcopen.py Wed Oct 12 15:08:47 2011 +0200 +++ b/plcopen/plcopen.py Wed Oct 12 23:47:48 2011 +0200 @@ -353,18 +353,7 @@ def updateElementName(self, old_name, new_name): for datatype in self.types.getdataTypeElements(): - datatype_content = datatype.baseType.getcontent() - if datatype_content["name"] == "derived" and datatype_content["value"].getname() == old_name: - datatype_content["value"].setname(new_name) - elif datatype_content["name"] in ["array", "subrangeSigned", "subrangeUnsigned"]: - basetype_content = datatype_content["value"].baseType.getcontent() - if basetype_content["name"] == "derived" and basetype_content["value"].getname() == old_name: - basetype_content["value"].setname(new_name) - elif datatype_content["name"] == "struct": - for element in datatype_content["value"].getvariable(): - element_type = element.type.getcontent() - if element_type["name"] == "derived" and element_type["value"].getname() == old_name: - element_type["value"].setname(new_name) + datatype.updateElementName(old_name, new_name) for pou in self.types.getpouElements(): pou.updateElementName(old_name, new_name) for configuration in self.instances.configurations.getconfiguration(): @@ -823,9 +812,7 @@ variables.pop(i) def _SearchInConfigurationResource(self, criteria, parent_infos=[]): - search_result = [] - for result in TestTextElement(self.getname(), criteria): - search_result.append((tuple(parent_infos + ["name"]),) + result) + search_result = _Search([("name", self.getname())], criteria, parent_infos) var_number = 0 for varlist in self.getglobalVars(): variable_type = searchResultVarTypes.get("globalVars", "var_local") @@ -1097,14 +1084,103 @@ def Search(self, criteria, parent_infos=[]): search_result = [] filter = criteria["filter"] - #if filter == "all" or "datatype" in filter: - # for datatype in self.dataTypes.getdataType(): - # search_result.extend(datatype.Search(criteria, parent_infos)) + for datatype in self.dataTypes.getdataType(): + search_result.extend(datatype.Search(criteria, parent_infos)) for pou in self.pous.getpou(): search_result.extend(pou.Search(criteria, parent_infos)) return search_result setattr(cls, "Search", Search) +def _updateBaseTypeElementName(self, old_name, new_name): + self.baseType.updateElementName(old_name, new_name) + +cls = PLCOpenClasses.get("dataTypes_dataType", None) +if cls: + setattr(cls, "updateElementName", _updateBaseTypeElementName) + + def Search(self, criteria, parent_infos=[]): + search_result = [] + filter = criteria["filter"] + if filter == "all" or "datatype" in filter: + parent_infos = parent_infos + ["D::%s" % self.getname()] + search_result.extend(_Search([("name", self.getname())], criteria, parent_infos)) + search_result.extend(self.baseType.Search(criteria, parent_infos)) + if self.initialValue is not None: + search_result.extend(_Search([("initial", self.initialValue.getvalue())], criteria, parent_infos)) + return search_result + setattr(cls, "Search", Search) + +cls = PLCOpenClasses.get("dataType", None) +if cls: + + def updateElementName(self, old_name, new_name): + if self.content["name"] in ["derived", "array", "subrangeSigned", "subrangeUnsigned"]: + self.content["value"].updateElementName(old_name, new_name) + elif self.content["name"] == "struct": + for element in datatype_content["value"].getvariable(): + element_type = element.type.updateElementName(old_name, new_name) + setattr(cls, "updateElementName", updateElementName) + + def Search(self, criteria, parent_infos=[]): + search_result = [] + if self.content["name"] in ["derived", "array", "enum", "subrangeSigned", "subrangeUnsigned"]: + search_result.extend(self.content["value"].Search(criteria, parent_infos)) + elif self.content["name"] == "struct": + for i, element in enumerate(self.content["value"].getvariable()): + search_result.extend(element.Search(criteria, parent_infos + ["struct", i])) + else: + basetype = self.content["name"] + if basetype in ["string", "wstring"]: + basetype = basetype.upper() + search_result.extend(_Search([("base", basetype)], criteria, parent_infos)) + return search_result + setattr(cls, "Search", Search) + +cls = PLCOpenClasses.get("derivedTypes_array", None) +if cls: + setattr(cls, "updateElementName", _updateBaseTypeElementName) + + def Search(self, criteria, parent_infos=[]): + search_result = self.baseType.Search(criteria, parent_infos) + for i, dimension in enumerate(self.getdimension()): + search_result.extend(_Search([("lower", dimension.getlower()), + ("upper", dimension.getupper())], + criteria, parent_infos + ["range", i])) + return search_result + setattr(cls, "Search", Search) + +def _SearchInSubrange(self, criteria, parent_infos=[]): + search_result = self.baseType.Search(criteria, parent_infos) + search_result.extend(_Search([("lower", self.range.getlower()), + ("upper", self.range.getupper())], + criteria, parent_infos)) + return search_result + +cls = PLCOpenClasses.get("derivedTypes_subrangeSigned", None) +if cls: + setattr(cls, "updateElementName", _updateBaseTypeElementName) + setattr(cls, "Search", _SearchInSubrange) + +cls = PLCOpenClasses.get("derivedTypes_subrangeUnsigned", None) +if cls: + setattr(cls, "updateElementName", _updateBaseTypeElementName) + setattr(cls, "Search", _SearchInSubrange) + +cls = PLCOpenClasses.get("derivedTypes_enum", None) +if cls: + + def updateElementName(self, old_name, new_name): + pass + setattr(cls, "updateElementName", updateElementName) + + def Search(self, criteria, parent_infos=[]): + search_result = [] + for i, value in enumerate(self.values.getvalue()): + for result in TestTextElement(value.getname(), criteria): + search_result.append((tuple(parent_infos + ["value", i]),) + result) + return search_result + setattr(cls, "Search", Search) + cls = PLCOpenClasses.get("pous_pou", None) if cls: @@ -1433,8 +1509,7 @@ filter = criteria["filter"] if filter == "all" or self.getpouType() in filter: parent_infos = parent_infos + ["P::%s" % self.getname()] - for result in TestTextElement(self.getname(), criteria): - search_result.append((tuple(parent_infos + ["name"]),) + result) + search_result.extend(_Search([("name", self.getname())], criteria, parent_infos)) if self.interface is not None: var_number = 0 for content in self.interface.getcontent():