diff --git a/flumi/Scripts/B9/HTMLParser.gd b/flumi/Scripts/B9/HTMLParser.gd index 5234101..61e291e 100644 --- a/flumi/Scripts/B9/HTMLParser.gd +++ b/flumi/Scripts/B9/HTMLParser.gd @@ -134,15 +134,32 @@ static func is_valid_tag_pattern(tag: String) -> bool: func parse() -> ParseResult: xml_parser.open_buffer(bitcode) var element_stack: Array[HTMLElement] = [parse_result.root] + var body_element: HTMLElement = null while xml_parser.read() != ERR_FILE_EOF: match xml_parser.get_node_type(): XMLParser.NODE_ELEMENT: var element = create_element() var current_parent = element_stack.back() - element.parent = current_parent - current_parent.children.append(element) - parse_result.all_elements.append(element) + + # Handle nested body tags by preventing multiple body elements + if element.tag_name == "body": + if body_element == null: + # First body tag - handle normally + body_element = element + element.parent = current_parent + current_parent.children.append(element) + parse_result.all_elements.append(element) + else: + # Nested body tag -- merge its content with the existing body + # Don't create a new element, just change the parent context + if not element.is_self_closing: + element_stack.append(body_element) + continue + else: + element.parent = current_parent + current_parent.children.append(element) + parse_result.all_elements.append(element) if element.tag_name == "style": handle_style_element(element) @@ -152,7 +169,12 @@ func parse() -> ParseResult: XMLParser.NODE_ELEMENT_END: if element_stack.size() > 1: - element_stack.pop_back() + var tag_name = xml_parser.get_node_name() + # If this is a nested body closing tag, make sure we're using the right stack context + if tag_name == "body" and body_element != null and element_stack.back() == body_element: + element_stack.pop_back() + elif tag_name != "body": + element_stack.pop_back() XMLParser.NODE_TEXT: var text = xml_parser.get_node_data().strip_edges()