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

View File

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

View File

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