1//! Character specific parsers and combinators
2//!
3//! Functions recognizing specific characters
4
5#[cfg(test)]
6mod tests;
7
8pub mod complete;
9pub mod streaming;
10
11/// Tests if byte is ASCII alphabetic: A-Z, a-z
12///
13/// # Example
14///
15/// ```
16/// # use nom::character::is_alphabetic;
17/// assert_eq!(is_alphabetic(b'9'), false);
18/// assert_eq!(is_alphabetic(b'a'), true);
19/// ```
20#[inline]
21pub fn is_alphabetic(chr: u8) -> bool {
22 (chr >= 0x41 && chr <= 0x5A) || (chr >= 0x61 && chr <= 0x7A)
23}
24
25/// Tests if byte is ASCII digit: 0-9
26///
27/// # Example
28///
29/// ```
30/// # use nom::character::is_digit;
31/// assert_eq!(is_digit(b'a'), false);
32/// assert_eq!(is_digit(b'9'), true);
33/// ```
34#[inline]
35pub fn is_digit(chr: u8) -> bool {
36 chr >= 0x30 && chr <= 0x39
37}
38
39/// Tests if byte is ASCII hex digit: 0-9, A-F, a-f
40///
41/// # Example
42///
43/// ```
44/// # use nom::character::is_hex_digit;
45/// assert_eq!(is_hex_digit(b'a'), true);
46/// assert_eq!(is_hex_digit(b'9'), true);
47/// assert_eq!(is_hex_digit(b'A'), true);
48/// assert_eq!(is_hex_digit(b'x'), false);
49/// ```
50#[inline]
51pub fn is_hex_digit(chr: u8) -> bool {
52 (chr >= 0x30 && chr <= 0x39) || (chr >= 0x41 && chr <= 0x46) || (chr >= 0x61 && chr <= 0x66)
53}
54
55/// Tests if byte is ASCII octal digit: 0-7
56///
57/// # Example
58///
59/// ```
60/// # use nom::character::is_oct_digit;
61/// assert_eq!(is_oct_digit(b'a'), false);
62/// assert_eq!(is_oct_digit(b'9'), false);
63/// assert_eq!(is_oct_digit(b'6'), true);
64/// ```
65#[inline]
66pub fn is_oct_digit(chr: u8) -> bool {
67 chr >= 0x30 && chr <= 0x37
68}
69
70/// Tests if byte is ASCII alphanumeric: A-Z, a-z, 0-9
71///
72/// # Example
73///
74/// ```
75/// # use nom::character::is_alphanumeric;
76/// assert_eq!(is_alphanumeric(b'-'), false);
77/// assert_eq!(is_alphanumeric(b'a'), true);
78/// assert_eq!(is_alphanumeric(b'9'), true);
79/// assert_eq!(is_alphanumeric(b'A'), true);
80/// ```
81#[inline]
82pub fn is_alphanumeric(chr: u8) -> bool {
83 is_alphabetic(chr) || is_digit(chr)
84}
85
86/// Tests if byte is ASCII space or tab
87///
88/// # Example
89///
90/// ```
91/// # use nom::character::is_space;
92/// assert_eq!(is_space(b'\n'), false);
93/// assert_eq!(is_space(b'\r'), false);
94/// assert_eq!(is_space(b' '), true);
95/// assert_eq!(is_space(b'\t'), true);
96/// ```
97#[inline]
98pub fn is_space(chr: u8) -> bool {
99 chr == b' ' || chr == b'\t'
100}
101
102/// Tests if byte is ASCII newline: \n
103///
104/// # Example
105///
106/// ```
107/// # use nom::character::is_newline;
108/// assert_eq!(is_newline(b'\n'), true);
109/// assert_eq!(is_newline(b'\r'), false);
110/// assert_eq!(is_newline(b' '), false);
111/// assert_eq!(is_newline(b'\t'), false);
112/// ```
113#[inline]
114pub fn is_newline(chr: u8) -> bool {
115 chr == b'\n'
116}
117