16855e09eSopenharmony_ci//! Character specific parsers and combinators
26855e09eSopenharmony_ci//!
36855e09eSopenharmony_ci//! Functions recognizing specific characters
46855e09eSopenharmony_ci
56855e09eSopenharmony_ci#[cfg(test)]
66855e09eSopenharmony_cimod tests;
76855e09eSopenharmony_ci
86855e09eSopenharmony_cipub mod complete;
96855e09eSopenharmony_cipub mod streaming;
106855e09eSopenharmony_ci
116855e09eSopenharmony_ci/// Tests if byte is ASCII alphabetic: A-Z, a-z
126855e09eSopenharmony_ci///
136855e09eSopenharmony_ci/// # Example
146855e09eSopenharmony_ci///
156855e09eSopenharmony_ci/// ```
166855e09eSopenharmony_ci/// # use nom::character::is_alphabetic;
176855e09eSopenharmony_ci/// assert_eq!(is_alphabetic(b'9'), false);
186855e09eSopenharmony_ci/// assert_eq!(is_alphabetic(b'a'), true);
196855e09eSopenharmony_ci/// ```
206855e09eSopenharmony_ci#[inline]
216855e09eSopenharmony_cipub fn is_alphabetic(chr: u8) -> bool {
226855e09eSopenharmony_ci  (chr >= 0x41 && chr <= 0x5A) || (chr >= 0x61 && chr <= 0x7A)
236855e09eSopenharmony_ci}
246855e09eSopenharmony_ci
256855e09eSopenharmony_ci/// Tests if byte is ASCII digit: 0-9
266855e09eSopenharmony_ci///
276855e09eSopenharmony_ci/// # Example
286855e09eSopenharmony_ci///
296855e09eSopenharmony_ci/// ```
306855e09eSopenharmony_ci/// # use nom::character::is_digit;
316855e09eSopenharmony_ci/// assert_eq!(is_digit(b'a'), false);
326855e09eSopenharmony_ci/// assert_eq!(is_digit(b'9'), true);
336855e09eSopenharmony_ci/// ```
346855e09eSopenharmony_ci#[inline]
356855e09eSopenharmony_cipub fn is_digit(chr: u8) -> bool {
366855e09eSopenharmony_ci  chr >= 0x30 && chr <= 0x39
376855e09eSopenharmony_ci}
386855e09eSopenharmony_ci
396855e09eSopenharmony_ci/// Tests if byte is ASCII hex digit: 0-9, A-F, a-f
406855e09eSopenharmony_ci///
416855e09eSopenharmony_ci/// # Example
426855e09eSopenharmony_ci///
436855e09eSopenharmony_ci/// ```
446855e09eSopenharmony_ci/// # use nom::character::is_hex_digit;
456855e09eSopenharmony_ci/// assert_eq!(is_hex_digit(b'a'), true);
466855e09eSopenharmony_ci/// assert_eq!(is_hex_digit(b'9'), true);
476855e09eSopenharmony_ci/// assert_eq!(is_hex_digit(b'A'), true);
486855e09eSopenharmony_ci/// assert_eq!(is_hex_digit(b'x'), false);
496855e09eSopenharmony_ci/// ```
506855e09eSopenharmony_ci#[inline]
516855e09eSopenharmony_cipub fn is_hex_digit(chr: u8) -> bool {
526855e09eSopenharmony_ci  (chr >= 0x30 && chr <= 0x39) || (chr >= 0x41 && chr <= 0x46) || (chr >= 0x61 && chr <= 0x66)
536855e09eSopenharmony_ci}
546855e09eSopenharmony_ci
556855e09eSopenharmony_ci/// Tests if byte is ASCII octal digit: 0-7
566855e09eSopenharmony_ci///
576855e09eSopenharmony_ci/// # Example
586855e09eSopenharmony_ci///
596855e09eSopenharmony_ci/// ```
606855e09eSopenharmony_ci/// # use nom::character::is_oct_digit;
616855e09eSopenharmony_ci/// assert_eq!(is_oct_digit(b'a'), false);
626855e09eSopenharmony_ci/// assert_eq!(is_oct_digit(b'9'), false);
636855e09eSopenharmony_ci/// assert_eq!(is_oct_digit(b'6'), true);
646855e09eSopenharmony_ci/// ```
656855e09eSopenharmony_ci#[inline]
666855e09eSopenharmony_cipub fn is_oct_digit(chr: u8) -> bool {
676855e09eSopenharmony_ci  chr >= 0x30 && chr <= 0x37
686855e09eSopenharmony_ci}
696855e09eSopenharmony_ci
706855e09eSopenharmony_ci/// Tests if byte is ASCII alphanumeric: A-Z, a-z, 0-9
716855e09eSopenharmony_ci///
726855e09eSopenharmony_ci/// # Example
736855e09eSopenharmony_ci///
746855e09eSopenharmony_ci/// ```
756855e09eSopenharmony_ci/// # use nom::character::is_alphanumeric;
766855e09eSopenharmony_ci/// assert_eq!(is_alphanumeric(b'-'), false);
776855e09eSopenharmony_ci/// assert_eq!(is_alphanumeric(b'a'), true);
786855e09eSopenharmony_ci/// assert_eq!(is_alphanumeric(b'9'), true);
796855e09eSopenharmony_ci/// assert_eq!(is_alphanumeric(b'A'), true);
806855e09eSopenharmony_ci/// ```
816855e09eSopenharmony_ci#[inline]
826855e09eSopenharmony_cipub fn is_alphanumeric(chr: u8) -> bool {
836855e09eSopenharmony_ci  is_alphabetic(chr) || is_digit(chr)
846855e09eSopenharmony_ci}
856855e09eSopenharmony_ci
866855e09eSopenharmony_ci/// Tests if byte is ASCII space or tab
876855e09eSopenharmony_ci///
886855e09eSopenharmony_ci/// # Example
896855e09eSopenharmony_ci///
906855e09eSopenharmony_ci/// ```
916855e09eSopenharmony_ci/// # use nom::character::is_space;
926855e09eSopenharmony_ci/// assert_eq!(is_space(b'\n'), false);
936855e09eSopenharmony_ci/// assert_eq!(is_space(b'\r'), false);
946855e09eSopenharmony_ci/// assert_eq!(is_space(b' '), true);
956855e09eSopenharmony_ci/// assert_eq!(is_space(b'\t'), true);
966855e09eSopenharmony_ci/// ```
976855e09eSopenharmony_ci#[inline]
986855e09eSopenharmony_cipub fn is_space(chr: u8) -> bool {
996855e09eSopenharmony_ci  chr == b' ' || chr == b'\t'
1006855e09eSopenharmony_ci}
1016855e09eSopenharmony_ci
1026855e09eSopenharmony_ci/// Tests if byte is ASCII newline: \n
1036855e09eSopenharmony_ci///
1046855e09eSopenharmony_ci/// # Example
1056855e09eSopenharmony_ci///
1066855e09eSopenharmony_ci/// ```
1076855e09eSopenharmony_ci/// # use nom::character::is_newline;
1086855e09eSopenharmony_ci/// assert_eq!(is_newline(b'\n'), true);
1096855e09eSopenharmony_ci/// assert_eq!(is_newline(b'\r'), false);
1106855e09eSopenharmony_ci/// assert_eq!(is_newline(b' '), false);
1116855e09eSopenharmony_ci/// assert_eq!(is_newline(b'\t'), false);
1126855e09eSopenharmony_ci/// ```
1136855e09eSopenharmony_ci#[inline]
1146855e09eSopenharmony_cipub fn is_newline(chr: u8) -> bool {
1156855e09eSopenharmony_ci  chr == b'\n'
1166855e09eSopenharmony_ci}
117