Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion src/sysmac_data_type.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import re

from internal_types import *

Expand Down Expand Up @@ -92,6 +93,8 @@ def _parse_xml(self, xml_element, namespace=None, parent=None, prefix=None):
self.order = xml_element.get('Order')
self.offset_type = xml_element.get('OffsetType')

self._parse_string(self.base_type)

self.children = [SysmacDataType.import_from_xml(child_datatype_elmt, namespace=namespace, parent=self)
for child_datatype_elmt in xml_element.findall(".//DataType")]
return self
Expand All @@ -112,8 +115,17 @@ def _parse_slwd(self, slwd_dict, namespace=None, parent=None):
self.is_controller_defined_type = False
self.order = None
self.offset_type = None

self._parse_string(self.base_type)

return self

def _parse_string(self, base_type: str):
string_match = re.match(r"STRING\[(\d+)\]", self.base_type, re.IGNORECASE)
if string_match:
self.length = string_match.group(1)
self.base_type = f'STRING({self.length})'

@classmethod
def import_from_xml(cls, xml_element, namespace=None, parent=None, prefix=None):
return cls()._parse_xml(xml_element, namespace=namespace, parent=parent, prefix=prefix)
Expand All @@ -124,12 +136,16 @@ def import_from_slwd(cls, slwd_dict, namespace=None, parent=None):

@property
def is_base_type(self):
return self.base_type in BASE_TYPES
return self.base_type in BASE_TYPES or self.is_string

@property
def is_internal_type(self):
return self.base_type in INTERNAL_TYPES.keys()

@property
def is_string(self):
return self.base_type.startswith('STRING')

@property
def is_array(self):
return self.base_type.startswith('ARRAY')
Expand Down