1+ /*
2+ WCharacter.h - Character utility functions for Wiring & Arduino
3+ Copyright (c) 2010 Hernando Barragan. All right reserved.
4+
5+ This library is free software; you can redistribute it and/or
6+ modify it under the terms of the GNU Lesser General Public
7+ License as published by the Free Software Foundation; either
8+ version 2.1 of the License, or (at your option) any later version.
9+
10+ This library is distributed in the hope that it will be useful,
11+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13+ Lesser General Public License for more details.
14+
15+ You should have received a copy of the GNU Lesser General Public
16+ License along with this library; if not, write to the Free Software
17+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18+ */
19+
20+ #ifndef Character_h
21+ #define Character_h
22+
23+ #include <ctype.h>
24+
25+ // WCharacter.h prototypes
26+ inline boolean isAlphaNumeric (int c ) __attribute__((always_inline ));
27+ inline boolean isAlpha (int c ) __attribute__((always_inline ));
28+ inline boolean isAscii (int c ) __attribute__((always_inline ));
29+ inline boolean isWhitespace (int c ) __attribute__((always_inline ));
30+ inline boolean isControl (int c ) __attribute__((always_inline ));
31+ inline boolean isDigit (int c ) __attribute__((always_inline ));
32+ inline boolean isGraph (int c ) __attribute__((always_inline ));
33+ inline boolean isLowerCase (int c ) __attribute__((always_inline ));
34+ inline boolean isPrintable (int c ) __attribute__((always_inline ));
35+ inline boolean isPunct (int c ) __attribute__((always_inline ));
36+ inline boolean isSpace (int c ) __attribute__((always_inline ));
37+ inline boolean isUpperCase (int c ) __attribute__((always_inline ));
38+ inline boolean isHexadecimalDigit (int c ) __attribute__((always_inline ));
39+ inline int toAscii (int c ) __attribute__((always_inline ));
40+ inline int toLowerCase (int c ) __attribute__((always_inline ));
41+ inline int toUpperCase (int c )__attribute__((always_inline ));
42+
43+
44+ // Checks for an alphanumeric character.
45+ // It is equivalent to (isalpha(c) || isdigit(c)).
46+ inline boolean isAlphaNumeric (int c )
47+ {
48+ return ( isalnum (c ) == 0 ? false : true);
49+ }
50+
51+
52+ // Checks for an alphabetic character.
53+ // It is equivalent to (isupper(c) || islower(c)).
54+ inline boolean isAlpha (int c )
55+ {
56+ return ( isalpha (c ) == 0 ? false : true);
57+ }
58+
59+
60+ // Checks whether c is a 7-bit unsigned char value
61+ // that fits into the ASCII character set.
62+ inline boolean isAscii (int c )
63+ {
64+ return ( isascii (c ) == 0 ? false : true);
65+ }
66+
67+
68+ // Checks for a blank character, that is, a space or a tab.
69+ inline boolean isWhitespace (int c )
70+ {
71+ return ( isblank (c ) == 0 ? false : true);
72+ }
73+
74+
75+ // Checks for a control character.
76+ inline boolean isControl (int c )
77+ {
78+ return ( iscntrl (c ) == 0 ? false : true);
79+ }
80+
81+
82+ // Checks for a digit (0 through 9).
83+ inline boolean isDigit (int c )
84+ {
85+ return ( isdigit (c ) == 0 ? false : true);
86+ }
87+
88+
89+ // Checks for any printable character except space.
90+ inline boolean isGraph (int c )
91+ {
92+ return ( isgraph (c ) == 0 ? false : true);
93+ }
94+
95+
96+ // Checks for a lower-case character.
97+ inline boolean isLowerCase (int c )
98+ {
99+ return (islower (c ) == 0 ? false : true);
100+ }
101+
102+
103+ // Checks for any printable character including space.
104+ inline boolean isPrintable (int c )
105+ {
106+ return ( isprint (c ) == 0 ? false : true);
107+ }
108+
109+
110+ // Checks for any printable character which is not a space
111+ // or an alphanumeric character.
112+ inline boolean isPunct (int c )
113+ {
114+ return ( ispunct (c ) == 0 ? false : true);
115+ }
116+
117+
118+ // Checks for white-space characters. For the avr-libc library,
119+ // these are: space, formfeed ('\f'), newline ('\n'), carriage
120+ // return ('\r'), horizontal tab ('\t'), and vertical tab ('\v').
121+ inline boolean isSpace (int c )
122+ {
123+ return ( isspace (c ) == 0 ? false : true);
124+ }
125+
126+
127+ // Checks for an uppercase letter.
128+ inline boolean isUpperCase (int c )
129+ {
130+ return ( isupper (c ) == 0 ? false : true);
131+ }
132+
133+
134+ // Checks for a hexadecimal digits, i.e. one of 0 1 2 3 4 5 6 7
135+ // 8 9 a b c d e f A B C D E F.
136+ inline boolean isHexadecimalDigit (int c )
137+ {
138+ return ( isxdigit (c ) == 0 ? false : true);
139+ }
140+
141+
142+ // Converts c to a 7-bit unsigned char value that fits into the
143+ // ASCII character set, by clearing the high-order bits.
144+ inline int toAscii (int c )
145+ {
146+ return toascii (c );
147+ }
148+
149+
150+ // Warning:
151+ // Many people will be unhappy if you use this function.
152+ // This function will convert accented letters into random
153+ // characters.
154+
155+ // Converts the letter c to lower case, if possible.
156+ inline int toLowerCase (int c )
157+ {
158+ return tolower (c );
159+ }
160+
161+
162+ // Converts the letter c to upper case, if possible.
163+ inline int toUpperCase (int c )
164+ {
165+ return toupper (c );
166+ }
167+
168+ #endif
0 commit comments