我正在处理泰语键盘输入。有些键是元音符号,只有在与某些前面的字符组合时才允许使用。
这0x0E33
是元音符号
例如0x0E1C + 0x0E33
有效
但0x0E44 + 0x0E33
无效并且0x0E33
应该被忽略。
我正在寻找一种方法来知道何时应该忽略元音符号,或者它何时不与前一个字符组合。
请问有什么想法吗?
许多泰语元音(和声调,顺便说一句)属于非间距组合标记类别。你的目标是使用一些库来告诉每个角色属于哪个类别。然后,您可以决定是否“忽略”它,无论“忽略”在您的应用程序上下文中意味着什么。
您的两个兴趣点是:
进一步阅读:
我知道他的帖子是几年前的,但这是我使用 icu lib 想出的,我怀疑它可以改进......
UChar32 newChar;
UChar32 previousChar;
int32_t gcb = u_getIntPropertyValue(newChar, UCHAR_GRAPHEME_CLUSTER_BREAK);
if (gcb != U_GCB_OTHER)
{
int32_t insc = u_getIntPropertyValue(newChar, UCHAR_INDIC_SYLLABIC_CATEGORY);
if (insc == U_INSC_VOWEL_DEPENDENT || insc == U_INSC_TONE_MARK)
{
if (u_getIntPropertyValue(prevChar, UCHAR_INDIC_SYLLABIC_CATEGORY) != U_INSC_CONSONANT)
{
// invalid combination, ignore
}
}
}