@@ -12,21 +12,27 @@ namespace dom {
using AttrMap = std::map<std::string, std::string>;
struct Text { std::string text; };
struct Text {
std::string text;
bool operator==(Text const &) const = default;
};
struct Element {
std::string name;
AttrMap attributes;
bool operator==(Element const &) const = default;
};
struct Node {
std::vector<Node> children;
std::variant<Text, Element> data;
bool operator==(Node const &) const = default;
};
struct Document {
std::string doctype;
Node html;
bool operator==(Document const &) const = default;
};
inline Document create_document(std::string_view doctype, Node html) {
@@ -45,22 +51,6 @@ std::vector<Node const *> nodes_by_path(Node const &root, std::string_view path)
std::string to_string(Document const &node);
inline bool operator==(dom::Text const &a, dom::Text const &b) noexcept {
return a.text == b.text;
}
inline bool operator==(dom::Element const &a, dom::Element const &b) noexcept {
return a.name == b.name && a.attributes == b.attributes;
}
inline bool operator==(dom::Node const &a, dom::Node const &b) noexcept {
return a.children == b.children && a.data == b.data;
}
inline bool operator==(dom::Document const &a, dom::Document const &b) noexcept {
return a.doctype == b.doctype && a.html == b.html;
}
} // namespace dom
#endif