guniprop: Set jungseong and jongseong points to zero-width for Old Korean

This mirrors what `wcwidth()` from glibc does as of June 2020 (commit
6e540caa2).

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>

Fixes: #2564
This commit is contained in:
Philip Withnall 2022-01-06 13:11:24 +00:00
parent 2c958470d2
commit 84202a2ef0
2 changed files with 13 additions and 1 deletions

View File

@ -421,8 +421,15 @@ g_unichar_iszerowidth (gunichar c)
if (G_UNLIKELY (ISZEROWIDTHTYPE (TYPE (c))))
return TRUE;
/* A few additional codepoints are zero-width:
* - Part of the Hangul Jamo block covering medial/vowels/jungseong and
* final/trailing_consonants/jongseong Jamo
* - Jungseong and jongseong for Old Korean
* - Zero-width space (U+200B)
*/
if (G_UNLIKELY ((c >= 0x1160 && c < 0x1200) ||
c == 0x200B))
(c >= 0xD7B0 && c < 0xD800) ||
c == 0x200B))
return TRUE;
return FALSE;

View File

@ -909,6 +909,11 @@ test_zerowidth (void)
g_assert_false (g_unichar_iszerowidth (G_UNICODE_LAST_CHAR + 1));
g_assert_false (g_unichar_iszerowidth (G_UNICODE_LAST_CHAR_PART1));
g_assert_false (g_unichar_iszerowidth (G_UNICODE_LAST_CHAR_PART1 + 1));
/* Hangul Jamo Extended-B block, containing jungseong and jongseong for
* Old Korean */
g_assert_true (g_unichar_iszerowidth (0xD7B0));
g_assert_true (g_unichar_iszerowidth (0xD7FB));
}
/* Test that g_unichar_istitle() returns the correct value for various