// This file is part of ICU4X. For terms of use, please see the file // called LICENSE at the top level of the ICU4X source tree // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). //! ISO8601 specific grammar checks. /// Checks if ascii char is a `AKeyLeadingChar`. #[inline] pub(crate) const fn is_a_key_leading_char(ch: u8) -> bool { ch.is_ascii_lowercase() || ch == b'_' } /// Checks if ascii char is an `AKeyChar`. #[inline] pub(crate) const fn is_a_key_char(ch: u8) -> bool { is_a_key_leading_char(ch) || ch.is_ascii_digit() || ch == b'-' } /// Checks if ascii char is an `AnnotationValueComponent`. pub(crate) const fn is_annotation_value_component(ch: u8) -> bool { ch.is_ascii_digit() || ch.is_ascii_alphabetic() } /// Checks if ascii char is a `TZLeadingChar`. #[inline] pub(crate) const fn is_tz_leading_char(ch: u8) -> bool { ch.is_ascii_alphabetic() || ch == b'_' || ch == b'.' } /// Checks if ascii char is a `TZChar`. #[inline] pub(crate) const fn is_tz_char(ch: u8) -> bool { is_tz_leading_char(ch) || ch.is_ascii_digit() || ch == b'-' || ch == b'+' } /// Checks if ascii char is a `TimeZoneIANAName` Separator. #[inline] pub(crate) const fn is_tz_name_separator(ch: u8) -> bool { ch == b'/' } /// Checks if ascii char is an ascii sign. #[inline] pub(crate) const fn is_ascii_sign(ch: u8) -> bool { ch == b'+' || ch == b'-' } /// Checks if ascii char is a `TimeSeparator`. #[inline] pub(crate) const fn is_time_separator(ch: u8) -> bool { ch == b':' } /// Checks if ascii char is a `TimeDesignator`. #[inline] pub(crate) const fn is_time_designator(ch: u8) -> bool { ch == b'T' || ch == b't' } #[inline] /// Checks if ascii char is a space. pub(crate) const fn is_space(ch: u8) -> bool { ch == b' ' } /// Checks if ascii char is a `DateTimeSeparator`. #[inline] pub(crate) const fn is_date_time_separator(ch: u8) -> bool { is_time_designator(ch) || is_space(ch) } /// Checks if ascii char is a `UtcDesignator`. #[inline] pub(crate) const fn is_utc_designator(ch: u8) -> bool { ch == b'Z' || ch == b'z' } /// Checks if ascii char is a `DurationDesignator`. #[inline] #[cfg(feature = "duration")] pub(crate) const fn is_duration_designator(ch: u8) -> bool { ch == b'P' || ch == b'p' } /// Checks if ascii char is a `YearDesignator`. #[inline] #[cfg(feature = "duration")] pub(crate) const fn is_year_designator(ch: u8) -> bool { ch == b'Y' || ch == b'y' } /// Checks if ascii char is a `MonthsDesignator`. #[inline] #[cfg(feature = "duration")] pub(crate) const fn is_month_designator(ch: u8) -> bool { ch == b'M' || ch == b'm' } /// Checks if ascii char is a `WeekDesignator`. #[inline] #[cfg(feature = "duration")] pub(crate) const fn is_week_designator(ch: u8) -> bool { ch == b'W' || ch == b'w' } /// Checks if ascii char is a `DayDesignator`. #[inline] #[cfg(feature = "duration")] pub(crate) const fn is_day_designator(ch: u8) -> bool { ch == b'D' || ch == b'd' } /// checks if ascii char is a `DayDesignator`. #[inline] #[cfg(feature = "duration")] pub(crate) const fn is_hour_designator(ch: u8) -> bool { ch == b'H' || ch == b'h' } /// Checks if ascii char is a `MinuteDesignator`. #[inline] #[cfg(feature = "duration")] pub(crate) const fn is_minute_designator(ch: u8) -> bool { is_month_designator(ch) } /// checks if ascii char is a `SecondDesignator`. #[inline] #[cfg(feature = "duration")] pub(crate) const fn is_second_designator(ch: u8) -> bool { ch == b'S' || ch == b's' } /// Checks if ascii char is a `DecimalSeparator`. #[inline] pub(crate) const fn is_decimal_separator(ch: u8) -> bool { ch == b'.' || ch == b',' } /// Checks if ascii char is an `AnnotationOpen`. #[inline] pub(crate) const fn is_annotation_open(ch: u8) -> bool { ch == b'[' } /// Checks if ascii char is an `AnnotationClose`. #[inline] pub(crate) const fn is_annotation_close(ch: u8) -> bool { ch == b']' } /// Checks if ascii char is an `CriticalFlag`. #[inline] pub(crate) const fn is_critical_flag(ch: u8) -> bool { ch == b'!' } /// Checks if ascii char is the `AnnotationKeyValueSeparator`. #[inline] pub(crate) const fn is_annotation_key_value_separator(ch: u8) -> bool { ch == b'=' } /// Checks if ascii char is a hyphen. Hyphens are used as a Date separator /// and as a `AttributeValueComponent` separator. #[inline] pub(crate) const fn is_hyphen(ch: u8) -> bool { ch == b'-' }