2020-08-21 21:11:07 +08:00
|
|
|
#ifndef HGL_UTIL_XML_ELEMENT_PARSE_CREATER_INCLUDE
|
|
|
|
#define HGL_UTIL_XML_ELEMENT_PARSE_CREATER_INCLUDE
|
|
|
|
|
|
|
|
#include<hgl/util/xml/ElementParse.h>
|
2020-09-03 15:58:38 +08:00
|
|
|
#include<hgl/type/String.h>
|
2020-08-21 21:11:07 +08:00
|
|
|
#include<hgl/type/Stack.h>
|
|
|
|
#include<hgl/type/Map.h>
|
|
|
|
namespace hgl
|
|
|
|
{
|
|
|
|
namespace xml
|
|
|
|
{
|
|
|
|
class ElementCreater
|
|
|
|
{
|
|
|
|
friend class ElementParseCreater;
|
|
|
|
|
2020-08-25 21:47:05 +08:00
|
|
|
UTF8String element_name;
|
2020-08-21 21:11:07 +08:00
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
Map<AnsiString,ElementCreater *> ecs_map;
|
|
|
|
|
2020-08-25 21:47:05 +08:00
|
|
|
virtual ElementCreater *GetSubElementCreater(const UTF8String &sub_name);
|
2020-08-21 21:11:07 +08:00
|
|
|
|
|
|
|
public:
|
|
|
|
|
2020-08-25 21:47:05 +08:00
|
|
|
const UTF8String &GetElementName()const{return element_name;}
|
2020-08-21 21:11:07 +08:00
|
|
|
|
|
|
|
public:
|
|
|
|
|
2020-08-25 21:47:05 +08:00
|
|
|
ElementCreater(const UTF8String &en){element_name=en;}
|
2020-08-21 21:11:07 +08:00
|
|
|
virtual ~ElementCreater()=default;
|
|
|
|
|
2020-08-25 21:47:05 +08:00
|
|
|
bool Registry(ElementCreater *ec);
|
2020-08-21 21:11:07 +08:00
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
virtual bool Start (){return true;}
|
2020-08-25 21:47:05 +08:00
|
|
|
virtual void Attr (const u8char *flag,const u8char *info){}
|
|
|
|
virtual void CharData (const u8char *str,const int str_length){}
|
2020-08-21 21:11:07 +08:00
|
|
|
|
|
|
|
virtual void End (){}
|
|
|
|
};//class ElementCreater
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creater模式XML节点解析器
|
|
|
|
*/
|
|
|
|
class ElementParseCreater:public ElementParse
|
|
|
|
{
|
|
|
|
Stack<ElementCreater *> ecs_stack;
|
2020-08-31 19:09:12 +08:00
|
|
|
|
|
|
|
Map<AnsiString,ElementCreater *> ecs_map;
|
2020-08-21 21:11:07 +08:00
|
|
|
|
|
|
|
ElementCreater *cur_ec;
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
2020-08-31 19:09:12 +08:00
|
|
|
ElementParseCreater(ElementCreater *root_ec)
|
2020-08-21 21:11:07 +08:00
|
|
|
{
|
2020-08-31 19:09:12 +08:00
|
|
|
cur_ec=nullptr;
|
|
|
|
|
|
|
|
Registry(root_ec);
|
2020-08-21 21:11:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
virtual ~ElementParseCreater()=default;
|
|
|
|
|
2020-08-31 19:09:12 +08:00
|
|
|
bool Registry (ElementCreater *ec);
|
|
|
|
|
2020-08-21 21:11:07 +08:00
|
|
|
public:
|
|
|
|
|
2020-08-25 21:47:05 +08:00
|
|
|
bool Start (const u8char *element_name) override;
|
|
|
|
void Attr (const u8char *flag,const u8char *info) override;
|
|
|
|
void CharData (const u8char *str,const int str_length) override;
|
|
|
|
void End (const u8char *element_name) override;
|
2020-08-21 21:11:07 +08:00
|
|
|
};//class ElementParseCreater:public ElementParse
|
|
|
|
}//namespace xml
|
|
|
|
}//namespace hgl
|
|
|
|
#endif//HGL_UTIL_XML_ELEMENT_PARSE_CREATER_INCLUDE
|