/* * Copyright (c) 2022, Ali Mohammad Pur * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace XML { struct Attribute { Name name; ByteString value; }; struct Node { struct Text { StringBuilder builder; }; struct Comment { ByteString text; }; struct Element { Name name; HashMap attributes; Vector> children; }; bool operator==(Node const&) const; LineTrackingLexer::Position 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(); } }; }