diff --git a/blueprintcompiler/language/gobject_object.py b/blueprintcompiler/language/gobject_object.py index f2d6535..e23e0d2 100644 --- a/blueprintcompiler/language/gobject_object.py +++ b/blueprintcompiler/language/gobject_object.py @@ -109,7 +109,7 @@ class Object(AstNode): from .gtkbuilder_child import Child xml.start_tag("object", **{ - "class": self.gir_class.glib_type_name if self.gir_class else self.tokens["class_name"], + "class": self.gir_class or self.tokens["class_name"], "id": self.tokens["id"], }) for child in self.children: diff --git a/blueprintcompiler/language/gtkbuilder_template.py b/blueprintcompiler/language/gtkbuilder_template.py index 4cd5e75..92dff71 100644 --- a/blueprintcompiler/language/gtkbuilder_template.py +++ b/blueprintcompiler/language/gtkbuilder_template.py @@ -38,13 +38,11 @@ class Template(Object): pass # does not apply to templates def emit_xml(self, xml: XmlEmitter): - if self.gir_class: - parent = self.gir_class.glib_type_name - elif self.tokens["class_name"]: - parent = self.tokens["class_name"] - else: - parent = None - xml.start_tag("template", **{"class": self.tokens["name"]}, parent=parent) + xml.start_tag( + "template", + **{"class": self.tokens["name"]}, + parent=self.gir_class or self.tokens["class_name"] + ) for child in self.children: child.emit_xml(xml) xml.end_tag() diff --git a/blueprintcompiler/xml_emitter.py b/blueprintcompiler/xml_emitter.py index bf9f968..d92d1bd 100644 --- a/blueprintcompiler/xml_emitter.py +++ b/blueprintcompiler/xml_emitter.py @@ -19,6 +19,7 @@ from xml.sax import saxutils +from . import gir class XmlEmitter: @@ -33,7 +34,7 @@ class XmlEmitter: self.result += f"<{tag}" for key, val in attrs.items(): if val is not None: - self.result += f' {key.replace("_", "-")}="{saxutils.escape(str(val))}"' + self.result += f' {key.replace("_", "-")}="{saxutils.escape(self._to_string(val))}"' self.result += ">" self._tag_stack.append(tag) self._needs_newline = False @@ -43,7 +44,7 @@ class XmlEmitter: self.result += f"<{tag}" for key, val in attrs.items(): if val is not None: - self.result += f' {key}="{saxutils.escape(str(val))}"' + self.result += f' {key.replace("_", "-")}="{saxutils.escape(self._to_string(val))}"' self.result += "/>" self._needs_newline = True @@ -61,3 +62,9 @@ class XmlEmitter: def _indent(self): if self.indent is not None: self.result += "\n" + " " * (self.indent * len(self._tag_stack)) + + def _to_string(self, val): + if isinstance(val, gir.GirType): + return val.glib_type_name + else: + return str(val)