[glib] Remove old cruft from pre-2011
This commit is contained in:
parent
1bd1a37837
commit
49fe5c1e5a
|
@ -129,32 +129,9 @@ hb_glib_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
|
|||
{
|
||||
#if GLIB_CHECK_VERSION(2,29,12)
|
||||
return g_unichar_compose (a, b, ab);
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
|
||||
/* We don't ifdef-out the fallback code such that compiler always
|
||||
* sees it and makes sure it's compilable. */
|
||||
|
||||
gchar utf8[12];
|
||||
gchar *normalized;
|
||||
int len;
|
||||
hb_bool_t ret;
|
||||
|
||||
len = g_unichar_to_utf8 (a, utf8);
|
||||
len += g_unichar_to_utf8 (b, utf8 + len);
|
||||
normalized = g_utf8_normalize (utf8, len, G_NORMALIZE_NFC);
|
||||
len = g_utf8_strlen (normalized, -1);
|
||||
if (unlikely (!len))
|
||||
return false;
|
||||
|
||||
if (len == 1) {
|
||||
*ab = g_utf8_get_char (normalized);
|
||||
ret = true;
|
||||
} else {
|
||||
ret = false;
|
||||
}
|
||||
|
||||
g_free (normalized);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static hb_bool_t
|
||||
|
@ -166,55 +143,9 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
|
|||
{
|
||||
#if GLIB_CHECK_VERSION(2,29,12)
|
||||
return g_unichar_decompose (ab, a, b);
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
|
||||
/* We don't ifdef-out the fallback code such that compiler always
|
||||
* sees it and makes sure it's compilable. */
|
||||
|
||||
gchar utf8[6];
|
||||
gchar *normalized;
|
||||
int len;
|
||||
hb_bool_t ret;
|
||||
|
||||
len = g_unichar_to_utf8 (ab, utf8);
|
||||
normalized = g_utf8_normalize (utf8, len, G_NORMALIZE_NFD);
|
||||
len = g_utf8_strlen (normalized, -1);
|
||||
if (unlikely (!len))
|
||||
return false;
|
||||
|
||||
if (len == 1) {
|
||||
*a = g_utf8_get_char (normalized);
|
||||
*b = 0;
|
||||
ret = *a != ab;
|
||||
} 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,
|
||||
* and recompose the rest to get the first component. */
|
||||
gchar *end = g_utf8_offset_to_pointer (normalized, len - 1);
|
||||
gchar *recomposed;
|
||||
*b = g_utf8_get_char (end);
|
||||
recomposed = g_utf8_normalize (normalized, end - normalized, G_NORMALIZE_NFC);
|
||||
/* We expect that recomposed has exactly one character now. */
|
||||
*a = g_utf8_get_char (recomposed);
|
||||
g_free (recomposed);
|
||||
ret = true;
|
||||
}
|
||||
|
||||
g_free (normalized);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue