Merge branch 'g_unichar_isxdigit_full_width' into 'master'

Getting fullwidth unichar for g_unichar_xdigit(_value)

Closes #58

See merge request GNOME/glib!771
This commit is contained in:
Philip Withnall 2019-05-08 12:19:30 +00:00
commit babe5cdf5e
2 changed files with 779 additions and 98 deletions

View File

@ -37,6 +37,13 @@
#include "gwin32.h"
#endif
#define G_UNICHAR_FULLWIDTH_A 0xff21
#define G_UNICHAR_FULLWIDTH_I 0xff29
#define G_UNICHAR_FULLWIDTH_J 0xff2a
#define G_UNICHAR_FULLWIDTH_F 0xff26
#define G_UNICHAR_FULLWIDTH_a 0xff41
#define G_UNICHAR_FULLWIDTH_f 0xff46
#define ATTR_TABLE(Page) (((Page) <= G_UNICODE_LAST_PAGE_PART1) \
? attr_table_part1[Page] \
: attr_table_part2[(Page) - 0xe00])
@ -362,9 +369,11 @@ g_unichar_istitle (gunichar c)
gboolean
g_unichar_isxdigit (gunichar c)
{
return ((c >= 'a' && c <= 'f')
|| (c >= 'A' && c <= 'F')
|| (TYPE (c) == G_UNICODE_DECIMAL_NUMBER));
return ((c >= 'a' && c <= 'f') ||
(c >= 'A' && c <= 'F') ||
(c >= G_UNICHAR_FULLWIDTH_a && c <= G_UNICHAR_FULLWIDTH_f) ||
(c >= G_UNICHAR_FULLWIDTH_A && c <= G_UNICHAR_FULLWIDTH_F) ||
(TYPE (c) == G_UNICODE_DECIMAL_NUMBER));
}
/**
@ -662,6 +671,10 @@ g_unichar_xdigit_value (gunichar c)
return c - 'A' + 10;
if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
if (c >= G_UNICHAR_FULLWIDTH_A && c <= G_UNICHAR_FULLWIDTH_F)
return c - G_UNICHAR_FULLWIDTH_A + 10;
if (c >= G_UNICHAR_FULLWIDTH_a && c <= G_UNICHAR_FULLWIDTH_f)
return c - G_UNICHAR_FULLWIDTH_a + 10;
if (TYPE (c) == G_UNICODE_DECIMAL_NUMBER)
return ATTTABLE (c >> 8, c & 0xff);
return -1;
@ -968,7 +981,8 @@ real_tolower (const gchar *str,
last = p;
p = g_utf8_next_char (p);
if (locale_type == LOCALE_TURKIC && c == 'I')
if (locale_type == LOCALE_TURKIC && (c == 'I' ||
c == G_UNICHAR_FULLWIDTH_I))
{
if (g_utf8_get_char (p) == 0x0307)
{
@ -1004,7 +1018,8 @@ real_tolower (const gchar *str,
}
}
else if (locale_type == LOCALE_LITHUANIAN &&
(c == 'I' || c == 'J' || c == 0x012e) &&
(c == 'I' || c == G_UNICHAR_FULLWIDTH_I ||
c == 'J' || c == G_UNICHAR_FULLWIDTH_J || c == 0x012e) &&
has_more_above (p))
{
len += g_unichar_to_utf8 (g_unichar_tolower (c), out_buffer ? out_buffer + len : NULL);

File diff suppressed because it is too large Load Diff