aboutsummaryrefslogtreecommitdiff
path: root/include/cru/xml/XmlNode.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/xml/XmlNode.h')
-rw-r--r--include/cru/xml/XmlNode.h158
1 files changed, 0 insertions, 158 deletions
diff --git a/include/cru/xml/XmlNode.h b/include/cru/xml/XmlNode.h
deleted file mode 100644
index 1574f6fa..00000000
--- a/include/cru/xml/XmlNode.h
+++ /dev/null
@@ -1,158 +0,0 @@
-#pragma once
-
-#include "Base.h"
-
-#include <cru/base/Base.h>
-#include <cru/base/StringUtil.h>
-#include <optional>
-#include <vector>
-
-namespace cru::xml {
-class XmlElementNode;
-class XmlTextNode;
-class XmlCommentNode;
-
-class CRU_XML_API XmlNode {
- friend XmlElementNode;
-
- public:
- enum class Type { Text, Element, Comment };
-
- protected:
- explicit XmlNode(Type type) : type_(type) {}
-
- public:
- CRU_DELETE_COPY(XmlNode)
- CRU_DELETE_MOVE(XmlNode)
-
- virtual ~XmlNode() = default;
-
- Type GetType() const { return type_; }
- XmlElementNode* GetParent() const { return parent_; }
-
- virtual XmlNode* Clone() const = 0;
-
- bool IsTextNode() const { return type_ == Type::Text; }
- bool IsElementNode() const { return type_ == Type::Element; }
- bool IsCommentNode() const { return type_ == Type::Comment; }
-
- XmlElementNode* AsElement();
- XmlTextNode* AsText();
- XmlCommentNode* AsComment();
- const XmlElementNode* AsElement() const;
- const XmlTextNode* AsText() const;
- const XmlCommentNode* AsComment() const;
-
- private:
- const Type type_;
- XmlElementNode* parent_ = nullptr;
-};
-
-class CRU_XML_API XmlTextNode : public XmlNode {
- public:
- XmlTextNode() : XmlNode(Type::Text) {}
- explicit XmlTextNode(std::string text)
- : XmlNode(Type::Text), text_(std::move(text)) {}
-
- CRU_DELETE_COPY(XmlTextNode)
- CRU_DELETE_MOVE(XmlTextNode)
-
- ~XmlTextNode() override = default;
-
- public:
- std::string GetText() const { return text_; }
- void SetText(std::string text) { text_ = std::move(text); }
-
- XmlNode* Clone() const override { return new XmlTextNode(text_); }
-
- private:
- std::string text_;
-};
-
-class CRU_XML_API XmlElementNode : public XmlNode {
- public:
- XmlElementNode() : XmlNode(Type::Element) {}
- explicit XmlElementNode(std::string tag,
- std::unordered_map<std::string, std::string> attributes = {})
- : XmlNode(Type::Element),
- tag_(std::move(tag)),
- attributes_(std::move(attributes)) {}
-
- CRU_DELETE_COPY(XmlElementNode)
- CRU_DELETE_MOVE(XmlElementNode)
-
- ~XmlElementNode() override;
-
- public:
- std::string GetTag() const { return tag_; }
- void SetTag(std::string tag) { tag_ = std::move(tag); }
- const std::unordered_map<std::string, std::string>& GetAttributes() const {
- return attributes_;
- }
- void SetAttributes(std::unordered_map<std::string, std::string> attributes) {
- attributes_ = std::move(attributes);
- }
- const std::vector<XmlNode*> GetChildren() const { return children_; }
-
- Index GetChildCount() const { return children_.size(); }
- std::string GetAttributeValue(const std::string& key) const {
- return attributes_.at(key);
- }
- std::string GetAttributeValueCaseInsensitive(const std::string& key) const {
- return *GetOptionalAttributeValueCaseInsensitive(key);
- }
- std::optional<std::string> GetOptionalAttributeValue(const std::string& key) const {
- auto it = attributes_.find(key);
- if (it == attributes_.end()) {
- return std::nullopt;
- }
-
- return it->second;
- }
- std::optional<std::string> GetOptionalAttributeValueCaseInsensitive(
- const std::string& key) const {
- for (auto it = attributes_.begin(); it != attributes_.end(); ++it) {
- if (cru::string::CaseInsensitiveCompare(it->first, key) == 0) {
- return it->second;
- }
- }
-
- return std::nullopt;
- }
-
- XmlNode* GetChildAt(Index index) const { return children_[index]; }
-
- void AddAttribute(std::string key, std::string value);
- void AddChild(XmlNode* child);
-
- Index GetChildElementCount() const;
- XmlElementNode* GetFirstChildElement() const;
-
- XmlNode* Clone() const override;
-
- private:
- std::string tag_;
- std::unordered_map<std::string, std::string> attributes_;
- std::vector<XmlNode*> children_;
-};
-
-class CRU_XML_API XmlCommentNode : public XmlNode {
- public:
- XmlCommentNode() : XmlNode(Type::Comment) {}
- explicit XmlCommentNode(std::string text)
- : XmlNode(Type::Comment), text_(std::move(text)) {}
-
- CRU_DELETE_COPY(XmlCommentNode)
- CRU_DELETE_MOVE(XmlCommentNode)
-
- ~XmlCommentNode() override;
-
- std::string GetText() const { return text_; }
- void SetText(std::string text) { text_ = std::move(text); }
-
- XmlNode* Clone() const override;
-
- private:
- std::string text_;
-};
-} // namespace cru::xml