|
@@ -10,13 +10,13 @@
|
|
|
#include <LibWeb/DOM/DocumentFragment.h>
|
|
|
#include <LibWeb/DOM/DocumentType.h>
|
|
|
#include <LibWeb/DOM/Element.h>
|
|
|
-#include <LibWeb/DOM/ExceptionOr.h>
|
|
|
#include <LibWeb/DOM/Node.h>
|
|
|
#include <LibWeb/DOM/ProcessingInstruction.h>
|
|
|
#include <LibWeb/DOM/Text.h>
|
|
|
#include <LibWeb/DOMParsing/XMLSerializer.h>
|
|
|
#include <LibWeb/HTML/HTMLTemplateElement.h>
|
|
|
#include <LibWeb/Namespace.h>
|
|
|
+#include <LibWeb/WebIDL/ExceptionOr.h>
|
|
|
|
|
|
namespace Web::DOMParsing {
|
|
|
|
|
@@ -34,7 +34,7 @@ XMLSerializer::XMLSerializer(HTML::Window& window)
|
|
|
XMLSerializer::~XMLSerializer() = default;
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#dom-xmlserializer-serializetostring
|
|
|
-DOM::ExceptionOr<String> XMLSerializer::serialize_to_string(JS::NonnullGCPtr<DOM::Node> root)
|
|
|
+WebIDL::ExceptionOr<String> XMLSerializer::serialize_to_string(JS::NonnullGCPtr<DOM::Node> root)
|
|
|
{
|
|
|
// The serializeToString(root) method must produce an XML serialization of root passing a value of false for the require well-formed parameter, and return the result.
|
|
|
return serialize_node_to_xml_string(root, RequireWellFormed::No);
|
|
@@ -113,10 +113,10 @@ static bool prefix_is_in_prefix_map(String const& prefix, HashMap<FlyString, Vec
|
|
|
return candidates_list_iterator->value.contains_slow(prefix);
|
|
|
}
|
|
|
|
|
|
-DOM::ExceptionOr<String> serialize_node_to_xml_string_impl(JS::NonnullGCPtr<DOM::Node> root, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed);
|
|
|
+WebIDL::ExceptionOr<String> serialize_node_to_xml_string_impl(JS::NonnullGCPtr<DOM::Node> root, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed);
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#dfn-xml-serialization
|
|
|
-DOM::ExceptionOr<String> serialize_node_to_xml_string(JS::NonnullGCPtr<DOM::Node> root, RequireWellFormed require_well_formed)
|
|
|
+WebIDL::ExceptionOr<String> serialize_node_to_xml_string(JS::NonnullGCPtr<DOM::Node> root, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
// 1. Let namespace be a context namespace with value null. The context namespace tracks the XML serialization algorithm's current default namespace.
|
|
|
// The context namespace is changed when either an Element Node has a default namespace declaration, or the algorithm generates a default namespace declaration
|
|
@@ -140,16 +140,16 @@ DOM::ExceptionOr<String> serialize_node_to_xml_string(JS::NonnullGCPtr<DOM::Node
|
|
|
return serialize_node_to_xml_string_impl(root, namespace_, prefix_map, prefix_index, require_well_formed);
|
|
|
}
|
|
|
|
|
|
-static DOM::ExceptionOr<String> serialize_element(DOM::Element const& element, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed);
|
|
|
-static DOM::ExceptionOr<String> serialize_document(DOM::Document const& document, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed);
|
|
|
-static DOM::ExceptionOr<String> serialize_comment(DOM::Comment const& comment, RequireWellFormed require_well_formed);
|
|
|
-static DOM::ExceptionOr<String> serialize_text(DOM::Text const& text, RequireWellFormed require_well_formed);
|
|
|
-static DOM::ExceptionOr<String> serialize_document_fragment(DOM::DocumentFragment const& document_fragment, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed);
|
|
|
-static DOM::ExceptionOr<String> serialize_document_type(DOM::DocumentType const& document_type, RequireWellFormed require_well_formed);
|
|
|
-static DOM::ExceptionOr<String> serialize_processing_instruction(DOM::ProcessingInstruction const& processing_instruction, RequireWellFormed require_well_formed);
|
|
|
+static WebIDL::ExceptionOr<String> serialize_element(DOM::Element const& element, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed);
|
|
|
+static WebIDL::ExceptionOr<String> serialize_document(DOM::Document const& document, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed);
|
|
|
+static WebIDL::ExceptionOr<String> serialize_comment(DOM::Comment const& comment, RequireWellFormed require_well_formed);
|
|
|
+static WebIDL::ExceptionOr<String> serialize_text(DOM::Text const& text, RequireWellFormed require_well_formed);
|
|
|
+static WebIDL::ExceptionOr<String> serialize_document_fragment(DOM::DocumentFragment const& document_fragment, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed);
|
|
|
+static WebIDL::ExceptionOr<String> serialize_document_type(DOM::DocumentType const& document_type, RequireWellFormed require_well_formed);
|
|
|
+static WebIDL::ExceptionOr<String> serialize_processing_instruction(DOM::ProcessingInstruction const& processing_instruction, RequireWellFormed require_well_formed);
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#dfn-xml-serialization-algorithm
|
|
|
-DOM::ExceptionOr<String> serialize_node_to_xml_string_impl(JS::NonnullGCPtr<DOM::Node> root, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed)
|
|
|
+WebIDL::ExceptionOr<String> serialize_node_to_xml_string_impl(JS::NonnullGCPtr<DOM::Node> root, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
// Each of the following algorithms for producing an XML serialization of a DOM node take as input a node to serialize and the following arguments:
|
|
|
// - A context namespace namespace
|
|
@@ -212,7 +212,7 @@ DOM::ExceptionOr<String> serialize_node_to_xml_string_impl(JS::NonnullGCPtr<DOM:
|
|
|
|
|
|
// -> Anything else
|
|
|
// Throw a TypeError. Only Nodes and Attr objects can be serialized by this algorithm.
|
|
|
- return DOM::SimpleException { DOM::SimpleExceptionType::TypeError, "Can only serialize Nodes or Attributes." };
|
|
|
+ return WebIDL::SimpleException { WebIDL::SimpleExceptionType::TypeError, "Can only serialize Nodes or Attributes." };
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#dfn-recording-the-namespace-information
|
|
@@ -273,7 +273,7 @@ static Optional<String> record_namespace_information(DOM::Element const& element
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#dfn-serializing-an-attribute-value
|
|
|
-static DOM::ExceptionOr<String> serialize_an_attribute_value(String const& attribute_value, [[maybe_unused]] RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_an_attribute_value(String const& attribute_value, [[maybe_unused]] RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
// FIXME: 1. If the require well-formed flag is set (its value is true), and attribute value contains characters that are not matched by the XML Char production,
|
|
|
// then throw an exception; the serialization of this attribute value would fail to produce a well-formed element serialization.
|
|
@@ -306,7 +306,7 @@ struct LocalNameSetEntry {
|
|
|
};
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#dfn-xml-serialization-of-the-attributes
|
|
|
-static DOM::ExceptionOr<String> serialize_element_attributes(DOM::Element const& element, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, HashMap<String, String> const& local_prefixes_map, bool ignore_namespace_definition_attribute, RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_element_attributes(DOM::Element const& element, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, HashMap<String, String> const& local_prefixes_map, bool ignore_namespace_definition_attribute, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
auto& global_object = element.global_object();
|
|
|
|
|
@@ -459,7 +459,7 @@ static DOM::ExceptionOr<String> serialize_element_attributes(DOM::Element const&
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node
|
|
|
-static DOM::ExceptionOr<String> serialize_element(DOM::Element const& element, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_element(DOM::Element const& element, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
auto& global_object = element.global_object();
|
|
|
|
|
@@ -701,7 +701,7 @@ static DOM::ExceptionOr<String> serialize_element(DOM::Element const& element, O
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#xml-serializing-a-document-node
|
|
|
-static DOM::ExceptionOr<String> serialize_document(DOM::Document const& document, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_document(DOM::Document const& document, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
// If the require well-formed flag is set (its value is true), and this node has no documentElement (the documentElement attribute's value is null),
|
|
|
// then throw an exception; the serialization of this node would not be a well-formed document.
|
|
@@ -721,7 +721,7 @@ static DOM::ExceptionOr<String> serialize_document(DOM::Document const& document
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#xml-serializing-a-comment-node
|
|
|
-static DOM::ExceptionOr<String> serialize_comment(DOM::Comment const& comment, RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_comment(DOM::Comment const& comment, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
// If the require well-formed flag is set (its value is true), and node's data contains characters that are not matched by the XML Char production
|
|
|
// or contains "--" (two adjacent U+002D HYPHEN-MINUS characters) or that ends with a "-" (U+002D HYPHEN-MINUS) character, then throw an exception;
|
|
@@ -741,7 +741,7 @@ static DOM::ExceptionOr<String> serialize_comment(DOM::Comment const& comment, R
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node
|
|
|
-static DOM::ExceptionOr<String> serialize_text(DOM::Text const& text, [[maybe_unused]] RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_text(DOM::Text const& text, [[maybe_unused]] RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
// FIXME: 1. If the require well-formed flag is set (its value is true), and node's data contains characters that are not matched by the XML Char production,
|
|
|
// then throw an exception; the serialization of this node's data would not be well-formed.
|
|
@@ -763,7 +763,7 @@ static DOM::ExceptionOr<String> serialize_text(DOM::Text const& text, [[maybe_un
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#xml-serializing-a-documentfragment-node
|
|
|
-static DOM::ExceptionOr<String> serialize_document_fragment(DOM::DocumentFragment const& document_fragment, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_document_fragment(DOM::DocumentFragment const& document_fragment, Optional<FlyString>& namespace_, HashMap<FlyString, Vector<String>>& namespace_prefix_map, u64& prefix_index, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
// 1. Let markup the empty string.
|
|
|
StringBuilder markup;
|
|
@@ -778,7 +778,7 @@ static DOM::ExceptionOr<String> serialize_document_fragment(DOM::DocumentFragmen
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#xml-serializing-a-documenttype-node
|
|
|
-static DOM::ExceptionOr<String> serialize_document_type(DOM::DocumentType const& document_type, RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_document_type(DOM::DocumentType const& document_type, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
if (require_well_formed == RequireWellFormed::Yes) {
|
|
|
// FIXME: 1. If the require well-formed flag is true and the node's publicId attribute contains characters that are not matched by the XML PubidChar production,
|
|
@@ -844,7 +844,7 @@ static DOM::ExceptionOr<String> serialize_document_type(DOM::DocumentType const&
|
|
|
}
|
|
|
|
|
|
// https://w3c.github.io/DOM-Parsing/#dfn-xml-serializing-a-processinginstruction-node
|
|
|
-static DOM::ExceptionOr<String> serialize_processing_instruction(DOM::ProcessingInstruction const& processing_instruction, RequireWellFormed require_well_formed)
|
|
|
+static WebIDL::ExceptionOr<String> serialize_processing_instruction(DOM::ProcessingInstruction const& processing_instruction, RequireWellFormed require_well_formed)
|
|
|
{
|
|
|
if (require_well_formed == RequireWellFormed::Yes) {
|
|
|
// 1. If the require well-formed flag is set (its value is true), and node's target contains a ":" (U+003A COLON) character
|