[HarfBuzz] harfbuzz-ng: Branch 'master' - 2 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Fri Jun 8 07:23:10 PDT 2012
src/hb-uniscribe.cc | 148 ++++++++++++++++++++++++++--------------------------
1 file changed, 74 insertions(+), 74 deletions(-)
New commits:
commit 0dd86f9f6849d82d60a99e66b6928795cfb2a3c7
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 8 10:23:03 2012 -0400
Whitespace
diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc
index 9d121aa..485e084 100644
--- a/src/hb-uniscribe.cc
+++ b/src/hb-uniscribe.cc
@@ -342,78 +342,78 @@ retry:
bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
for (unsigned int j = 0; j < item_count; j++)
{
- unsigned int i = backward ? item_count - 1 - j : j;
- 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]);
-
- hr = ScriptShapeOpenType (font_data->hdc,
- &font_data->script_cache,
- &items[i].a,
- script_tag,
- language_tag,
- range_char_counts,
- range_properties,
- range_count,
- wchars + chars_offset,
- item_chars_len,
- glyphs_size - glyphs_offset,
- /* out */
- log_clusters + chars_offset,
- char_props + chars_offset,
- glyphs + glyphs_offset,
- 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))
- {
- buffer->ensure (buffer->allocated * 2);
- if (buffer->in_error)
- FAIL ("Buffer resize failed");
- goto retry;
- }
- if (unlikely (hr == USP_E_SCRIPT_NOT_IN_FONT))
- FAIL ("ScriptShapeOpenType() failed: Font doesn't support script");
- if (unlikely (FAILED (hr)))
- FAIL ("ScriptShapeOpenType() failed: 0x%08xL", hr);
-
- hr = ScriptPlaceOpenType (font_data->hdc,
- &font_data->script_cache,
- &items[i].a,
- script_tag,
- language_tag,
- range_char_counts,
- range_properties,
- range_count,
- wchars + chars_offset,
- log_clusters + chars_offset,
- char_props + chars_offset,
- item_chars_len,
- glyphs + glyphs_offset,
- glyph_props + glyphs_offset,
- glyphs_len,
- /* out */
- advances + glyphs_offset,
- offsets + glyphs_offset,
- NULL);
- if (unlikely (FAILED (hr)))
- FAIL ("ScriptPlaceOpenType() failed: 0x%08xL", hr);
-
- glyphs_offset += glyphs_len;
+ unsigned int i = backward ? item_count - 1 - j : j;
+ 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]);
+
+ hr = ScriptShapeOpenType (font_data->hdc,
+ &font_data->script_cache,
+ &items[i].a,
+ script_tag,
+ language_tag,
+ range_char_counts,
+ range_properties,
+ range_count,
+ wchars + chars_offset,
+ item_chars_len,
+ glyphs_size - glyphs_offset,
+ /* out */
+ log_clusters + chars_offset,
+ char_props + chars_offset,
+ glyphs + glyphs_offset,
+ 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))
+ {
+ buffer->ensure (buffer->allocated * 2);
+ if (buffer->in_error)
+ FAIL ("Buffer resize failed");
+ goto retry;
+ }
+ if (unlikely (hr == USP_E_SCRIPT_NOT_IN_FONT))
+ FAIL ("ScriptShapeOpenType() failed: Font doesn't support script");
+ if (unlikely (FAILED (hr)))
+ FAIL ("ScriptShapeOpenType() failed: 0x%08xL", hr);
+
+ hr = ScriptPlaceOpenType (font_data->hdc,
+ &font_data->script_cache,
+ &items[i].a,
+ script_tag,
+ language_tag,
+ range_char_counts,
+ range_properties,
+ range_count,
+ wchars + chars_offset,
+ log_clusters + chars_offset,
+ char_props + chars_offset,
+ item_chars_len,
+ glyphs + glyphs_offset,
+ glyph_props + glyphs_offset,
+ glyphs_len,
+ /* out */
+ advances + glyphs_offset,
+ offsets + glyphs_offset,
+ NULL);
+ if (unlikely (FAILED (hr)))
+ FAIL ("ScriptPlaceOpenType() failed: 0x%08xL", hr);
+
+ glyphs_offset += glyphs_len;
}
glyphs_len = glyphs_offset;
commit 8e7beba7c3b3dea3cb3b7e280c5aab4f13b92d31
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Fri Jun 8 10:22:06 2012 -0400
Fix Uniscribe clusters with direction-overriden Arabic
diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc
index ce34f77..9d121aa 100644
--- a/src/hb-uniscribe.cc
+++ b/src/hb-uniscribe.cc
@@ -429,11 +429,11 @@ retry:
}
if (!backward) {
for (unsigned int i = 1; i < glyphs_len; i++)
- if (!glyph_props[i].sva.fClusterStart)
+ if (vis_clusters[i] == -1)
vis_clusters[i] = vis_clusters[i - 1];
} else {
for (int i = glyphs_len - 2; i >= 0; i--)
- if (!glyph_props[i].sva.fClusterStart)
+ if (vis_clusters[i] == -1)
vis_clusters[i] = vis_clusters[i + 1];
}
More information about the HarfBuzz
mailing list