usp10: Use font chartype only as a fallback if we do not know the characters script already.
This commit is contained in:
parent
264d2737c5
commit
a27e03bf5d
@ -347,13 +347,29 @@ static UINT GSUB_apply_feature(const GSUB_Header * header, const GSUB_Feature* f
|
|||||||
return glyph;
|
return glyph;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* get_opentype_script(HDC hdc)
|
static const char* get_opentype_script(HDC hdc, SCRIPT_ANALYSIS *psa)
|
||||||
{
|
{
|
||||||
/*
|
UINT charset;
|
||||||
* I am not sure if this is the correct way to generate our script tag
|
|
||||||
*/
|
|
||||||
UINT charset = GetTextCharsetInfo(hdc, NULL, 0x0);
|
|
||||||
|
|
||||||
|
switch (psa->eScript)
|
||||||
|
{
|
||||||
|
case Script_Arabic:
|
||||||
|
return "arab";
|
||||||
|
case Script_Syriac:
|
||||||
|
return "syrc";
|
||||||
|
case Script_Hebrew:
|
||||||
|
return "hebr";
|
||||||
|
case Script_Latin:
|
||||||
|
case Script_Numeric:
|
||||||
|
case Script_CR:
|
||||||
|
case Script_LF:
|
||||||
|
return "latn";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fall back to the font charset
|
||||||
|
*/
|
||||||
|
charset = GetTextCharsetInfo(hdc, NULL, 0x0);
|
||||||
switch (charset)
|
switch (charset)
|
||||||
{
|
{
|
||||||
case ANSI_CHARSET: return "latn";
|
case ANSI_CHARSET: return "latn";
|
||||||
@ -375,7 +391,7 @@ static const char* get_opentype_script(HDC hdc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static WORD get_GSUB_feature_glyph(HDC hdc, void* GSUB_Table, UINT glyph, const char* feat)
|
static WORD get_GSUB_feature_glyph(HDC hdc, SCRIPT_ANALYSIS *psa, void* GSUB_Table, UINT glyph, const char* feat)
|
||||||
{
|
{
|
||||||
const GSUB_Header *header;
|
const GSUB_Header *header;
|
||||||
const GSUB_Script *script;
|
const GSUB_Script *script;
|
||||||
@ -387,7 +403,7 @@ static WORD get_GSUB_feature_glyph(HDC hdc, void* GSUB_Table, UINT glyph, const
|
|||||||
|
|
||||||
header = GSUB_Table;
|
header = GSUB_Table;
|
||||||
|
|
||||||
script = GSUB_get_script_table(header, get_opentype_script(hdc));
|
script = GSUB_get_script_table(header, get_opentype_script(hdc,psa));
|
||||||
if (!script)
|
if (!script)
|
||||||
{
|
{
|
||||||
TRACE("Script not found\n");
|
TRACE("Script not found\n");
|
||||||
@ -509,7 +525,7 @@ void SHAPE_ShapeArabicGlyphs(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WC
|
|||||||
WORD newGlyph = pwOutGlyphs[i];
|
WORD newGlyph = pwOutGlyphs[i];
|
||||||
|
|
||||||
if (psc->GSUB_Table)
|
if (psc->GSUB_Table)
|
||||||
newGlyph = get_GSUB_feature_glyph(hdc, psc->GSUB_Table, pwOutGlyphs[i], contextual_features[context_shape[i]]);
|
newGlyph = get_GSUB_feature_glyph(hdc, psa, psc->GSUB_Table, pwOutGlyphs[i], contextual_features[context_shape[i]]);
|
||||||
if (newGlyph == pwOutGlyphs[i] && pwcChars[i] >= FIRST_ARABIC_CHAR && pwcChars[i] <= LAST_ARABIC_CHAR)
|
if (newGlyph == pwOutGlyphs[i] && pwcChars[i] >= FIRST_ARABIC_CHAR && pwcChars[i] <= LAST_ARABIC_CHAR)
|
||||||
{
|
{
|
||||||
/* fall back to presentation form B */
|
/* fall back to presentation form B */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user