summaryrefslogtreecommitdiff
path: root/pango
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-11-28 09:59:39 -0500
committerMatthias Clasen <mclasen@redhat.com>2021-11-28 10:34:22 -0500
commit2439902d2f81c0e44e753a7381b27a5ad5d0d2b4 (patch)
treebe4d6f559b9c93b95f09114401758d06341b35f4 /pango
parent3fdbd3fe01842e683a26a1e1c9c9eb04099f27f1 (diff)
downloadpango-2439902d2f81c0e44e753a7381b27a5ad5d0d2b4.tar.gz
Never show variation selectors
Even when we show ignorables, we still want to ignore variation selectors and other ignorables that we don't have nicks for. Test included.
Diffstat (limited to 'pango')
-rw-r--r--pango/pango-impl-utils.h42
-rw-r--r--pango/shape.c7
2 files changed, 45 insertions, 4 deletions
diff --git a/pango/pango-impl-utils.h b/pango/pango-impl-utils.h
index a0183d69..55c743df 100644
--- a/pango/pango-impl-utils.h
+++ b/pango/pango-impl-utils.h
@@ -128,8 +128,46 @@ pango_glyph_string_reverse_range (PangoGlyphString *glyphs,
}
}
-/* The cairo hexbox drawing code assumes
- * that these nicks are 1-6 ASCII chars
+static inline gboolean
+pango_is_default_ignorable (gunichar ch)
+{
+ int plane = ch >> 16;
+
+ if (G_LIKELY (plane == 0))
+ {
+ int page = ch >> 8;
+ switch (page)
+ {
+ case 0x00: return ch == 0x00ad;
+ case 0x03: return ch == 0x034f;
+ case 0x06: return ch == 0x061c;
+ case 0x17: return (0x17b4 <= ch && ch <= 0x17b5);
+ case 0x18: return (0x180b <= ch && ch <= 0x180e);
+ case 0x20: return (0x200b <= ch && ch <= 0x200f) ||
+ (0x202a <= ch && ch <= 0x202e) ||
+ (0x2060 <= ch && ch <= 0x206f);
+ case 0xfe: return (0xfe00 <= ch && ch <= 0xfe0f) || ch == 0xfeff;
+ case 0xff: return (0xfff0 <= ch && ch <= 0xfff8);
+ default: return FALSE;
+ }
+ }
+ else
+ {
+ /* Other planes */
+ switch (plane)
+ {
+ case 0x01: return (0x1d173 <= ch && ch <= 0x1d17a);
+ case 0x0e: return (0xe0000 <= ch && ch <= 0xe0fff);
+ default: return FALSE;
+ }
+ }
+}
+
+/* These are the default ignorables that we render as hexboxes
+ * with nicks if PANGO_SHOW_IGNORABLES is used.
+ *
+ * The cairo hexbox drawing code assumes that these nicks are
+ * 1-6 ASCII chars
*/
static struct {
gunichar ch;
diff --git a/pango/shape.c b/pango/shape.c
index caefeae4..45c979f2 100644
--- a/pango/shape.c
+++ b/pango/shape.c
@@ -111,9 +111,12 @@ pango_hb_font_get_nominal_glyph (hb_font_t *font,
}
if ((context->show_flags & PANGO_SHOW_IGNORABLES) != 0 &&
- pango_get_ignorable (unicode))
+ pango_is_default_ignorable (unicode))
{
- *glyph = PANGO_GET_UNKNOWN_GLYPH (unicode);
+ if (pango_get_ignorable (unicode))
+ *glyph = PANGO_GET_UNKNOWN_GLYPH (unicode);
+ else
+ *glyph = PANGO_GLYPH_EMPTY;
return TRUE;
}