use "enum class" instead of "enum" at "CharCodePage".

This commit is contained in:
2021-07-27 11:32:39 +08:00
parent 468aa44622
commit 8f4a069c1c
5 changed files with 114 additions and 111 deletions

View File

@@ -13,41 +13,41 @@ namespace hgl
constexpr struct CodePageAndCharSet CodePage2CharSet[]= constexpr struct CodePageAndCharSet CodePage2CharSet[]=
{ {
{ccpNone, "us-ascii" }, {CharCodePage::NONE, "us-ascii" },
{ccpGBK, "gbk" }, {CharCodePage::GBK, "gbk" },
{ccpBig5, "big5" }, {CharCodePage::Big5, "big5" },
{ccpGB2312, "gb2312" }, {CharCodePage::GB2312, "gb2312" },
{ccpGB18030, "gb18030" }, {CharCodePage::GB18030, "gb18030" },
{ccpShiftJIS, "shift-jis" }, {CharCodePage::ShiftJIS, "shift-jis" },
{ccpJISX, "iso-2022-jp" }, {CharCodePage::JISX, "iso-2022-jp" },
{ccpKorean, "ks_c_5601-1987"}, {CharCodePage::Korean, "ks_c_5601-1987"},
{ccpMacJanpan, "x-mac-japanese" }, {CharCodePage::MacJanpan, "x-mac-japanese" },
{ccpMacTraditionalChinese, "x-mac-chinesetrad" }, {CharCodePage::MacTraditionalChinese, "x-mac-chinesetrad" },
{ccpMacSimplifiedChinese, "x-mac-chinesesimp" }, {CharCodePage::MacSimplifiedChinese, "x-mac-chinesesimp" },
{ccp8859_1, "iso-8859-1"}, {CharCodePage::ISO_8859_1, "iso-8859-1"},
{ccp8859_2, "iso-8859-2"}, {CharCodePage::ISO_8859_2, "iso-8859-2"},
{ccp8859_3, "iso-8859-3"}, {CharCodePage::ISO_8859_3, "iso-8859-3"},
{ccp8859_4, "iso-8859-4"}, {CharCodePage::ISO_8859_4, "iso-8859-4"},
{ccp8859_5, "iso-8859-5"}, {CharCodePage::ISO_8859_5, "iso-8859-5"},
{ccp8859_6, "iso-8859-6"}, {CharCodePage::ISO_8859_6, "iso-8859-6"},
{ccp8859_7, "iso-8859-7"}, {CharCodePage::ISO_8859_7, "iso-8859-7"},
{ccp8859_8, "iso-8859-8"}, {CharCodePage::ISO_8859_8, "iso-8859-8"},
{ccp8859_9, "iso-8859-9"}, {CharCodePage::ISO_8859_9, "iso-8859-9"},
{ccp8859_13, "iso-8859-13"}, {CharCodePage::ISO_8859_13, "iso-8859-13"},
{ccp8859_15, "iso-8859-15"}, {CharCodePage::ISO_8859_15, "iso-8859-15"},
{ccpUTF7, "utf-7" }, {CharCodePage::UTF7, "utf-7" },
{ccpUTF8, "utf-8" }, {CharCodePage::UTF8, "utf-8" },
{ccpUTF16LE, "utf-16le" }, {CharCodePage::UTF16LE, "utf-16le" },
{ccpUTF16BE, "utf-16be" }, {CharCodePage::UTF16BE, "utf-16be" },
{ccpUTF32LE, "utf-32le" }, {CharCodePage::UTF32LE, "utf-32le" },
{ccpUTF32BE, "utf-32be" }, {CharCodePage::UTF32BE, "utf-32be" },
};//const struct };//const struct
constexpr int CharSetCount=sizeof(CodePage2CharSet)/sizeof(CodePageAndCharSet); constexpr int CharSetCount=sizeof(CodePage2CharSet)/sizeof(CodePageAndCharSet);
@@ -63,48 +63,51 @@ namespace hgl
constexpr struct CodePageAndCharSet CodeSet2CharPage[]= constexpr struct CodePageAndCharSet CodeSet2CharPage[]=
{ {
{ccpNone, "us-ascii" }, {CharCodePage::NONE, "us-ascii" },
{ccpGBK, "gbk" }, {CharCodePage::GBK, "gbk" },
{ccpBig5, "big5" }, {CharCodePage::Big5, "big5" },
{ccpBig5, "bigfive" }, {CharCodePage::Big5, "bigfive" },
{ccpGB2312, "gb2312" }, {CharCodePage::GB2312, "gb2312" },
{ccpGB18030, "gb18030" }, {CharCodePage::GB18030, "gb18030" },
{ccpShiftJIS, "shift_jis" }, {CharCodePage::ShiftJIS, "shift_jis" },
{ccpJISX, "iso-2022-jp" }, {CharCodePage::JISX, "iso-2022-jp" },
{ccpKorean, "ks_c_5601-1987"}, {CharCodePage::Korean, "ks_c_5601-1987"},
{ccpMacJanpan, "x-mac-japanese" }, {CharCodePage::MacJanpan, "x-mac-japanese" },
{ccpMacTraditionalChinese, "x-mac-chinesetrad" }, {CharCodePage::MacTraditionalChinese, "x-mac-chinesetrad" },
{ccpMacSimplifiedChinese, "x-mac-chinesesimp" }, {CharCodePage::MacSimplifiedChinese, "x-mac-chinesesimp" },
{ccp8859_1, "iso-8859-1"}, {CharCodePage::ISO_8859_1, "iso-8859-1"},
{ccp8859_2, "iso-8859-2"}, {CharCodePage::ISO_8859_2, "iso-8859-2"},
{ccp8859_3, "iso-8859-3"}, {CharCodePage::ISO_8859_3, "iso-8859-3"},
{ccp8859_4, "iso-8859-4"}, {CharCodePage::ISO_8859_4, "iso-8859-4"},
{ccp8859_5, "iso-8859-5"}, {CharCodePage::ISO_8859_5, "iso-8859-5"},
{ccp8859_6, "iso-8859-6"}, {CharCodePage::ISO_8859_6, "iso-8859-6"},
{ccp8859_7, "iso-8859-7"}, {CharCodePage::ISO_8859_7, "iso-8859-7"},
{ccp8859_8, "iso-8859-8"}, {CharCodePage::ISO_8859_8, "iso-8859-8"},
{ccp8859_9, "iso-8859-9"}, {CharCodePage::ISO_8859_9, "iso-8859-9"},
{ccp8859_13, "iso-8859-13"}, {CharCodePage::ISO_8859_13, "iso-8859-13"},
{ccp8859_15, "iso-8859-15"}, {CharCodePage::ISO_8859_15, "iso-8859-15"},
{ccpUTF7, "utf7" }, {CharCodePage::UTF7, "utf-7" },
{ccpUTF8, "utf8" }, {CharCodePage::UTF8, "utf-8" },
{ccpUTF16LE, "utf16le" }, {CharCodePage::UTF16LE, "utf-16le" },
{ccpUTF16BE, "utf16be" }, {CharCodePage::UTF16BE, "utf-16be" },
{ccpUTF32LE, "utf32le" }, {CharCodePage::UTF32LE, "utf-32le" },
{ccpUTF32BE, "utf32be" }, {CharCodePage::UTF32BE, "utf-32be" },
{ccpUTF16LE, "ucs2le" }, {CharCodePage::UTF16LE, "utf-16" },
{ccpUTF16BE, "ucs2be" }, {CharCodePage::UTF16BE, "unicodeFFFE"},
{ccpUTF32LE, "ucs4le" },
{ccpUTF32BE, "ucs4be" } {CharCodePage::UTF16LE, "ucs-2le" },
{CharCodePage::UTF16BE, "ucs-2be" },
{CharCodePage::UTF32LE, "ucs-4le" },
{CharCodePage::UTF32BE, "ucs-4be" }
};//const struct CharSet Characters };//const struct CharSet Characters
constexpr int CharPageCount=sizeof(CodeSet2CharPage)/sizeof(CodePageAndCharSet); constexpr int CharPageCount=sizeof(CodeSet2CharPage)/sizeof(CodePageAndCharSet);
@@ -115,7 +118,7 @@ namespace hgl
if(!charset_cmp(CodePage2CharSet[i].charset,char_set)) if(!charset_cmp(CodePage2CharSet[i].charset,char_set))
return CodePage2CharSet[i].codepage; return CodePage2CharSet[i].codepage;
return ccpNone; return CharCodePage::NONE;
} }
struct CharSet struct CharSet
@@ -127,14 +130,14 @@ namespace hgl
CharSet() CharSet()
{ {
codepage=ccpNone; codepage=CharCodePage::NONE;
hgl::strcpy(charset,CharSetNameLength,"us-ascii"); hgl::strcpy(charset,CHAR_SET_NAME_MAX_LENGTH,"us-ascii");
} }
CharSet(CharCodePage ccp,const char *cs) CharSet(CharCodePage ccp,const char *cs)
{ {
codepage=ccp; codepage=ccp;
hgl::strcpy(charset,CharSetNameLength,cs); hgl::strcpy(charset,CHAR_SET_NAME_MAX_LENGTH,cs);
} }
CharSet(CharCodePage); CharSet(CharCodePage);
@@ -143,23 +146,23 @@ namespace hgl
CharSet(const CodePageAndCharSet &cs) CharSet(const CodePageAndCharSet &cs)
{ {
codepage=cs.codepage; codepage=cs.codepage;
strcpy(charset,CharSetNameLength,cs.charset); strcpy(charset,CHAR_SET_NAME_MAX_LENGTH,cs.charset);
} }
int _Comp(const CharSet &data)const{return codepage-data.codepage;} \ int _Comp(const CharSet &data)const{return (size_t)codepage-(size_t)data.codepage;} \
CompOperator(const CharSet &,_Comp) CompOperator(const CharSet &,_Comp)
};//struct CharacterSet };//struct CharacterSet
inline CharSet::CharSet(CharCodePage ccp) inline CharSet::CharSet(CharCodePage ccp)
{ {
codepage=ccp; codepage=ccp;
hgl::strcpy(charset,CharSetNameLength,FindCharSet(ccp)); hgl::strcpy(charset,CHAR_SET_NAME_MAX_LENGTH,FindCharSet(ccp));
} }
inline CharSet::CharSet(const u8char *cs) inline CharSet::CharSet(const u8char *cs)
{ {
codepage=FindCodePage(cs); codepage=FindCodePage(cs);
hgl::strcpy(charset,CharSetNameLength,FindCharSet(codepage)); hgl::strcpy(charset,CHAR_SET_NAME_MAX_LENGTH,FindCharSet(codepage));
} }
extern CharSet DefaultCharSet(); extern CharSet DefaultCharSet();

View File

@@ -12,51 +12,51 @@ namespace hgl
* 全部Windows所支持代码页请参见 http://msdn.microsoft.com/en-us/library/dd317756 * 全部Windows所支持代码页请参见 http://msdn.microsoft.com/en-us/library/dd317756
* https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers * https://docs.microsoft.com/en-us/windows/win32/intl/code-page-identifiers
*/ */
enum CharCodePage ///代码页枚举 enum class CharCodePage ///代码页枚举
{ {
ccpNone=0, ///<起始定义,无意义 NONE=0, ///<起始定义,无意义
//中文 //中文
ccpGBK =936, ///<中国GBK标准中文 GBK =936, ///<中国GBK标准中文
ccpBig5 =950, ///<中国台湾Big5标准繁体中文 Big5 =950, ///<中国台湾Big5标准繁体中文
ccpGB2312 =20936, ///<中国GB2312标准简体中文 GB2312 =20936, ///<中国GB2312标准简体中文
ccpGB18030 =54936, ///<中国GB18030-2000标准中文 GB18030 =54936, ///<中国GB18030-2000标准中文
//日文 //日文
ccpShiftJIS =932, ///<日文ShiftJIS ShiftJIS =932, ///<日文ShiftJIS
ccpJISX =50222, ///<日文JIS X/ISO 2022 JISX =50222, ///<日文JIS X/ISO 2022
//韩文 //韩文
ccpKorean =949, ///<韩文 Korean =949, ///<韩文
//苹果编码 //苹果编码
ccpMacJanpan =10001, ///<日文 MacJanpan =10001, ///<日文
ccpMacTraditionalChinese =10002, ///<繁体中文 MacTraditionalChinese =10002, ///<繁体中文
ccpMacSimplifiedChinese =10008, ///<简体中文 MacSimplifiedChinese =10008, ///<简体中文
//ISO //ISO
ccp8859_1 =28591, ///<ISO 8859-1 Latin 1; Western European 西欧语系(阿尔巴尼亚语,西班牙加泰罗尼亚语,丹麦语,荷兰语,英语,Faeroese语,芬兰语,法语,德语,加里西亚语,爱尔兰语,冰岛语,意大利语,挪威语,葡萄牙语,瑞士语.)这同时适用于美国英语. ISO_8859_1 =28591, ///<ISO 8859-1 Latin 1; Western European 西欧语系(阿尔巴尼亚语,西班牙加泰罗尼亚语,丹麦语,荷兰语,英语,Faeroese语,芬兰语,法语,德语,加里西亚语,爱尔兰语,冰岛语,意大利语,挪威语,葡萄牙语,瑞士语.)这同时适用于美国英语.
ccp8859_2 =28592, ///<ISO 8859-2 Central European; Central European (ISO) 斯拉夫/中欧语系(捷克语,德语,匈牙利语,波兰语,罗马尼亚语,克罗地亚语,斯洛伐克语,斯洛文尼亚语) ISO_8859_2 =28592, ///<ISO 8859-2 Central European; Central European (ISO) 斯拉夫/中欧语系(捷克语,德语,匈牙利语,波兰语,罗马尼亚语,克罗地亚语,斯洛伐克语,斯洛文尼亚语)
ccp8859_3 =28593, ///<ISO 8859-3 Latin 3 世界语,加里西亚语,马耳他语,土耳其语 ISO_8859_3 =28593, ///<ISO 8859-3 Latin 3 世界语,加里西亚语,马耳他语,土耳其语
ccp8859_4 =28594, ///<ISO 8859-4 Baltic 爱莎尼亚语,拉脱维亚语,立陶宛语 ISO_8859_4 =28594, ///<ISO 8859-4 Baltic 爱莎尼亚语,拉脱维亚语,立陶宛语
ccp8859_5 =28595, ///<ISO 8859-5 Cyrillic 斯拉夫语系(保加利亚语,Byelorussian语,马其顿语,俄语,塞尔维亚语,乌克兰语) ISO_8859_5 =28595, ///<ISO 8859-5 Cyrillic 斯拉夫语系(保加利亚语,Byelorussian语,马其顿语,俄语,塞尔维亚语,乌克兰语)
ccp8859_6 =28596, ///<ISO 8859-6 Arabic 阿拉伯语 ISO_8859_6 =28596, ///<ISO 8859-6 Arabic 阿拉伯语
ccp8859_7 =28597, ///<ISO 8859-7 Greek 现代希腊语 ISO_8859_7 =28597, ///<ISO 8859-7 Greek 现代希腊语
ccp8859_8 =28598, ///<ISO 8859-8 Hebrew; Hebrew (ISO-Visual) 希伯来语 ISO_8859_8 =28598, ///<ISO 8859-8 Hebrew; Hebrew (ISO-Visual) 希伯来语
ccp8859_9 =28599, ///<ISO 8859-9 Turkish Latin 5 字符集, (去掉了 Latin 1中不经常使用的一些冰岛语字符而代以土耳其语字符) ISO_8859_9 =28599, ///<ISO 8859-9 Turkish Latin 5 字符集, (去掉了 Latin 1中不经常使用的一些冰岛语字符而代以土耳其语字符)
ccp8859_13 =28603, ///<ISO 8859-13 Estonian ISO_8859_13 =28603, ///<ISO 8859-13 Estonian
ccp8859_15 =28605, ///<ISO 8859-15 Latin 9 Latin 9 字符集, 是Latin 1字符集的更新版本,去掉一些不常用的字符,增加了对爱莎尼亚语的支持,修正了法语和芬兰语部份,增加了欧元字符) ISO_8859_15 =28605, ///<ISO 8859-15 Latin 9 Latin 9 字符集, 是Latin 1字符集的更新版本,去掉一些不常用的字符,增加了对爱莎尼亚语的支持,修正了法语和芬兰语部份,增加了欧元字符)
//unicode //unicode
ccpUTF7 =65000, ///<utf-7 UTF7 =65000, ///<utf-7
ccpUTF8 =65001, ///<utf-8 UTF8 =65001, ///<utf-8
ccpUTF16LE =1200, UTF16LE =1200,
ccpUTF16BE =1201, UTF16BE =1201,
ccpUTF32LE =12000, UTF32LE =12000,
ccpUTF32BE =12001, UTF32BE =12001,
ccpEnd ///<结束定义,无意义 END ///<结束定义,无意义
};//enum CharCodePage };//enum CharCodePage
/** /**
@@ -74,8 +74,8 @@ namespace hgl
ENUM_CLASS_RANGE(UTF8,UTF32BE) ENUM_CLASS_RANGE(UTF8,UTF32BE)
}; };
constexpr uint CharSetNameLength=32; ///<字符集名称长度 constexpr uint CHAR_SET_NAME_MAX_LENGTH=32; ///<字符集名称长度
using CharSetName=char[CharSetNameLength]; ///<字符集名称类型定义 using CharSetName=char[CHAR_SET_NAME_MAX_LENGTH]; ///<字符集名称类型定义
template<int,char> const CharSetName &GetCurCharSet(); ///<取得当前程序编码字符集 template<int,char> const CharSetName &GetCurCharSet(); ///<取得当前程序编码字符集
@@ -113,11 +113,11 @@ namespace hgl
*/ */
constexpr BOMFileHeader BOMData[size_t(ByteOrderMask::RANGE_SIZE)]= constexpr BOMFileHeader BOMData[size_t(ByteOrderMask::RANGE_SIZE)]=
{ {
{3,{0xEF,0xBB,0xBF} ,ByteOrderMask::UTF8, &utf8_charset ,ccpUTF8 }, {3,{0xEF,0xBB,0xBF} ,ByteOrderMask::UTF8, &utf8_charset ,CharCodePage::UTF8 },
{2,{0xFF,0xFE} ,ByteOrderMask::UTF16LE,&utf16le_charset ,ccpUTF16LE }, {2,{0xFF,0xFE} ,ByteOrderMask::UTF16LE,&utf16le_charset ,CharCodePage::UTF16LE },
{2,{0xFE,0xFF} ,ByteOrderMask::UTF16BE,&utf16be_charset ,ccpUTF16BE }, {2,{0xFE,0xFF} ,ByteOrderMask::UTF16BE,&utf16be_charset ,CharCodePage::UTF16BE },
{4,{0xFF,0xFE,0x00,0x00},ByteOrderMask::UTF32LE,&utf32le_charset ,ccpUTF32LE }, {4,{0xFF,0xFE,0x00,0x00},ByteOrderMask::UTF32LE,&utf32le_charset ,CharCodePage::UTF32LE },
{4,{0x00,0x00,0xFE,0xFF},ByteOrderMask::UTF32BE,&utf32be_charset ,ccpUTF32BE } {4,{0x00,0x00,0xFE,0xFF},ByteOrderMask::UTF32BE,&utf32be_charset ,CharCodePage::UTF32BE }
}; };
inline ByteOrderMask CheckBOM(const void *data) inline ByteOrderMask CheckBOM(const void *data)

View File

@@ -101,7 +101,7 @@ namespace hgl
public: public:
Collection(const size_t ub=1,MemoryBlock *mb=new MemoryBlock); Collection(const uint32 ub=1,MemoryBlock *mb=new MemoryBlock);
virtual ~Collection(); virtual ~Collection();
virtual bool Alloc(const uint64 count); ///<预分配空间 virtual bool Alloc(const uint64 count); ///<预分配空间

View File

@@ -4,9 +4,9 @@ namespace hgl
{ {
CharSet DefaultCharSet(); CharSet DefaultCharSet();
CharSet UTF8CharSet (ccpUTF8, utf8_charset ); CharSet UTF8CharSet (CharCodePage::UTF8, utf8_charset );
CharSet UTF16LECharSet (ccpUTF16LE,utf16le_charset ); CharSet UTF16LECharSet (CharCodePage::UTF16LE,utf16le_charset );
CharSet UTF16BECharSet (ccpUTF16BE,utf16be_charset ); CharSet UTF16BECharSet (CharCodePage::UTF16BE,utf16be_charset );
int u16_to_u8(u8char *dst,int dst_size,const u16char *src,const int src_size) int u16_to_u8(u8char *dst,int dst_size,const u16char *src,const int src_size)
{ {

View File

@@ -2,7 +2,7 @@
namespace hgl namespace hgl
{ {
Collection::Collection(const size_t ub,MemoryBlock *mb) Collection::Collection(const uint32 ub,MemoryBlock *mb)
{ {
unit_bytes=ub; unit_bytes=ub;
memory_block=mb; memory_block=mb;