[glib] Remove old cruft from pre-2011

This commit is contained in:
Behdad Esfahbod 2022-11-15 15:37:23 -07:00
parent 1bd1a37837
commit 49fe5c1e5a
1 changed files with 4 additions and 73 deletions

View File

@ -129,32 +129,9 @@ hb_glib_unicode_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
{ {
#if GLIB_CHECK_VERSION(2,29,12) #if GLIB_CHECK_VERSION(2,29,12)
return g_unichar_compose (a, b, ab); return g_unichar_compose (a, b, ab);
#endif #else
/* 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; return false;
#endif
if (len == 1) {
*ab = g_utf8_get_char (normalized);
ret = true;
} else {
ret = false;
}
g_free (normalized);
return ret;
} }
static hb_bool_t 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) #if GLIB_CHECK_VERSION(2,29,12)
return g_unichar_decompose (ab, a, b); return g_unichar_decompose (ab, a, b);
#endif #else
/* 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; return false;
#endif
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;
} }