diff --git a/inc/hgl/util/xml/ElementParseCreater.h b/inc/hgl/util/xml/ElementParseCreater.h index 84c7250..3493080 100644 --- a/inc/hgl/util/xml/ElementParseCreater.h +++ b/inc/hgl/util/xml/ElementParseCreater.h @@ -56,14 +56,58 @@ namespace hgl const UTF8String operator[](const UTF8String &flag) { + UTF8String key=flag.ToLowerCase(); UTF8String info; - if(attrs_list.Get(flag,info)) + if(attrs_list.Get(key,info)) return info; else return null_string; } + #define TO_CONV(TYPE,FN,SFN,DEFAULT_VALUE) \ + const TYPE FN (const UTF8String &flag,const TYPE default_value=DEFAULT_VALUE) \ + { \ + const UTF8String key=flag.ToLowerCase(); \ + \ + UTF8String info; \ + \ + if(!attrs_list.Get(key,info)) \ + return default_value; \ + \ + TYPE result; \ + \ + return info.SFN(result)?result:default_value; \ + } + + TO_CONV(uint, ToUInteger, ToUint, 0) + TO_CONV( int, ToInteger, ToInt, 0) + TO_CONV(float, ToFloat, ToFloat, 0) + TO_CONV(double, ToDouble, ToFloat, 0) + TO_CONV(bool, ToBool, ToBool, false) + + #undef TO_CONV + + const UTF8String ToString (const UTF8String &flag){return operator[](flag);} + const int ToSerial (const u8char **list,const UTF8String &flag,const int default_value) + { + UTF8String key=flag.ToLowerCase(); + UTF8String info; + + if(!attrs_list.Get(key,info)) + return default_value; + + int result=string_serial_from_list(list,info.c_str()); + + if(result==-1)return default_value; + return result; + } + + template const T ToEnum(const u8char **str_list,const u8char *str,const T &default_enum) + { + return T(this->ToSerial(str_list,str,(int)default_enum)); + } + public: virtual bool Init () override @@ -74,7 +118,11 @@ namespace hgl virtual void Attr (const u8char *flag,const u8char *info) override///<节点属性 { - attrs_list.Add(flag,info); + UTF8String key=flag; + + key.LowerCase(); + + attrs_list.Add(key,info); } };//class ElementAttribute:public ElementCreater