/* * Copyright (c) 2022, Ali Mohammad Pur * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace XML { enum class Version { Version10, Version11, }; struct Doctype { ByteString type; Vector markup_declarations; Optional external_id; }; class Document { public: explicit Document(NonnullOwnPtr root, Optional doctype, HashMap processing_instructions, Version version) : m_root(move(root)) , m_processing_instructions(move(processing_instructions)) , m_version(version) , m_explicit_doctype(move(doctype)) { } Node& root() { return *m_root; } Node const& root() const { return *m_root; } HashMap const& processing_instructions() const { return m_processing_instructions; } Version version() const { return m_version; } Optional const& doctype() const { return m_explicit_doctype; } private: NonnullOwnPtr m_root; HashMap m_processing_instructions; Version m_version; Optional m_explicit_doctype; }; }