3 * ====================================================================
\r
4 * Copyright (c) 2000-2004, 2008 CollabNet. All rights reserved.
\r
6 * This software is licensed as described in the file COPYING, which
\r
7 * you should have received as part of this distribution. The terms
\r
8 * are also available at http://subversion.tigris.org/license-1.html.
\r
9 * If newer versions of this license are posted there, you may use a
\r
10 * newer version instead, at your option.
\r
12 * This software consists of voluntary contributions made by many
\r
13 * individuals. For exact contribution history, see the revision
\r
14 * history and logs, available at http://subversion.tigris.org/.
\r
15 * ====================================================================
\r
19 * @brief Character classification routines
\r
20 * @since New in 1.2.
\r
32 #endif /* __cplusplus */
\r
35 /** Table of flags for character classification. */
\r
36 extern const apr_uint32_t *const svn_ctype_table;
\r
39 /** Check if @a c is in the character class described by @a flags.
\r
40 * The @a flags is a bitwise-or combination of @c SVN_CTYPE_*
\r
41 * constants. Uses #svn_ctype_table.
\r
43 #define svn_ctype_test(c, flags) \
\r
44 (0 != (svn_ctype_table[(unsigned char)(c)] & (flags)))
\r
48 * @defgroup ctype_basic Basic character classification - 7-bit ASCII only
\r
52 /* Basic character classes */
\r
53 #define SVN_CTYPE_CNTRL 0x0001 /**< Control character */
\r
54 #define SVN_CTYPE_SPACE 0x0002 /**< Whitespace */
\r
55 #define SVN_CTYPE_DIGIT 0x0004 /**< Decimal digit */
\r
56 #define SVN_CTYPE_UPPER 0x0008 /**< Uppercase letter */
\r
57 #define SVN_CTYPE_LOWER 0x0010 /**< Lowercase letter */
\r
58 #define SVN_CTYPE_PUNCT 0x0020 /**< Punctuation mark */
\r
59 #define SVN_CTYPE_XALPHA 0x0040 /**< Hexadecimal digits A to F */
\r
60 #define SVN_CTYPE_ASCII 0x0080 /**< ASCII subset*/
\r
62 /* Derived character classes */
\r
64 #define SVN_CTYPE_ALPHA (SVN_CTYPE_LOWER | SVN_CTYPE_UPPER)
\r
65 /** ASCII letter or decimal digit */
\r
66 #define SVN_CTYPE_ALNUM (SVN_CTYPE_ALPHA | SVN_CTYPE_DIGIT)
\r
67 /** ASCII hexadecimal digit */
\r
68 #define SVN_CTYPE_XDIGIT (SVN_CTYPE_DIGIT | SVN_CTYPE_XALPHA)
\r
69 /** Printable ASCII except space */
\r
70 #define SVN_CTYPE_GRAPH (SVN_CTYPE_PUNCT | SVN_CTYPE_ALNUM)
\r
71 /** All printable ASCII */
\r
72 #define SVN_CTYPE_PRINT (SVN_CTYPE_GRAPH | SVN_CTYPE_SPACE)
\r
75 /** Check if @a c is an ASCII control character. */
\r
76 #define svn_ctype_iscntrl(c) svn_ctype_test((c), SVN_CTYPE_CNTRL)
\r
78 /** Check if @a c is an ASCII whitespace character. */
\r
79 #define svn_ctype_isspace(c) svn_ctype_test((c), SVN_CTYPE_SPACE)
\r
81 /** Check if @a c is an ASCII digit. */
\r
82 #define svn_ctype_isdigit(c) svn_ctype_test((c), SVN_CTYPE_DIGIT)
\r
84 /** Check if @a c is an ASCII uppercase letter. */
\r
85 #define svn_ctype_isupper(c) svn_ctype_test((c), SVN_CTYPE_UPPER)
\r
87 /** Check if @a c is an ASCII lowercase letter. */
\r
88 #define svn_ctype_islower(c) svn_ctype_test((c), SVN_CTYPE_LOWER)
\r
90 /** Check if @a c is an ASCII punctuation mark. */
\r
91 #define svn_ctype_ispunct(c) svn_ctype_test((c), SVN_CTYPE_PUNCT)
\r
93 /** Check if @a c is an ASCII character. */
\r
94 #define svn_ctype_isascii(c) svn_ctype_test((c), SVN_CTYPE_ASCII)
\r
96 /** Check if @a c is an ASCII letter. */
\r
97 #define svn_ctype_isalpha(c) svn_ctype_test((c), SVN_CTYPE_ALPHA)
\r
99 /** Check if @a c is an ASCII letter or decimal digit. */
\r
100 #define svn_ctype_isalnum(c) svn_ctype_test((c), SVN_CTYPE_ALNUM)
\r
102 /** Check if @a c is an ASCII hexadecimal digit. */
\r
103 #define svn_ctype_isxdigit(c) svn_ctype_test((c), SVN_CTYPE_XDIGIT)
\r
105 /** Check if @a c is an ASCII graphical (visible printable) character. */
\r
106 #define svn_ctype_isgraph(c) svn_ctype_test((c), SVN_CTYPE_GRAPH)
\r
108 /** Check if @a c is an ASCII printable character. */
\r
109 #define svn_ctype_isprint(c) svn_ctype_test((c), SVN_CTYPE_PRINT)
\r
114 * @defgroup ctype_extra Extended character classification
\r
118 /* Basic extended character classes */
\r
119 #define SVN_CTYPE_UTF8LEAD 0x0100 /**< UTF-8 multibyte lead byte */
\r
120 #define SVN_CTYPE_UTF8CONT 0x0200 /**< UTF-8 multibyte non-lead byte */
\r
122 #define SVN_CTYPE_XMLNAME 0x0400
\r
123 #define SVN_CTYPE_URISAFE 0x0800
\r
126 /* Derived extended character classes */
\r
127 /** Part of a UTF-8 multibyte character. */
\r
128 #define SVN_CTYPE_UTF8MBC (SVN_CTYPE_UTF8LEAD | SVN_CTYPE_UTF8CONT)
\r
129 /** All valid UTF-8 bytes. */
\r
130 #define SVN_CTYPE_UTF8 (SVN_CTYPE_ASCII | SVN_CTYPE_UTF8MBC)
\r
132 /** Check if @a c is a UTF-8 multibyte lead byte. */
\r
133 #define svn_ctype_isutf8lead(c) svn_ctype_test((c), SVN_CTYPE_UTF8LEAD)
\r
135 /** Check if @a c is a UTF-8 multibyte continuation (non-lead) byte. */
\r
136 #define svn_ctype_isutf8cont(c) svn_ctype_test((c), SVN_CTYLE_UTF8CONT)
\r
138 /** Check if @a c is part of a UTF-8 multibyte character. */
\r
139 #define svn_ctype_isutf8mbc(c) svn_ctype_test((c), SVN_CTYPE_UTF8MBC)
\r
141 /** Check if @a c is valid in UTF-8. */
\r
142 #define svn_ctype_isutf8(c) svn_ctype_test((c), SVN_CTYPE_UTF8)
\r
147 * @defgroup ctype_ascii ASCII character value constants
\r
151 #define SVN_CTYPE_ASCII_MINUS 45 /**< ASCII value of '-' */
\r
152 #define SVN_CTYPE_ASCII_DOT 46 /**< ASCII value of '.' */
\r
153 #define SVN_CTYPE_ASCII_COLON 58 /**< ASCII value of ':' */
\r
154 #define SVN_CTYPE_ASCII_UNDERSCORE 95 /**< ASCII value of '_' */
\r
155 #define SVN_CTYPE_ASCII_TAB 9 /**< ASCII value of a tab */
\r
156 #define SVN_CTYPE_ASCII_LINEFEED 10 /**< ASCII value of a line feed */
\r
157 #define SVN_CTYPE_ASCII_CARRIAGERETURN 13
\r
158 /**< ASCII value of a carriage return */
\r
159 #define SVN_CTYPE_ASCII_DELETE 127
\r
160 /**< ASCII value of a delete character */
\r
166 * @defgroup ctype_case ASCII-subset case folding
\r
171 * Compare two characters @a a and @a b, treating case-equivalent
\r
172 * unaccented Latin (ASCII subset) letters as equal.
\r
174 * Returns in integer greater than, equal to, or less than 0,
\r
175 * according to whether @a a is considered greater than, equal to,
\r
176 * or less than @a b.
\r
178 * @since New in 1.5.
\r
181 svn_ctype_casecmp(int a,
\r
189 #endif /* __cplusplus */
\r
191 #endif /* SVN_CTYPE_H */
\r