Commit 2439902d authored by Matthias Clasen's avatar Matthias Clasen
Browse files

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.
parent 3fdbd3fe
......@@ -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;
......
......@@ -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;
}
......
{
"context" : {
"font" : "serif 12",
"language" : "en-us",
"base-gravity" : "south",
"gravity-hint" : "natural",
"base-dir" : "weak-ltr",
"round-glyph-positions" : true,
"transform" : [
1.0,
0.0,
0.0,
1.0,
0.0,
0.0
]
},
"comment" : "Visible and nickless ignorables",
"text" : "😊️ ‍",
"attributes" : [
{
"type" : "show",
"value" : 4
}
],
"font" : "Cantarell 11",
"output" : {
"is-wrapped" : false,
"is-ellipsized" : false,
"unknown-glyphs" : 1,
"width" : 45056,
"height" : 19456,
"log-attrs" : [
{
"char-break" : true,
"cursor-position" : true,
"sentence-boundary" : true,
"sentence-start" : true,
"backspace-deletes-character" : true,
"word-boundary" : true
},
{ },
{
"char-break" : true,
"white" : true,
"cursor-position" : true,
"expandable-space" : true,
"word-boundary" : true
},
{
"line-break" : true
},
{
"line-break" : true,
"mandatory-break" : true,
"char-break" : true,
"white" : true,
"cursor-position" : true,
"sentence-boundary" : true,
"sentence-end" : true,
"backspace-deletes-character" : true,
"word-boundary" : true
}
],
"lines" : [
{
"start-index" : 0,
"length" : 11,
"paragraph-start" : true,
"direction" : "ltr",
"runs" : [
{
"offset" : 0,
"length" : 7,
"text" : "😊️",
"bidi-level" : 0,
"gravity" : "south",
"language" : "en-us",
"script" : "common",
"font" : {
"description" : "Noto Color Emoji 11",
"checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47",
"matrix" : [
0.13455956135321101,
-0.0,
-0.0,
0.13455956135321101,
0.0,
0.0
]
},
"flags" : 0,
"extra-attributes" : [
{
"type" : "show",
"value" : 4
}
],
"y-offset" : 0,
"start-x-offset" : 0,
"end-x-offset" : 0,
"glyphs" : [
{
"glyph" : 13,
"width" : 18432,
"is-cluster-start" : true,
"is-color" : true,
"log-cluster" : 0
},
{
"glyph" : 268435455,
"width" : 0,
"is-cluster-start" : true,
"log-cluster" : 4
}
]
},
{
"offset" : 7,
"length" : 4,
"text" : " ‍",
"bidi-level" : 0,
"gravity" : "south",
"language" : "en-us",
"script" : "common",
"font" : {
"description" : "Cantarell 11",
"checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2",
"variations" : {
"wght" : 0
},
"matrix" : [
1.0,
-0.0,
-0.0,
1.0,
0.0,
0.0
]
},
"flags" : 0,
"extra-attributes" : [
{
"type" : "show",
"value" : 4
}
],
"y-offset" : 0,
"start-x-offset" : 0,
"end-x-offset" : 0,
"glyphs" : [
{
"glyph" : 1109,
"width" : 3072,
"is-cluster-start" : true,
"log-cluster" : 0
},
{
"glyph" : 268443661,
"width" : 23552,
"is-cluster-start" : true,
"log-cluster" : 1
}
]
}
]
}
]
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment