[Uniscribe] Fix script fallback
Gurmukhi failures half now. Others changed slightly.
diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc
index e5b98a8..d41542b 100644
--- a/src/hb-uniscribe.cc
+++ b/src/hb-uniscribe.cc
@@ -331,10 +331,6 @@
}
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_len;
@@ -345,20 +341,11 @@
unsigned int chars_offset = items[i].iCharPos;
unsigned int item_chars_len = items[i + 1].iCharPos - chars_offset;
- OPENTYPE_TAG script_tag;
- /* 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]);
-
+ retry_shape:
hr = ScriptShapeOpenType (font_data->hdc,
&font_data->script_cache,
&items[i].a,
- script_tag,
+ script_tags[i],
language_tag,
range_char_counts,
range_properties,
@@ -373,9 +360,6 @@
glyph_props + glyphs_offset,
(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))
FAIL ("ScriptShapeOpenType() set fNoGlyphIndex");
if (unlikely (hr == E_OUTOFMEMORY))
@@ -386,14 +370,24 @@
goto retry;
}
if (unlikely (hr == USP_E_SCRIPT_NOT_IN_FONT))
- FAIL ("ScriptShapeOpenType() failed: Font doesn't support script");
+ {
+ if (items[i].a.eScript == SCRIPT_UNDEFINED)
+ FAIL ("ScriptShapeOpenType() failed: Font doesn't support script");
+ items[i].a.eScript = SCRIPT_UNDEFINED;
+ goto retry_shape;
+ }
if (unlikely (FAILED (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,
&font_data->script_cache,
&items[i].a,
- script_tag,
+ script_tags[i],
language_tag,
range_char_counts,
range_properties,