diff options
Diffstat (limited to 'src/common/Utilities/Util.h')
-rw-r--r-- | src/common/Utilities/Util.h | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h index 3fc09f65792..be4a68d7788 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -157,23 +157,28 @@ inline bool isCyrillicCharacter(wchar_t wchar) return false; } -inline bool isEastAsianCharacter(wchar_t wchar) +inline bool isKoreanCharacter(wchar_t wchar) { if (wchar >= 0x1100 && wchar <= 0x11F9) // Hangul Jamo return true; - if (wchar >= 0x3041 && wchar <= 0x30FF) // Hiragana + Katakana - return true; if (wchar >= 0x3131 && wchar <= 0x318E) // Hangul Compatibility Jamo return true; - if (wchar >= 0x31F0 && wchar <= 0x31FF) // Katakana Phonetic Ext. + if (wchar >= 0xAC00 && wchar <= 0xD7A3) // Hangul Syllables return true; - if (wchar >= 0x3400 && wchar <= 0x4DB5) // CJK Ideographs Ext. A + if (wchar >= 0xFF01 && wchar <= 0xFFEE) // Halfwidth forms return true; - if (wchar >= 0x4E00 && wchar <= 0x9FC3) // Unified CJK Ideographs + return false; +} + +inline bool isChineseCharacter(wchar_t wchar) +{ + if (wchar >= 0x4E00 && wchar <= 0x9FFF) // Unified CJK Ideographs return true; - if (wchar >= 0xAC00 && wchar <= 0xD7A3) // Hangul Syllables + if (wchar >= 0x3400 && wchar <= 0x4DBF) // CJK Ideographs Ext. A return true; - if (wchar >= 0xFF01 && wchar <= 0xFFEE) // Halfwidth forms + if (wchar >= 0x3100 && wchar <= 0x312C) // Bopomofo + return true; + if (wchar >= 0xF900 && wchar <= 0xFAFF) // CJK Compatibility Ideographs return true; return false; } @@ -226,10 +231,18 @@ inline bool isCyrillicString(std::wstring_view wstr, bool numericOrSpace) return true; } -inline bool isEastAsianString(std::wstring_view wstr, bool numericOrSpace) +inline bool isKoreanString(std::wstring_view wstr, bool numericOrSpace) +{ + for (wchar_t c : wstr) + if (!isKoreanCharacter(c) && (!numericOrSpace || !isNumericOrSpace(c))) + return false; + return true; +} + +inline bool isChineseString(std::wstring_view wstr, bool numericOrSpace) { for (wchar_t c : wstr) - if (!isEastAsianCharacter(c) && (!numericOrSpace || !isNumericOrSpace(c))) + if (!isChineseCharacter(c) && (!numericOrSpace || !isNumericOrSpace(c))) return false; return true; } |