summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson.build2
-rw-r--r--pango/fonts.c2
-rw-r--r--pango/pango-script.c23
-rw-r--r--pango/pangowin32-dwrite-fontmap.cpp16
-rw-r--r--tests/itemize/three.expected9
-rw-r--r--tests/itemize/three.items1
6 files changed, 43 insertions, 10 deletions
diff --git a/meson.build b/meson.build
index 285ee3d4..538372ad 100644
--- a/meson.build
+++ b/meson.build
@@ -89,7 +89,6 @@ elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
'-Wuninitialized',
'-Wunused',
'-Werror=address',
- '-Werror=array-bounds',
'-Werror=empty-body',
'-Werror=implicit',
'-Werror=implicit-fallthrough',
@@ -132,7 +131,6 @@ elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
'-Werror=sequence-point',
'-Werror=return-type',
'-Werror=trigraphs',
- '-Werror=array-bounds',
'-Werror=write-strings',
'-Werror=address',
'-Werror=int-to-pointer-cast',
diff --git a/pango/fonts.c b/pango/fonts.c
index e259f8c7..748f8a43 100644
--- a/pango/fonts.c
+++ b/pango/fonts.c
@@ -2402,7 +2402,7 @@ pango_font_family_get_property (GObject *object,
switch (property_id)
{
case PROP_ITEM_TYPE:
- g_value_set_gtype (value, PANGO_TYPE_FONT);
+ g_value_set_gtype (value, PANGO_TYPE_FONT_FACE);
break;
case PROP_N_ITEMS:
diff --git a/pango/pango-script.c b/pango/pango-script.c
index 71c519fd..fa9ab21d 100644
--- a/pango/pango-script.c
+++ b/pango/pango-script.c
@@ -286,12 +286,29 @@ get_pair_index (gunichar ch)
return -1;
}
+static gboolean
+is_cluster_extender (gunichar ch)
+{
+ GUnicodeType type = g_unichar_type (ch);
+ return (type >= G_UNICODE_SPACING_MARK && type <= G_UNICODE_NON_SPACING_MARK) ||
+ (ch >= 0x200C && ch <= 0x200D) || /* ZWJ, ZWNJ */
+ (ch >= 0xFF9E && ch <= 0xFF9F) || /* katakana sound marks */
+ (ch >= 0x1F3FB && ch <= 0x1F3FF) || /* fitzpatrick skin tone modifiers */
+ (ch >= 0xE0020 && ch <= 0xE007F); /* emoji (flag) tag characters */
+}
+
/* duplicated in pango-language.c */
#define REAL_SCRIPT(script) \
((script) > PANGO_SCRIPT_INHERITED && (script) != PANGO_SCRIPT_UNKNOWN)
-#define SAME_SCRIPT(script1, script2) \
- (!REAL_SCRIPT (script1) || !REAL_SCRIPT (script2) || (script1) == (script2))
+#define IS_CLUSTER_EXTENDER(ch) \
+ g_unichar_type (ch)
+
+/* TODO: Use Unicode ScriptExtensions */
+#define SAME_SCRIPT(script1, script2, ch) \
+ (!REAL_SCRIPT (script1) || !REAL_SCRIPT (script2) || \
+ (script1) == (script2) || \
+ is_cluster_extender (ch))
#define IS_OPEN(pair_index) (((pair_index) & 1) == 0)
@@ -372,7 +389,7 @@ pango_script_iter_next (PangoScriptIter *iter)
}
}
- if (SAME_SCRIPT (iter->script_code, sc))
+ if (SAME_SCRIPT (iter->script_code, sc, ch))
{
if (!REAL_SCRIPT (iter->script_code) && REAL_SCRIPT (sc))
{
diff --git a/pango/pangowin32-dwrite-fontmap.cpp b/pango/pangowin32-dwrite-fontmap.cpp
index 2db0972a..7e712b57 100644
--- a/pango/pangowin32-dwrite-fontmap.cpp
+++ b/pango/pangowin32-dwrite-fontmap.cpp
@@ -512,22 +512,30 @@ pango_win32_dwrite_font_check_is_hinted (PangoWin32Font *font)
&table_ctx,
&exists)))
{
- if (exists)
+ if (exists && table_size > 4)
{
guint16 version = DWRITE_NEXT_USHORT (table_data);
if (version == 0 || version == 1)
{
guint16 num_ranges = DWRITE_NEXT_USHORT (table_data);
- guint16 i;
+ UINT32 max_ranges = (table_size - 4) / (sizeof (guint16) * 2);
+ guint16 i = 0;
- for (i = 0; !result && i < num_ranges && i < (table_size / sizeof (guint16)); i ++)
+ if (num_ranges > max_ranges)
+ num_ranges = max_ranges;
+
+ for (i = 0; i < num_ranges; i++)
{
+ G_GNUC_UNUSED
guint16 ppem = DWRITE_NEXT_USHORT (table_data);
guint16 behavior = DWRITE_NEXT_USHORT (table_data);
if (behavior & (GASP_GRIDFIT | GASP_SYMMETRIC_GRIDFIT))
- result = TRUE;
+ {
+ result = TRUE;
+ break;
+ }
}
}
}
diff --git a/tests/itemize/three.expected b/tests/itemize/three.expected
new file mode 100644
index 00000000..eb45fbd3
--- /dev/null
+++ b/tests/itemize/three.expected
@@ -0,0 +1,9 @@
+<span font="Cantarell 11" fallback="false">عַرַبִ</span>
+
+Items: عַرַبִ
+Chars: 6(0)
+Font: Cantarell 11
+Script: arabic
+Lang: ar
+Bidi: 1
+Attrs: 0 12 fallback false
diff --git a/tests/itemize/three.items b/tests/itemize/three.items
new file mode 100644
index 00000000..394767e5
--- /dev/null
+++ b/tests/itemize/three.items
@@ -0,0 +1 @@
+<span font="Cantarell 11" fallback="false">عַرַبִ</span>