From a7a76cfac798e3a924b3899d89398f2f4b9539b6 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Sat, 25 Aug 2001 22:29:40 +0000 Subject: Implement and document g_ascii_isxxx. 2001-08-25 Alexander Larsson * glib/gstrfuncs.[ch]: * docs/reference/glib/glib-overrides.txt: * docs/reference/glib/glib-sections.txt: * docs/reference/glib/tmpl/string_utils.sgml: Implement and document g_ascii_isxxx. * tests/strfunc-test.c: Add tests for g_ascii_isxxx * glib/guniprop.c (g_unichar_ispunct): include symbols, not just punctuation. (g_unichar_isspace): Vertical tab is not considered whitespace. * tests/shell-test.c: Output errors on stderr --- glib/gstrfuncs.c | 147 +++++++++++++++++++++++-------------------------------- 1 file changed, 62 insertions(+), 85 deletions(-) (limited to 'glib/gstrfuncs.c') diff --git a/glib/gstrfuncs.c b/glib/gstrfuncs.c index 45dfe956b..eb0393d9e 100644 --- a/glib/gstrfuncs.c +++ b/glib/gstrfuncs.c @@ -53,6 +53,26 @@ * inteferes with g_strsignal() on some OSes */ +const guint16 g_ascii_table[256] = { + 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x004, 0x104, 0x104, 0x004, 0x104, 0x104, 0x004, 0x004, + 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x140, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, + 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, + 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, + 0x459, 0x459, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, + 0x0d0, 0x653, 0x653, 0x653, 0x653, 0x653, 0x653, 0x253, + 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, + 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, + 0x253, 0x253, 0x253, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, + 0x0d0, 0x473, 0x473, 0x473, 0x473, 0x473, 0x473, 0x073, + 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, + 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, + 0x073, 0x073, 0x073, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x004 + /* the upper 128 are all zeroes */ +}; + gchar* g_strdup (const gchar *str) { @@ -1080,91 +1100,6 @@ g_strreverse (gchar *string) return string; } -/** - * g_ascii_isalpha: - * @c: any character - * - * Determines whether a character is alphabetic (i.e. a letter). - * - * Unlike the standard C library isalpha function, this only - * recognizes standard ASCII letters and ignores the locale, returning - * %FALSE for all non-ASCII characters. Also unlike the standard - * library function, this takes a char, not an int, so don't call it - * on EOF but no need to cast to guchar before passing a possibly - * non-ASCII character in. - * - * Return value: %TRUE if @c is an ASCII alphabetic character - **/ -gboolean -g_ascii_isalpha (gchar c) -{ - return g_ascii_islower (c) || g_ascii_isupper (c); -} - -/** - * g_ascii_isalnum: - * @c: any character - * - * Determines whether a character is alphanumeric. - * - * Unlike the standard C library isalnum function, this only - * recognizes standard ASCII letters and ignores the locale, returning - * %FALSE for all non-ASCII characters. Also unlike the standard - * library function, this takes a char, not an int, so don't call it - * on EOF but no need to cast to guchar before passing a possibly - * non-ASCII character in. - * - * Return value: %TRUE if @c is an ASCII alphanumeric character - **/ -gboolean -g_ascii_isalnum (gchar c) -{ - return g_ascii_isalpha (c) || isdigit (c); -} - - -/** - * g_ascii_islower: - * @c: any character - * - * Determines whether a character is an ASCII lower case letter. - * - * Unlike the standard C library islower function, this only - * recognizes standard ASCII letters and ignores the locale, returning - * %FALSE for all non-ASCII characters. Also unlike the standard - * library function, this takes a char, not an int, so don't call it - * on EOF but no need to worry about casting to guchar before passing - * a possibly non-ASCII character in. - * - * Return value: %TRUE if @c is an ASCII lower case letter - **/ -gboolean -g_ascii_islower (gchar c) -{ - return c >= 'a' && c <= 'z'; -} - -/** - * g_ascii_isupper: - * @c: any character - * - * Determines whether a character is an ASCII upper case letter. - * - * Unlike the standard C library isupper function, this only - * recognizes standard ASCII letters and ignores the locale, returning - * %FALSE for all non-ASCII characters. Also unlike the standard - * library function, this takes a char, not an int, so don't call it - * on EOF but no need to worry about casting to guchar before passing - * a possibly non-ASCII character in. - * - * Return value: %TRUE if @c is an ASCII upper case letter - **/ -gboolean -g_ascii_isupper (gchar c) -{ - return c >= 'A' && c <= 'Z'; -} - /** * g_ascii_tolower: * @c: any character @@ -1213,6 +1148,48 @@ g_ascii_toupper (gchar c) return g_ascii_islower (c) ? c - 'a' + 'A' : c; } +/** + * g_ascii_digit_value: + * @c: an ASCII character + * + * Determines the numeric value of a character as a decimal + * digit. Differs from g_unichar_digit_value because it takes + * a char, so there's no worry about sign extension if characters + * are signed. + * + * Return value: If @c is a decimal digit (according to + * `g_ascii_isdigit'), its numeric value. Otherwise, -1. + **/ +int +g_ascii_digit_value (gchar c) +{ + if (g_ascii_isdigit (c)) + return c - '0'; + return -1; +} + +/** + * g_ascii_xdigit_value: + * @c: an ASCII character + * + * Determines the numeric value of a character as a hexidecimal + * digit. Differs from g_unichar_xdigit_value because it takes + * a char, so there's no worry about sign extension if characters + * are signed. + * + * Return value: If @c is a hex digit (according to + * `g_ascii_isxdigit'), its numeric value. Otherwise, -1. + **/ +int +g_ascii_xdigit_value (gchar c) +{ + if (c >= 'A' && c <= 'F') + return c - 'A' + 10; + if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + return g_ascii_digit_value (c); +} + /** * g_ascii_strcasecmp: * @s1: string to compare with @s2 -- cgit v1.2.1