diff --git a/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp b/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp index 1316bce4e03..fbfb0d25d42 100644 --- a/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp +++ b/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp @@ -4,8 +4,10 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include +#include #include #include #include @@ -260,9 +262,28 @@ void XMLDocumentBuilder::text(StringView data) void XMLDocumentBuilder::comment(StringView data) { - if (m_has_error) + if (m_has_error || !m_current_node) return; - MUST(m_document->append_child(m_document->create_comment(MUST(String::from_utf8(data))))); + + MUST(m_current_node->append_child(m_document->create_comment(MUST(String::from_utf8(data))))); +} + +void XMLDocumentBuilder::cdata_section(StringView data) +{ + if (m_has_error || !m_current_node) + return; + + auto section = MUST(m_document->create_cdata_section(MUST(String::from_utf8(data)))); + MUST(m_current_node->append_child(section)); +} + +void XMLDocumentBuilder::processing_instruction(StringView target, StringView data) +{ + if (m_has_error || !m_current_node) + return; + + auto processing_instruction = MUST(m_document->create_processing_instruction(MUST(String::from_utf8(target)), MUST(String::from_utf8(data)))); + MUST(m_current_node->append_child(processing_instruction)); } void XMLDocumentBuilder::document_end() diff --git a/Libraries/LibWeb/XML/XMLDocumentBuilder.h b/Libraries/LibWeb/XML/XMLDocumentBuilder.h index edc3d779786..60899a7e932 100644 --- a/Libraries/LibWeb/XML/XMLDocumentBuilder.h +++ b/Libraries/LibWeb/XML/XMLDocumentBuilder.h @@ -36,6 +36,8 @@ private: virtual void element_end(XML::Name const& name) override; virtual void text(StringView data) override; virtual void comment(StringView data) override; + virtual void cdata_section(StringView data) override; + virtual void processing_instruction(StringView target, StringView data) override; virtual void document_end() override; Optional namespace_for_name(XML::Name const&);