OSDN Git Service

Update version number to 1.2.1.0
[tortoisegit/TortoiseGitJp.git] / src / TortoiseMerge / svninclude / svn_ctype.h
1 /**\r
2  * @copyright\r
3  * ====================================================================\r
4  * Copyright (c) 2000-2004, 2008 CollabNet.  All rights reserved.\r
5  *\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
11  *\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
16  * @endcopyright\r
17  *\r
18  * @file svn_ctype.h\r
19  * @brief Character classification routines\r
20  * @since New in 1.2.\r
21  */\r
22 \r
23 \f\r
24 #ifndef SVN_CTYPE_H\r
25 #define SVN_CTYPE_H\r
26 \r
27 #include <apr.h>\r
28 \r
29 \r
30 #ifdef __cplusplus\r
31 extern "C" {\r
32 #endif /* __cplusplus */\r
33 \r
34 \r
35 /** Table of flags for character classification. */\r
36 extern const apr_uint32_t *const svn_ctype_table;\r
37 \r
38 \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
42  */\r
43 #define svn_ctype_test(c, flags) \\r
44   (0 != (svn_ctype_table[(unsigned char)(c)] & (flags)))\r
45 \r
46 \r
47 /**\r
48  * @defgroup ctype_basic Basic character classification - 7-bit ASCII only\r
49  * @{\r
50  */\r
51 \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
61 \r
62 /* Derived character classes */\r
63 /** ASCII letter */\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
73 \r
74 \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
77 \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
80 \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
83 \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
86 \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
89 \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
92 \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
95 \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
98 \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
101 \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
104 \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
107 \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
110 \r
111 /** @} */\r
112 \f\r
113 /**\r
114  * @defgroup ctype_extra Extended character classification\r
115  * @{\r
116  */\r
117 \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
121 /* ### TBD\r
122 #define SVN_CTYPE_XMLNAME  0x0400\r
123 #define SVN_CTYPE_URISAFE  0x0800\r
124 */\r
125 \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
131 \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
134 \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
137 \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
140 \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
143 \r
144 /** @} */\r
145 \r
146 /**\r
147  * @defgroup ctype_ascii ASCII character value constants\r
148  * @{\r
149  */\r
150 \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
161 \r
162 \r
163 /** @} */\r
164 \r
165 /**\r
166  * @defgroup ctype_case ASCII-subset case folding\r
167  * @{\r
168  */\r
169 \r
170 /**\r
171  * Compare two characters @a a and @a b, treating case-equivalent\r
172  * unaccented Latin (ASCII subset) letters as equal.\r
173  *\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
177  *\r
178  * @since New in 1.5.\r
179  */\r
180 int\r
181 svn_ctype_casecmp(int a,\r
182                   int b);\r
183 \r
184 \r
185 /** @} */\r
186 \r
187 #ifdef __cplusplus\r
188 }\r
189 #endif /* __cplusplus */\r
190 \r
191 #endif /* SVN_CTYPE_H */\r