[Uniscribe] Fix script fallback
Gurmukhi failures half now. Others changed slightly.
This commit is contained in:
parent
5791f32915
commit
e9c0f152a3
@ -331,10 +331,6 @@ retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
OPENTYPE_TAG language_tag = hb_uint32_swap (hb_ot_tag_from_language (buffer->props.language));
|
OPENTYPE_TAG language_tag = hb_uint32_swap (hb_ot_tag_from_language (buffer->props.language));
|
||||||
hb_tag_t buffer_script_tags[2];
|
|
||||||
hb_ot_tags_from_script (buffer->props.script,
|
|
||||||
&buffer_script_tags[0],
|
|
||||||
&buffer_script_tags[1]);
|
|
||||||
|
|
||||||
unsigned int glyphs_offset = 0;
|
unsigned int glyphs_offset = 0;
|
||||||
unsigned int glyphs_len;
|
unsigned int glyphs_len;
|
||||||
@ -345,20 +341,11 @@ retry:
|
|||||||
unsigned int chars_offset = items[i].iCharPos;
|
unsigned int chars_offset = items[i].iCharPos;
|
||||||
unsigned int item_chars_len = items[i + 1].iCharPos - chars_offset;
|
unsigned int item_chars_len = items[i + 1].iCharPos - chars_offset;
|
||||||
|
|
||||||
OPENTYPE_TAG script_tag;
|
retry_shape:
|
||||||
/* We ignore what script tag Uniscribe chose, except to differentiate
|
|
||||||
* between old/new tags. Not sure if this picks DFLT up correctly...
|
|
||||||
* This also screws things up as the item.analysis also has an opaque
|
|
||||||
* script member. */
|
|
||||||
if (script_tags[i] == hb_uint32_swap (buffer_script_tags[1]))
|
|
||||||
script_tag = hb_uint32_swap (buffer_script_tags[1]);
|
|
||||||
else
|
|
||||||
script_tag = hb_uint32_swap (buffer_script_tags[0]);
|
|
||||||
|
|
||||||
hr = ScriptShapeOpenType (font_data->hdc,
|
hr = ScriptShapeOpenType (font_data->hdc,
|
||||||
&font_data->script_cache,
|
&font_data->script_cache,
|
||||||
&items[i].a,
|
&items[i].a,
|
||||||
script_tag,
|
script_tags[i],
|
||||||
language_tag,
|
language_tag,
|
||||||
range_char_counts,
|
range_char_counts,
|
||||||
range_properties,
|
range_properties,
|
||||||
@ -373,9 +360,6 @@ retry:
|
|||||||
glyph_props + glyphs_offset,
|
glyph_props + glyphs_offset,
|
||||||
(int *) &glyphs_len);
|
(int *) &glyphs_len);
|
||||||
|
|
||||||
for (unsigned int j = chars_offset; j < chars_offset + item_chars_len; j++)
|
|
||||||
log_clusters[j] += glyphs_offset;
|
|
||||||
|
|
||||||
if (unlikely (items[i].a.fNoGlyphIndex))
|
if (unlikely (items[i].a.fNoGlyphIndex))
|
||||||
FAIL ("ScriptShapeOpenType() set fNoGlyphIndex");
|
FAIL ("ScriptShapeOpenType() set fNoGlyphIndex");
|
||||||
if (unlikely (hr == E_OUTOFMEMORY))
|
if (unlikely (hr == E_OUTOFMEMORY))
|
||||||
@ -386,14 +370,24 @@ retry:
|
|||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
if (unlikely (hr == USP_E_SCRIPT_NOT_IN_FONT))
|
if (unlikely (hr == USP_E_SCRIPT_NOT_IN_FONT))
|
||||||
|
{
|
||||||
|
if (items[i].a.eScript == SCRIPT_UNDEFINED)
|
||||||
FAIL ("ScriptShapeOpenType() failed: Font doesn't support script");
|
FAIL ("ScriptShapeOpenType() failed: Font doesn't support script");
|
||||||
|
items[i].a.eScript = SCRIPT_UNDEFINED;
|
||||||
|
goto retry_shape;
|
||||||
|
}
|
||||||
if (unlikely (FAILED (hr)))
|
if (unlikely (FAILED (hr)))
|
||||||
|
{
|
||||||
FAIL ("ScriptShapeOpenType() failed: 0x%08xL", hr);
|
FAIL ("ScriptShapeOpenType() failed: 0x%08xL", hr);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned int j = chars_offset; j < chars_offset + item_chars_len; j++)
|
||||||
|
log_clusters[j] += glyphs_offset;
|
||||||
|
|
||||||
hr = ScriptPlaceOpenType (font_data->hdc,
|
hr = ScriptPlaceOpenType (font_data->hdc,
|
||||||
&font_data->script_cache,
|
&font_data->script_cache,
|
||||||
&items[i].a,
|
&items[i].a,
|
||||||
script_tag,
|
script_tags[i],
|
||||||
language_tag,
|
language_tag,
|
||||||
range_char_counts,
|
range_char_counts,
|
||||||
range_properties,
|
range_properties,
|
||||||
|
Loading…
Reference in New Issue
Block a user