mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 13:25:37 +00:00
bug 728866 - pt 3 - add support for Hebrew presentation forms, excluded from canonical composition. r=smontagu
This commit is contained in:
parent
45c8227a48
commit
43acd9229b
@ -700,6 +700,38 @@ HBGetEastAsianWidth(hb_unicode_funcs_t *ufuncs, hb_codepoint_t aCh, void *user_d
|
||||
return gfxUnicodeProperties::GetEastAsianWidth(aCh);
|
||||
}
|
||||
|
||||
// Hebrew presentation forms with dagesh, for characters 0x05D0..0x05EA;
|
||||
// note that some letters do not have a dagesh presForm encoded
|
||||
static const PRUnichar sDageshForms[0x05EA - 0x05D0 + 1] = {
|
||||
0xFB30, // ALEF
|
||||
0xFB31, // BET
|
||||
0xFB32, // GIMEL
|
||||
0xFB33, // DALET
|
||||
0xFB34, // HE
|
||||
0xFB35, // VAV
|
||||
0xFB36, // ZAYIN
|
||||
0, // HET
|
||||
0xFB38, // TET
|
||||
0xFB39, // YOD
|
||||
0xFB3A, // FINAL KAF
|
||||
0xFB3B, // KAF
|
||||
0xFB3C, // LAMED
|
||||
0, // FINAL MEM
|
||||
0xFB3E, // MEM
|
||||
0, // FINAL NUN
|
||||
0xFB40, // NUN
|
||||
0xFB41, // SAMEKH
|
||||
0, // AYIN
|
||||
0xFB43, // FINAL PE
|
||||
0xFB44, // PE
|
||||
0, // FINAL TSADI
|
||||
0xFB46, // TSADI
|
||||
0xFB47, // QOF
|
||||
0xFB48, // RESH
|
||||
0xFB49, // SHIN
|
||||
0xFB4A // TAV
|
||||
};
|
||||
|
||||
static hb_bool_t
|
||||
HBUnicodeCompose(hb_unicode_funcs_t *ufuncs,
|
||||
hb_codepoint_t a,
|
||||
@ -707,7 +739,89 @@ HBUnicodeCompose(hb_unicode_funcs_t *ufuncs,
|
||||
hb_codepoint_t *ab,
|
||||
void *user_data)
|
||||
{
|
||||
return nsUnicodeNormalizer::Compose(a, b, ab);
|
||||
hb_bool_t found = nsUnicodeNormalizer::Compose(a, b, ab);
|
||||
|
||||
if (!found && (b & 0x1fff80) == 0x0580) {
|
||||
// special-case Hebrew presentation forms that are excluded from
|
||||
// standard normalization, but wanted for old fonts
|
||||
switch (b) {
|
||||
case 0x05B4: // HIRIQ
|
||||
if (a == 0x05D9) { // YOD
|
||||
*ab = 0xFB1D;
|
||||
found = true;
|
||||
}
|
||||
break;
|
||||
case 0x05B7: // patah
|
||||
if (a == 0x05F2) { // YIDDISH YOD YOD
|
||||
*ab = 0xFB1F;
|
||||
found = true;
|
||||
} else if (a == 0x05D0) { // ALEF
|
||||
*ab = 0xFB2E;
|
||||
found = true;
|
||||
}
|
||||
break;
|
||||
case 0x05B8: // QAMATS
|
||||
if (a == 0x05D0) { // ALEF
|
||||
*ab = 0xFB2F;
|
||||
found = true;
|
||||
}
|
||||
break;
|
||||
case 0x05B9: // HOLAM
|
||||
if (a == 0x05D5) { // VAV
|
||||
*ab = 0xFB4B;
|
||||
found = true;
|
||||
}
|
||||
break;
|
||||
case 0x05BC: // DAGESH
|
||||
if (a >= 0x05D0 && a <= 0x05EA) {
|
||||
*ab = sDageshForms[a - 0x05D0];
|
||||
found = (*ab != 0);
|
||||
} else if (a == 0xFB2A) { // SHIN WITH SHIN DOT
|
||||
*ab = 0xFB2C;
|
||||
found = true;
|
||||
} else if (a == 0xFB2B) { // SHIN WITH SIN DOT
|
||||
*ab = 0xFB2D;
|
||||
found = true;
|
||||
}
|
||||
break;
|
||||
case 0x05BF: // RAFE
|
||||
switch (a) {
|
||||
case 0x05D1: // BET
|
||||
*ab = 0xFB4C;
|
||||
found = true;
|
||||
break;
|
||||
case 0x05DB: // KAF
|
||||
*ab = 0xFB4D;
|
||||
found = true;
|
||||
break;
|
||||
case 0x05E4: // PE
|
||||
*ab = 0xFB4E;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x05C1: // SHIN DOT
|
||||
if (a == 0x05E9) { // SHIN
|
||||
*ab = 0xFB2A;
|
||||
found = true;
|
||||
} else if (a == 0xFB49) { // SHIN WITH DAGESH
|
||||
*ab = 0xFB2C;
|
||||
found = true;
|
||||
}
|
||||
break;
|
||||
case 0x05C2: // SIN DOT
|
||||
if (a == 0x05E9) { // SHIN
|
||||
*ab = 0xFB2B;
|
||||
found = true;
|
||||
} else if (a == 0xFB49) { // SHIN WITH DAGESH
|
||||
*ab = 0xFB2D;
|
||||
found = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
static hb_bool_t
|
||||
|
Loading…
Reference in New Issue
Block a user