from model.data import Data class ComponentLexeme(Data): # special value for last component that evaluates to True by default but is not # exported to true LAST_COMPONENT_SPACE = "last component does not have space" def __init__(self): self.other_attributes = {} self.text = "" self.role = "" self.no_space = False def import_xml(self, xml): if xml.nodeName == "#text": self.text = xml.data self.role = None else: self.text = xml.textContent self.role = xml.getAttribute("role") if xml.hasAttribute("space"): self.no_space = xml.getAttribute("space") == "false" for oth_attr in ["lexical_unit_lexeme_id", "slolex", "kol", "sloleks"]: if xml.hasAttribute(oth_attr): self.other_attributes[oth_attr] = xml.getAttribute(oth_attr) def isValid(self): return len(self.text) > 0 def export(self, doc): if self.role is None: return doc.createTextNode(self.text) result = doc.createElement("comp") result.setAttribute("role", self.role) result.textContent = self.text if self.no_space and self.no_space != self.LAST_COMPONENT_SPACE: result.setAttribute("space", "false") for key, value in self.other_attributes.items(): result.setAttribute(key, value) return result def view_style(self): # no-space is handled in multiword-example directly result = ".comp-text" if self.role is not None: result += ".comp-role" if self.role == "headword": result += ".comp-role-headword" return result