Fix popping bug

This commit is contained in:
YishiMichael
2022-05-29 16:48:30 +08:00
parent 97ac8c9953
commit a73bd5d4fe

View File

@ -136,13 +136,15 @@ class SVGMobject(VMobject):
@staticmethod @staticmethod
def expand_use_elements(element_tree: ET.ElementTree) -> ET.ElementTree: def expand_use_elements(element_tree: ET.ElementTree) -> ET.ElementTree:
# Replace `use` elements with copies of elements they refer to # Replace `use` elements with copies of elements they refer to
xpath = f".//{SVG_XMLNS}use[@{SVG_XLINK}href]" while True:
element = element_tree.find(xpath) element = element_tree.find(f".//{SVG_XMLNS}use[@{SVG_XLINK}href]")
while element is not None: if element is None:
break
element.tag = f"{SVG_XMLNS}g" element.tag = f"{SVG_XMLNS}g"
attrs = element.attrib attrs = element.attrib
href_str = attrs.pop(f"{SVG_XLINK}href")[1:] href_id = attrs.pop(f"{SVG_XLINK}href")[1:]
href_element = element_tree.find(f".//{SVG_XMLNS}*[@id='{href_str}']") href_element = element_tree.find(f".//{SVG_XMLNS}*[@id='{href_id}']")
if href_element is None: if href_element is None:
continue continue
attrs.pop("width", None) attrs.pop("width", None)
@ -157,7 +159,6 @@ class SVGMobject(VMobject):
attrs["transform"] = translate_str attrs["transform"] = translate_str
shadow_node = ET.SubElement(element, href_element.tag, href_element.attrib) shadow_node = ET.SubElement(element, href_element.tag, href_element.attrib)
shadow_node.extend(href_element) shadow_node.extend(href_element)
element = element_tree.find(xpath)
for defs_element in element_tree.iterfind(f".//{SVG_XMLNS}defs"): for defs_element in element_tree.iterfind(f".//{SVG_XMLNS}defs"):
defs_element.clear() defs_element.clear()