[glib: 1/4] Getting fullwidth for g_unichar_xdigit(_value)
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 1/4] Getting fullwidth for g_unichar_xdigit(_value)
- Date: Wed, 8 May 2019 12:19:47 +0000 (UTC)
commit d8cc47831d7b895e20e69a2386adb291fcd3d4d3
Author: Emmanuel Fleury <emmanuel fleury u-bordeaux fr>
Date: Fri Apr 5 11:06:17 2019 +0200
Getting fullwidth for g_unichar_xdigit(_value)
Fix issue #58.
glib/guniprop.c | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)
---
diff --git a/glib/guniprop.c b/glib/guniprop.c
index 6e8a6e70e..cd3675fbf 100644
--- a/glib/guniprop.c
+++ b/glib/guniprop.c
@@ -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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]