Don't do fractions if buffer is ASCII-only
diff --git a/src/hb-buffer-private.hh b/src/hb-buffer-private.hh
index 574fb36..8550517 100644
--- a/src/hb-buffer-private.hh
+++ b/src/hb-buffer-private.hh
@@ -43,8 +43,9 @@
enum hb_buffer_scratch_flags_t {
HB_BUFFER_SCRATCH_FLAG_DEFAULT = 0x00000000u,
- HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES = 0x00000001u,
- HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK = 0x00000002u,
+ HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII = 0x00000001u,
+ HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES = 0x00000002u,
+ HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK = 0x00000004u,
};
template <> class hb_mark_as_flags_t<hb_buffer_scratch_flags_t> {};
diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh
index 60fca26..049b232 100644
--- a/src/hb-ot-layout-private.hh
+++ b/src/hb-ot-layout-private.hh
@@ -249,6 +249,7 @@
if (u >= 0x80)
{
+ buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII;
if (unlikely (unicode->is_default_ignorable (u)))
{
buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES;
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 30563d0..be9c438 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -346,7 +346,8 @@
static inline void
hb_ot_shape_setup_masks_fraction (hb_ot_shape_context_t *c)
{
- if (!c->plan->has_frac)
+ if (!(c->buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII) ||
+ !c->plan->has_frac)
return;
hb_buffer_t *buffer = c->buffer;