[HarfBuzz] harfbuzz-ng: Branch 'master' - 2 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Thu Jul 26 12:59:31 PDT 2012
src/hb-coretext.cc | 41 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 39 insertions(+), 2 deletions(-)
New commits:
commit ac2085d4b391b0a72473ecac3dd6c22efe66833f
Author: Jonathan Kew <jfkthame at gmail.com>
Date: Thu Jul 26 15:58:45 2012 -0400
[CoreText] Ensure cluster indices in output buffer are non-decreasing.
Does not provide Uniscribe-compatible results, but should at least avoid
breaking hb-view due to out-of-order cluster values.
For RTL runs, ensure cluster values are non-increasing (instead of
non-decreasing).
diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc
index 65a1c73..c99ffc4 100644
--- a/src/hb-coretext.cc
+++ b/src/hb-coretext.cc
@@ -319,5 +319,42 @@ _hb_coretext_shape (hb_font_t *font,
pos->y_offset = info->var2.u32;
}
+ // Fix up clusters so that we never return out-of-order indices;
+ // if core text has reordered glyphs, we'll merge them to the
+ // beginning of the reordered cluster.
+ // This does *not* mean we'll form the same clusters as Uniscribe
+ // or the native OT backend, only that the cluster indices will be
+ // non-decreasing in the output buffer.
+ if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
+ unsigned int prev_cluster = 0;
+ for (unsigned int i = 0; i < count; i++) {
+ unsigned int curr_cluster = buffer->info[i].cluster;
+ if (curr_cluster < prev_cluster) {
+ for (unsigned int j = i; j > 0; j--) {
+ if (buffer->info[j - 1].cluster > curr_cluster)
+ buffer->info[j - 1].cluster = curr_cluster;
+ else
+ break;
+ }
+ }
+ prev_cluster = curr_cluster;
+ }
+ } else {
+ // For RTL runs, we make them non-increasing instead.
+ unsigned int prev_cluster = (unsigned int)-1;
+ for (unsigned int i = 0; i < count; i++) {
+ unsigned int curr_cluster = buffer->info[i].cluster;
+ if (curr_cluster > prev_cluster) {
+ for (unsigned int j = i; j > 0; j--) {
+ if (buffer->info[j - 1].cluster < curr_cluster)
+ buffer->info[j - 1].cluster = curr_cluster;
+ else
+ break;
+ }
+ }
+ prev_cluster = curr_cluster;
+ }
+ }
+
return true;
}
commit 441d3bb7de311d54b9f0a5210344f9a96e97e153
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Thu Jul 26 12:01:12 2012 -0400
Minor
diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc
index f49e76e..65a1c73 100644
--- a/src/hb-coretext.cc
+++ b/src/hb-coretext.cc
@@ -260,8 +260,8 @@ _hb_coretext_shape (hb_font_t *font,
#define ALLOCATE_ARRAY(Type, name, len) \
Type *name = (Type *) scratch; \
- scratch += len * sizeof (name[0]); \
- scratch_size -= len * sizeof (name[0]);
+ scratch += (len) * sizeof ((name)[0]); \
+ scratch_size -= (len) * sizeof ((name)[0]);
const CGGlyph* glyphs = CTRunGetGlyphsPtr (run);
if (!glyphs) {
More information about the HarfBuzz
mailing list