HB_BEGIN_DECLS
+#if !GLIB_CHECK_VERSION(2,29,14)
static const hb_script_t
glib_script_to_script[] =
{
HB_SCRIPT_BRAHMI,
HB_SCRIPT_MANDAIC
};
+#endif
hb_script_t
hb_glib_script_to_script (GUnicodeScript script)
{
+#if GLIB_CHECK_VERSION(2,29,14)
+ return (hb_script_t) g_unicode_script_to_iso15924 (script);
+#else
if (likely ((unsigned int) script < ARRAY_LENGTH (glib_script_to_script)))
return glib_script_to_script[script];
return HB_SCRIPT_INVALID;
return HB_SCRIPT_UNKNOWN;
+#endif
}
GUnicodeScript
hb_glib_script_from_script (hb_script_t script)
{
+#if GLIB_CHECK_VERSION(2,29,14)
+ return g_unicode_script_from_iso15924 (script);
+#else
unsigned int count = ARRAY_LENGTH (glib_script_to_script);
for (unsigned int i = 0; i < count; i++)
if (glib_script_to_script[i] == script)
return G_UNICODE_SCRIPT_INVALID_CODE;
return G_UNICODE_SCRIPT_UNKNOWN;
+#endif
}
/* We don't ifdef-out the fallback code such that compiler always
* sees it and makes sure it's compilable. */
+ if (!a || !b)
+ return FALSE;
+
gchar utf8[12];
gchar *normalized;
gint len;
} else if (len == 2) {
*a = g_utf8_get_char (normalized);
*b = g_utf8_get_char (g_utf8_next_char (normalized));
+ /* Here's the ugly part: if ab decomposes to a single character and
+ * that character decomposes again, we have to detect that and undo
+ * the second part :-(. */
+ gchar *recomposed = g_utf8_normalize (normalized, -1, G_NORMALIZE_NFC);
+ hb_codepoint_t c = g_utf8_get_char (recomposed);
+ if (c != ab && c != *a) {
+ *a = c;
+ *b = 0;
+ }
+ g_free (recomposed);
ret = TRUE;
} else {
/* If decomposed to more than two characters, take the last one,