Cygwin: is_unicode_equiv: fix normalization
Change normalization to form KD and make room for longer decomposed sequences.
This commit is contained in:
parent
e4cc9e4846
commit
f0417a6201
|
@ -1200,14 +1200,14 @@ __collate_range_cmp (int c1, int c2)
|
||||||
Note that we only recognize input in Unicode normalization form C, that
|
Note that we only recognize input in Unicode normalization form C, that
|
||||||
is, we expect all letters to be composed. A single character is all we
|
is, we expect all letters to be composed. A single character is all we
|
||||||
look at.
|
look at.
|
||||||
To check equivalence, decompose pattern letter and input letter and check
|
To check equivalence, decompose pattern letter and input letter into
|
||||||
the base character for equality. Also, convert all digits to the ASCII
|
normalization form KD and check the base character for equality. Also,
|
||||||
digits 0 - 9 and compare. */
|
convert all digits to the ASCII digits 0 - 9 and compare. */
|
||||||
extern "C" int
|
extern "C" int
|
||||||
is_unicode_equiv (wint_t test, wint_t eqv)
|
is_unicode_equiv (wint_t test, wint_t eqv)
|
||||||
{
|
{
|
||||||
wchar_t decomp_testc[5] = { 0 };
|
wchar_t decomp_testc[24] = { 0 };
|
||||||
wchar_t decomp_eqvc[5] = { 0 };
|
wchar_t decomp_eqvc[24] = { 0 };
|
||||||
wchar_t testc[3] = { 0 };
|
wchar_t testc[3] = { 0 };
|
||||||
wchar_t eqvc[3] = { 0 };
|
wchar_t eqvc[3] = { 0 };
|
||||||
|
|
||||||
|
@ -1229,8 +1229,10 @@ is_unicode_equiv (wint_t test, wint_t eqv)
|
||||||
} else
|
} else
|
||||||
testc[0] = test;
|
testc[0] = test;
|
||||||
/* Convert to denormalized form */
|
/* Convert to denormalized form */
|
||||||
FoldStringW (MAP_COMPOSITE | MAP_FOLDDIGITS, eqvc, -1, decomp_eqvc, 5);
|
FoldStringW (MAP_COMPOSITE | MAP_FOLDCZONE | MAP_FOLDDIGITS,
|
||||||
FoldStringW (MAP_COMPOSITE | MAP_FOLDDIGITS, testc, -1, decomp_testc, 5);
|
eqvc, -1, decomp_eqvc, 24);
|
||||||
|
FoldStringW (MAP_COMPOSITE | MAP_FOLDCZONE | MAP_FOLDDIGITS,
|
||||||
|
testc, -1, decomp_testc, 24);
|
||||||
/* If they are equivalent, the base char must be the same. */
|
/* If they are equivalent, the base char must be the same. */
|
||||||
if (decomp_eqvc[0] != decomp_testc[0])
|
if (decomp_eqvc[0] != decomp_testc[0])
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue