aboutsummaryrefslogtreecommitdiff
path: root/include/cru/xml
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-04 21:59:42 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-04 21:59:42 +0800
commit1a6111e3f02b0a9cff0f81fb524b4dfb7d69854b (patch)
tree3a92e1bf61fc165c2148f38ca6602f5066011f06 /include/cru/xml
parentf48505c96a70e2f1d1982fea30f3015e42fcd49d (diff)
downloadcru-1a6111e3f02b0a9cff0f81fb524b4dfb7d69854b.tar.gz
cru-1a6111e3f02b0a9cff0f81fb524b4dfb7d69854b.tar.bz2
cru-1a6111e3f02b0a9cff0f81fb524b4dfb7d69854b.zip
Move xml to base.
Diffstat (limited to 'include/cru/xml')
-rw-r--r--include/cru/xml/Base.h11
-rw-r--r--include/cru/xml/XmlNode.h158
-rw-r--r--include/cru/xml/XmlParser.h44
3 files changed, 0 insertions, 213 deletions
diff --git a/include/cru/xml/Base.h b/include/cru/xml/Base.h
deleted file mode 100644
index aa3aeaa2..00000000
--- a/include/cru/xml/Base.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#pragma once
-
-#ifdef CRU_IS_DLL
-#ifdef CRU_XML_EXPORT_API
-#define CRU_XML_API __declspec(dllexport)
-#else
-#define CRU_XML_API __declspec(dllimport)
-#endif
-#else
-#define CRU_XML_API
-#endif
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
diff --git a/include/cru/xml/XmlParser.h b/include/cru/xml/XmlParser.h
deleted file mode 100644
index b6589f1b..00000000
--- a/include/cru/xml/XmlParser.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#pragma once
-
-#include "XmlNode.h"
-
-#include "cru/base/Exception.h"
-
-namespace cru::xml {
-class CRU_XML_API XmlParsingException : public Exception {
- public:
- using Exception::Exception;
-};
-
-class CRU_XML_API XmlParser {
- public:
- explicit XmlParser(std::string xml);
-
- CRU_DELETE_COPY(XmlParser)
- CRU_DELETE_MOVE(XmlParser)
-
- ~XmlParser();
-
- XmlElementNode* Parse();
-
- private:
- XmlElementNode* DoParse();
-
- char16_t Read1();
- std::string ReadWithoutAdvance(int count = 1);
- void ReadSpacesAndDiscard();
- std::string ReadSpaces();
- std::string ReadIdenitifier();
- std::string ReadAttributeString();
-
- private:
- std::string xml_;
-
- XmlElementNode* cache_ = nullptr;
-
- // Consider the while file enclosed by a single tag called $root.
- XmlElementNode* pseudo_root_node_ = new XmlElementNode("$root");
- XmlElementNode* current_ = pseudo_root_node_;
- int current_position_ = 0;
-};
-} // namespace cru::xml