/* * Copyright (c) 2022, Ali Mohammad Pur * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace XML { struct Attribute { Name name; DeprecatedString value; }; struct Offset { size_t offset { 0 }; size_t line { 0 }; size_t column { 0 }; }; struct Node { struct Text { StringBuilder builder; }; struct Comment { DeprecatedString text; }; struct Element { Name name; HashMap attributes; Vector> children; }; bool operator==(Node const&) const; Offset offset; Variant content; Node* parent { nullptr }; bool is_text() const { return content.has(); } Text const& as_text() const { return content.get(); } bool is_comment() const { return content.has(); } Comment const& as_comment() const { return content.get(); } bool is_element() const { return content.has(); } Element const& as_element() const { return content.get(); } }; }