| 
									
										
										
										
											2022-03-28 16:25:17 +04:30
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2022, Ali Mohammad Pur <mpfard@serenityos.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <LibWeb/DOM/Comment.h>
 | 
					
						
							|  |  |  | #include <LibWeb/DOM/Document.h>
 | 
					
						
							|  |  |  | #include <LibWeb/DOM/ElementFactory.h>
 | 
					
						
							|  |  |  | #include <LibWeb/DOM/Node.h>
 | 
					
						
							|  |  |  | #include <LibWeb/DOM/Text.h>
 | 
					
						
							| 
									
										
										
										
											2023-06-08 11:37:08 -04:00
										 |  |  | #include <LibWeb/Namespace.h>
 | 
					
						
							| 
									
										
										
										
											2022-03-28 16:25:17 +04:30
										 |  |  | #include <LibXML/Parser/Parser.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Web { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum class XMLScriptingSupport { | 
					
						
							|  |  |  |     Disabled, | 
					
						
							|  |  |  |     Enabled, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-12 23:13:24 +02:00
										 |  |  | ErrorOr<Variant<ByteString, Vector<XML::MarkupDeclaration>>> resolve_xml_resource(XML::SystemID const&, Optional<XML::PublicID> const&); | 
					
						
							| 
									
										
										
										
											2022-03-28 16:25:17 +04:30
										 |  |  | 
 | 
					
						
							|  |  |  | class XMLDocumentBuilder final : public XML::Listener { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     XMLDocumentBuilder(DOM::Document& document, XMLScriptingSupport = XMLScriptingSupport::Enabled); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool has_error() const { return m_has_error; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2023-12-16 17:49:34 +03:30
										 |  |  |     virtual void set_source(ByteString) override; | 
					
						
							| 
									
										
										
										
											2024-11-20 18:35:29 -05:00
										 |  |  |     virtual void set_doctype(XML::Doctype) override; | 
					
						
							| 
									
										
										
										
											2023-12-16 17:49:34 +03:30
										 |  |  |     virtual void element_start(XML::Name const& name, HashMap<XML::Name, ByteString> const& attributes) override; | 
					
						
							| 
									
										
										
										
											2022-03-28 16:25:17 +04:30
										 |  |  |     virtual void element_end(XML::Name const& name) override; | 
					
						
							| 
									
										
										
										
											2023-01-08 14:18:33 +03:30
										 |  |  |     virtual void text(StringView data) override; | 
					
						
							|  |  |  |     virtual void comment(StringView data) override; | 
					
						
							| 
									
										
										
										
											2022-03-28 16:25:17 +04:30
										 |  |  |     virtual void document_end() override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-15 04:01:23 +13:00
										 |  |  |     GC::Ref<DOM::Document> m_document; | 
					
						
							|  |  |  |     GC::Ptr<DOM::Node> m_current_node; | 
					
						
							| 
									
										
										
										
											2022-03-28 16:25:17 +04:30
										 |  |  |     XMLScriptingSupport m_scripting_support { XMLScriptingSupport::Enabled }; | 
					
						
							|  |  |  |     bool m_has_error { false }; | 
					
						
							|  |  |  |     StringBuilder text_builder; | 
					
						
							| 
									
										
										
										
											2024-02-18 14:27:25 +00:00
										 |  |  |     Optional<FlyString> m_namespace; | 
					
						
							| 
									
										
										
										
											2023-10-07 12:31:37 +03:30
										 |  |  | 
 | 
					
						
							|  |  |  |     struct NamespaceStackEntry { | 
					
						
							| 
									
										
										
										
											2024-02-18 14:27:25 +00:00
										 |  |  |         Optional<FlyString> ns; | 
					
						
							| 
									
										
										
										
											2023-10-07 12:31:37 +03:30
										 |  |  |         size_t depth; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     Vector<NamespaceStackEntry, 2> m_namespace_stack; | 
					
						
							| 
									
										
										
										
											2022-03-28 16:25:17 +04:30
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |