DragonNest/Common/Protocol/DNCountryUnicodeSet.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

89 lines
6.5 KiB
C++
Raw Permalink Blame History

#include "stdafx.h"
#include "DNCountryUnicodeSet.h"
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
CDNCountryUnicodeSet g_CountryUnicodeSet;
CDNCountryUnicodeSet::CDNCountryUnicodeSet()
{
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_ALL, MIN_MAX(UNICODE_TYPE_ALL_START, UNICODE_TYPE_ALL_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_NUMBER, MIN_MAX(UNICODE_TYPE_NUM_START, UNICODE_TYPE_NUM_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_ENG, MIN_MAX(UNICODE_TYPE_ENG_BIG_START, UNICODE_TYPE_ENG_BIG_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_ENG, MIN_MAX(UNICODE_TYPE_ENG_SMALL_START, UNICODE_TYPE_ENG_SMALL_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_HAN, MIN_MAX(UNICODE_TYPE_HAN_SYLLABLES_START, UNICODE_TYPE_HAN_SYLLABLES_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_SPECIAL, MIN_MAX(UNICODE_TYPE_SPECIAL_START, UNICODE_TYPE_SPECIAL_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_JPN, MIN_MAX(UNICODE_TYPE_JPN_HIRAGANA_START, UNICODE_TYPE_JPN_HIRAGANA_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_JPN, MIN_MAX(UNICODE_TYPE_JPN_KATAKANA_START, UNICODE_TYPE_JPN_KATAKANA_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_CJK_UNIFIED, MIN_MAX(UNICODE_TYPE_CJK_UNIFIED_START, UNICODE_TYPE_CJK_UNIFIED_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_CJK_COMP, MIN_MAX(UNICODE_TYPE_CJK_COMP_START, UNICODE_TYPE_CJK_COMP_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_SG_SPECIAL, MIN_MAX(UNICODE_TYPE_SG_SPECIAL_A_START, UNICODE_TYPE_SG_SPECIAL_A_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_SG_SPECIAL, MIN_MAX(UNICODE_TYPE_SG_SPECIAL_B_START, UNICODE_TYPE_SG_SPECIAL_B_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_SG_SPECIAL, MIN_MAX(UNICODE_TYPE_SG_SPECIAL_C_START, UNICODE_TYPE_SG_SPECIAL_C_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_SG_PASS_SPECIAL, MIN_MAX(UNICODE_TYPE_SG_SPECIAL_PASS_START, UNICODE_TYPE_SG_SPECIAL_PASS_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH, MIN_MAX(UNICODE_TYPE_TH_START,UNICODE_TYPE_TH_THAI_END )));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH_SPECIAL, MIN_MAX(UNICODE_TYPE_TH_SPECIAL_A_START, UNICODE_TYPE_TH_SPECIAL_A_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH_SPECIAL, MIN_MAX(UNICODE_TYPE_TH_SPECIAL_B_START, UNICODE_TYPE_TH_SPECIAL_B_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH_SPECIAL, MIN_MAX(UNICODE_TYPE_TH_SPECIAL_C_START, UNICODE_TYPE_TH_SPECIAL_C_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH_SPECIAL, MIN_MAX(UNICODE_TYPE_TH_SPECIAL_D_START, UNICODE_TYPE_TH_SPECIAL_D_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH_SPECIAL, MIN_MAX(UNICODE_TYPE_TH_SPECIAL_E_START, UNICODE_TYPE_TH_SPECIAL_E_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH_SPECIAL, MIN_MAX(UNICODE_TYPE_TH_SPECIAL_F_START, UNICODE_TYPE_TH_SPECIAL_F_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH_SPECIAL, MIN_MAX(UNICODE_TYPE_TH_SPECIAL_G_START, UNICODE_TYPE_TH_SPECIAL_G_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_TH_SPECIAL, MIN_MAX(UNICODE_TYPE_TH_SPECIAL_H_START, UNICODE_TYPE_TH_SPECIAL_H_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_RU, MIN_MAX(UNICODE_TYPE_RU_CYRILLIC_START, UNICODE_TYPE_RU_CYRILLIC_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_RU, MIN_MAX(UNICODE_TYPE_SG_SPECIAL_C_START, UNICODE_TYPE_SG_SPECIAL_C_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_EU, MIN_MAX(UNICODE_TYPE_EU_SPECIAL_A_START, UNICODE_TYPE_EU_SPECIAL_A_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_EU, MIN_MAX(UNICODE_TYPE_EU_SPECIAL_B_START, UNICODE_TYPE_EU_SPECIAL_B_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_EU, MIN_MAX(UNICODE_TYPE_EU_SPECIAL_C_START, UNICODE_TYPE_EU_SPECIAL_C_END)));
m_mapAllowString.insert(HASH_MAP_ALLOW_STRING::value_type(CHECK_TYPE_EU, MIN_MAX(UNICODE_TYPE_EU_SPECIAL_D_START, UNICODE_TYPE_EU_SPECIAL_D_END)));
}
CDNCountryUnicodeSet::~CDNCountryUnicodeSet()
{
m_mapAllowString.clear();
}
bool CDNCountryUnicodeSet::Check(const wchar_t* pChr, DWORD dwCheckType)
{
if (pChr)
{
wchar_t szChar;
int nLength = (int) wcslen(pChr);
for (int i=0; i < nLength; i++)
{
szChar = pChr[i];
if (dwCheckType & CHECK_TYPE_ALL && IsExist(szChar, CHECK_TYPE_ALL)) continue;
if (dwCheckType & CHECK_TYPE_NUMBER && IsExist(szChar, CHECK_TYPE_NUMBER)) continue;
if (dwCheckType & CHECK_TYPE_ENG && IsExist(szChar, CHECK_TYPE_ENG)) continue;
if (dwCheckType & CHECK_TYPE_HAN && IsExist(szChar, CHECK_TYPE_HAN)) continue;
if (dwCheckType & CHECK_TYPE_SPECIAL && IsExist(szChar, CHECK_TYPE_SPECIAL)) continue;
if (dwCheckType & CHECK_TYPE_JPN && IsExist(szChar, CHECK_TYPE_JPN)) continue;
if (dwCheckType & CHECK_TYPE_CJK_UNIFIED && IsExist(szChar, CHECK_TYPE_CJK_UNIFIED)) continue;
if (dwCheckType & CHECK_TYPE_CJK_COMP && IsExist(szChar, CHECK_TYPE_CJK_COMP)) continue;
if (dwCheckType & CHECK_TYPE_SG_SPECIAL && IsExist(szChar, CHECK_TYPE_SG_SPECIAL)) continue;
if (dwCheckType & CHECK_TYPE_SG_PASS_SPECIAL && IsExist(szChar, CHECK_TYPE_SG_PASS_SPECIAL)) continue;
if (dwCheckType & CHECK_TYPE_TH && IsExist(szChar, CHECK_TYPE_TH)) continue;
if (dwCheckType & CHECK_TYPE_TH_SPECIAL && IsExist(szChar, CHECK_TYPE_TH_SPECIAL)) continue;
if (dwCheckType & CHECK_TYPE_RU && IsExist(szChar, CHECK_TYPE_RU)) continue;
if (dwCheckType & CHECK_TYPE_EU && IsExist(szChar, CHECK_TYPE_EU)) continue;
return false;
}
}
return true;
}
bool CDNCountryUnicodeSet::IsExist(wchar_t pChr, STRING_CHECK_TYPE eType)
{
//TODO(Cussrro): û<><C3BB>ƥ<EFBFBD><C6A5><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD>ӿ<EFBFBD>
//HASH_MAP_ALLOW_STRING_I iter = m_mapAllowString.lower_bound(eType);
//for ( ; iter != m_mapAllowString.upper_bound(eType); iter++)
//{
// if (IS_IN_RANGE(iter->second.nMin, iter->second.nMax, pChr))
// return true;
//}
return true;
}