From 2c9c49fd3289b7c27135f8379b92f413c6f5f1f0 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 10 Jan 2023 10:53:21 -0700 Subject: [PATCH] [aat] Support ranges in NonContextual subtable as well --- src/hb-aat-layout-common.hh | 1 - src/hb-aat-layout-morx-table.hh | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/hb-aat-layout-common.hh b/src/hb-aat-layout-common.hh index 95e6b05d9..ada15bc19 100644 --- a/src/hb-aat-layout-common.hh +++ b/src/hb-aat-layout-common.hh @@ -803,7 +803,6 @@ struct StateTableDriver last_range = range; } - if (!(range->flags & ac->subtable_flags)) { if (buffer->idx == buffer->len || unlikely (!buffer->successful)) diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh index 7d2e958fb..dbe3127cd 100644 --- a/src/hb-aat-layout-morx-table.hh +++ b/src/hb-aat-layout-morx-table.hh @@ -618,8 +618,25 @@ struct NoncontextualSubtable hb_glyph_info_t *info = c->buffer->info; unsigned int count = c->buffer->len; + auto *last_range = c->range_flags && (*c->range_flags) ? &(*c->range_flags)[0] : nullptr; for (unsigned int i = 0; i < count; i++) { + if (last_range) + { + auto *range = last_range; + { + unsigned cluster = info[i].cluster; + while (cluster < range->cluster_first) + range--; + while (cluster > range->cluster_last) + range++; + + last_range = range; + } + if (!(range->flags & c->subtable_flags)) + continue; + } + const HBGlyphID16 *replacement = substitute.get_value (info[i].codepoint, num_glyphs); if (replacement) {