use u8char instead char in XMLParse

This commit is contained in:
2020-08-25 21:47:05 +08:00
parent e79ac1ca03
commit 44f897d608
7 changed files with 61 additions and 56 deletions

View File

@@ -1,6 +1,7 @@
#ifndef HGL_UTIL_XML_ELEMENT_PARSE_INCLUDE #ifndef HGL_UTIL_XML_ELEMENT_PARSE_INCLUDE
#define HGL_UTIL_XML_ELEMENT_PARSE_INCLUDE #define HGL_UTIL_XML_ELEMENT_PARSE_INCLUDE
#include<hgl/type/DataType.h>
namespace hgl namespace hgl
{ {
namespace xml namespace xml
@@ -14,10 +15,10 @@ namespace hgl
virtual ~ElementParse()=default; virtual ~ElementParse()=default;
virtual bool Start (const char *element_name) {return(true);} virtual bool Start (const u8char *element_name) {return(true);}
virtual void Attr (const char *flag,const char *info) {} virtual void Attr (const u8char *flag,const u8char *info) {}
virtual void CharData (const char *str,const int str_length) {} virtual void CharData (const u8char *str,const int str_length){}
virtual void End (const char *element_name) {} virtual void End (const u8char *element_name) {}
};//class ElementParse };//class ElementParse
}//namespace xml }//namespace xml
}//namespace hgl }//namespace hgl

View File

@@ -13,30 +13,30 @@ namespace hgl
{ {
friend class ElementParseCreater; friend class ElementParseCreater;
AnsiString element_name; UTF8String element_name;
protected: protected:
Map<AnsiString,ElementCreater *> ecs_map; Map<AnsiString,ElementCreater *> ecs_map;
virtual ElementCreater *GetSubElementCreater(const AnsiString &sub_name); virtual ElementCreater *GetSubElementCreater(const UTF8String &sub_name);
public: public:
const AnsiString &GetElementName()const{return element_name;} const UTF8String &GetElementName()const{return element_name;}
public: public:
ElementCreater(const AnsiString &en){element_name=en;} ElementCreater(const UTF8String &en){element_name=en;}
virtual ~ElementCreater()=default; virtual ~ElementCreater()=default;
bool Registry(const AnsiString &name,ElementCreater *ec); bool Registry(ElementCreater *ec);
public: public:
virtual bool Start (){return true;} virtual bool Start (){return true;}
virtual void Attr (const char *flag,const char *info){} virtual void Attr (const u8char *flag,const u8char *info){}
virtual void CharData (const char *str,const int str_length){} virtual void CharData (const u8char *str,const int str_length){}
virtual void End (){} virtual void End (){}
};//class ElementCreater };//class ElementCreater
@@ -63,10 +63,10 @@ namespace hgl
public: public:
bool Start (const char *element_name) override; bool Start (const u8char *element_name) override;
void Attr (const char *flag,const char *info) override; void Attr (const u8char *flag,const u8char *info) override;
void CharData (const char *str,const int str_length) override; void CharData (const u8char *str,const int str_length) override;
void End (const char *element_name) override; void End (const u8char *element_name) override;
};//class ElementParseCreater:public ElementParse };//class ElementParseCreater:public ElementParse
}//namespace xml }//namespace xml
}//namespace hgl }//namespace hgl

View File

@@ -15,49 +15,49 @@ namespace hgl
{ {
protected: protected:
using AttrsMap=Map<AnsiString,AnsiString>; using AttrsMap=Map<UTF8String,UTF8String>;
using AttrItem=Pair<AnsiString,AnsiString>; using AttrItem=Pair<UTF8String,UTF8String>;
AttrsMap attrs_map; AttrsMap attrs_map;
protected: protected:
const AttrItem *GetAttrItem(const AnsiString &name); const AttrItem *GetAttrItem(const UTF8String &name);
template<typename T> const bool GetInteger (const AnsiString &name,T &value){const AttrItem *ai=GetAttrItem(name);return(ai?stoi(ai->right.c_str(),value):false);} template<typename T> const bool GetInteger (const UTF8String &name,T &value){const AttrItem *ai=GetAttrItem(name);return(ai?stoi(ai->right.c_str(),value):false);}
template<typename T> const bool GetUInteger (const AnsiString &name,T &value){const AttrItem *ai=GetAttrItem(name);return(ai?stou(ai->right.c_str(),value):false);} template<typename T> const bool GetUInteger (const UTF8String &name,T &value){const AttrItem *ai=GetAttrItem(name);return(ai?stou(ai->right.c_str(),value):false);}
template<typename T> const bool GetFloat (const AnsiString &name,T &value){const AttrItem *ai=GetAttrItem(name);return(ai?stof(ai->right.c_str(),value):false);} template<typename T> const bool GetFloat (const UTF8String &name,T &value){const AttrItem *ai=GetAttrItem(name);return(ai?stof(ai->right.c_str(),value):false);}
public: public:
virtual ~ElementParseKV()=default; virtual ~ElementParseKV()=default;
virtual void Attr(const char *flag,const char *info) override; virtual void Attr(const u8char *flag,const u8char *info) override;
public: public:
const bool IsExist (const AnsiString &name)const{return attrs_map.KeyExist(name);} const bool IsExist (const UTF8String &name)const{return attrs_map.KeyExist(name);}
const char * ToCString (const AnsiString &name){const AttrItem *ai=GetAttrItem(name);return(ai?ai->right.c_str():nullptr);} const u8char * ToCString (const UTF8String &name){const AttrItem *ai=GetAttrItem(name);return(ai?ai->right.c_str():nullptr);}
const char * operator[] (const AnsiString &name){return ToCString(name);} const u8char * operator[] (const UTF8String &name){return ToCString(name);}
public: public:
const bool Get(const AnsiString &name,AnsiString &str); const bool Get(const UTF8String &name,UTF8String &str);
const bool Get(const AnsiString &name,UTF16String &str); const bool Get(const UTF8String &name,UTF16String &str);
const bool Get(const AnsiString &name,char &ch); const bool Get(const UTF8String &name,u8char &ch);
const bool Get(const AnsiString &name,bool &value); const bool Get(const UTF8String &name,bool &value);
const bool Get(const AnsiString &name, int8 &value){return GetInteger < int8 >(name,value);} const bool Get(const UTF8String &name, int8 &value){return GetInteger < int8 >(name,value);}
const bool Get(const AnsiString &name,uint8 &value){return GetUInteger<uint8 >(name,value);} const bool Get(const UTF8String &name,uint8 &value){return GetUInteger<uint8 >(name,value);}
const bool Get(const AnsiString &name, int16 &value){return GetInteger < int16>(name,value);} const bool Get(const UTF8String &name, int16 &value){return GetInteger < int16>(name,value);}
const bool Get(const AnsiString &name,uint16 &value){return GetUInteger<uint16>(name,value);} const bool Get(const UTF8String &name,uint16 &value){return GetUInteger<uint16>(name,value);}
const bool Get(const AnsiString &name, int32 &value){return GetInteger < int32>(name,value);} const bool Get(const UTF8String &name, int32 &value){return GetInteger < int32>(name,value);}
const bool Get(const AnsiString &name,uint32 &value){return GetUInteger<uint32>(name,value);} const bool Get(const UTF8String &name,uint32 &value){return GetUInteger<uint32>(name,value);}
const bool Get(const AnsiString &name, int64 &value){return GetInteger < int64>(name,value);} const bool Get(const UTF8String &name, int64 &value){return GetInteger < int64>(name,value);}
const bool Get(const AnsiString &name,uint64 &value){return GetUInteger<uint64>(name,value);} const bool Get(const UTF8String &name,uint64 &value){return GetUInteger<uint64>(name,value);}
const bool GetHexStr(const AnsiString &name,uint8 *data); const bool GetHexStr(const UTF8String &name,uint8 *data);
};//class ElementParseKV:public ElementParse };//class ElementParseKV:public ElementParse
}//namespace xml }//namespace xml
}//namespace hgl }//namespace hgl

View File

@@ -4,16 +4,20 @@ namespace hgl
{ {
namespace xml namespace xml
{ {
bool ElementCreater::Registry(const AnsiString &name,ElementCreater *ec) bool ElementCreater::Registry(ElementCreater *ec)
{ {
if(name.Length()<=0||!ec)return(false); if(!ec)return(false);
const UTF8String &name=ec->GetElementName();
if(name.IsEmpty())return(false);
if(ecs_map.KeyExist(name))return(false); if(ecs_map.KeyExist(name))return(false);
ecs_map.Add(name,ec); ecs_map.Add(name,ec);
return(true); return(true);
} }
ElementCreater *ElementCreater::GetSubElementCreater(const AnsiString &sub_name) ElementCreater *ElementCreater::GetSubElementCreater(const UTF8String &sub_name)
{ {
if(sub_name.IsEmpty())return(nullptr); if(sub_name.IsEmpty())return(nullptr);

View File

@@ -4,7 +4,7 @@ namespace hgl
{ {
namespace xml namespace xml
{ {
bool ElementParseCreater::Start (const char *element_name) bool ElementParseCreater::Start (const u8char *element_name)
{ {
if(!element_name||!*element_name)return(false); if(!element_name||!*element_name)return(false);
@@ -27,21 +27,21 @@ namespace hgl
return(cur_ec); return(cur_ec);
} }
void ElementParseCreater::Attr(const char *flag,const char *info) void ElementParseCreater::Attr(const u8char *flag,const u8char *info)
{ {
if(!cur_ec)return; if(!cur_ec)return;
cur_ec->Attr(flag,info); cur_ec->Attr(flag,info);
} }
void ElementParseCreater::CharData(const char *str,const int str_length) void ElementParseCreater::CharData(const u8char *str,const int str_length)
{ {
if(!cur_ec)return; if(!cur_ec)return;
cur_ec->CharData(str,str_length); cur_ec->CharData(str,str_length);
} }
void ElementParseCreater::End(const char *element_name) void ElementParseCreater::End(const u8char *element_name)
{ {
if(cur_ec) if(cur_ec)
{ {

View File

@@ -5,7 +5,7 @@ namespace hgl
{ {
namespace xml namespace xml
{ {
const ElementParseKV::AttrItem *ElementParseKV::GetAttrItem(const AnsiString &name) const ElementParseKV::AttrItem *ElementParseKV::GetAttrItem(const UTF8String &name)
{ {
const int pos=attrs_map.FindPos(name); const int pos=attrs_map.FindPos(name);
@@ -19,7 +19,7 @@ namespace hgl
attrs_map.Add(flag,info); attrs_map.Add(flag,info);
} }
const bool ElementParseKV::Get(const AnsiString &name,AnsiString &str) const bool ElementParseKV::Get(const UTF8String &name,UTF8String &str)
{ {
const AttrItem *ai=GetAttrItem(name); const AttrItem *ai=GetAttrItem(name);
@@ -29,7 +29,7 @@ namespace hgl
return(true); return(true);
} }
const bool ElementParseKV::Get(const AnsiString &name,UTF16String &str) const bool ElementParseKV::Get(const UTF8String &name,UTF16String &str)
{ {
const AttrItem *ai=GetAttrItem(name); const AttrItem *ai=GetAttrItem(name);
@@ -39,7 +39,7 @@ namespace hgl
return(true); return(true);
} }
const bool ElementParseKV::Get(const AnsiString &name,char &ch) const bool ElementParseKV::Get(const UTF8String &name,char &ch)
{ {
const AttrItem *ai=GetAttrItem(name); const AttrItem *ai=GetAttrItem(name);
@@ -49,14 +49,14 @@ namespace hgl
return(true); return(true);
} }
const bool ElementParseKV::Get(const AnsiString &name,bool &value) const bool ElementParseKV::Get(const UTF8String &name,bool &value)
{ {
const AttrItem *ai=GetAttrItem(name); const AttrItem *ai=GetAttrItem(name);
return(ai?stob<char>(ai->right.c_str(),value):false); return(ai?stob<char>(ai->right.c_str(),value):false);
} }
const bool ElementParseKV::GetHexStr(const AnsiString &name,uint8 *data) const bool ElementParseKV::GetHexStr(const UTF8String &name,uint8 *data)
{ {
const AttrItem *ai=GetAttrItem(name); const AttrItem *ai=GetAttrItem(name);

View File

@@ -13,11 +13,11 @@ namespace hgl
{ {
void XMLStartElement(ElementParse *ep,const XML_Char *name,const XML_Char **atts) void XMLStartElement(ElementParse *ep,const XML_Char *name,const XML_Char **atts)
{ {
if(!ep->Start(name)) if(!ep->Start((const u8char *)name))
return; return;
const char *flag; const u8char *flag;
const char *info; const u8char *info;
while(*atts) while(*atts)
{ {
@@ -30,12 +30,12 @@ namespace hgl
void XMLCharData(ElementParse *ep,const XML_Char *str,int len) void XMLCharData(ElementParse *ep,const XML_Char *str,int len)
{ {
ep->CharData(str,len); ep->CharData((const u8char *)str,len);
} }
void XMLEndElement(ElementParse *ep,const XML_Char *name) void XMLEndElement(ElementParse *ep,const XML_Char *name)
{ {
ep->End(name); ep->End((const u8char *)name);
} }
}//namespace }//namespace