summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--glib/guniprop.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/glib/guniprop.c b/glib/guniprop.c
index 3744cd1b6..d1363e546 100644
--- a/glib/guniprop.c
+++ b/glib/guniprop.c
@@ -477,6 +477,14 @@ g_unichar_iswide_bsearch (gunichar ch)
return FALSE;
}
+static const struct Interval default_wide_blocks[] = {
+ { 0x3400, 0x4dbf },
+ { 0x4e00, 0x9fff },
+ { 0xf900, 0xfaff },
+ { 0x20000, 0x2fffd },
+ { 0x30000, 0x3fffd }
+};
+
/**
* g_unichar_iswide:
* @c: a Unicode character
@@ -491,8 +499,17 @@ g_unichar_iswide (gunichar c)
{
if (c < g_unicode_width_table_wide[0].start)
return FALSE;
- else
- return g_unichar_iswide_bsearch (c);
+ else if (g_unichar_iswide_bsearch (c))
+ return TRUE;
+ else if (g_unichar_type (c) == G_UNICODE_UNASSIGNED &&
+ bsearch (GUINT_TO_POINTER (c),
+ default_wide_blocks,
+ G_N_ELEMENTS (default_wide_blocks),
+ sizeof default_wide_blocks[0],
+ interval_compare))
+ return TRUE;
+
+ return FALSE;
}