From 1a6111e3f02b0a9cff0f81fb524b4dfb7d69854b Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Tue, 4 Nov 2025 21:59:42 +0800 Subject: Move xml to base. --- include/cru/base/xml/XmlParser.h | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 include/cru/base/xml/XmlParser.h (limited to 'include/cru/base/xml/XmlParser.h') diff --git a/include/cru/base/xml/XmlParser.h b/include/cru/base/xml/XmlParser.h new file mode 100644 index 00000000..22b529d7 --- /dev/null +++ b/include/cru/base/xml/XmlParser.h @@ -0,0 +1,43 @@ +#pragma once + +#include "../Exception.h" +#include "XmlNode.h" + +namespace cru::xml { +class CRU_BASE_API XmlParsingException : public Exception { + public: + using Exception::Exception; +}; + +class CRU_BASE_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 -- cgit v1.2.3