ICU结合泰语元音标志和何时忽略

时间:2017-02-11 20:36:36

标签: c++ unicode icu thai

我正在处理泰语键盘输入。有些键是元音符号,只有在与某些前面的字符组合时才允许使用。

此处0x0E33是元音符号

例如0x0E1C + 0x0E33有效 但0x0E44 + 0x0E33无效,应忽略0x0E33

我希望找到一种方法来了解何时应该忽略元音符号,或者何时不与前一个字符组合。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

顺便提一下,许多泰语元音(和音标)属于非间距合并标记类别。您的目标是使用一些可以告诉每个角色属于哪个类别的库。然后你可以决定是否"忽略"它,无论"忽略"意味着在您的应用程序环境中。

检查Unicode General Category Values

您的两个兴趣点是:

  • Lo | Other_Letter 表示正常人物;
  • Mn | Nonspacing_Mark 用于零宽度非间距标记;

进一步阅读:

答案 1 :(得分:0)

我知道他的帖子是几年前的,但这是我想出的使用 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
        }
    }
}