pub enum Unicode {}
impl Unicode {
pub const MAX_CODE_POINT: u32 = 0x10ffff;
pub const REPLACEMENT_CHARACTER: char = '\u{fffd}';
pub const BOM: char = '\u{feff}';
pub const ASCII_MAX: u32 = 0x7f;
pub const LATIN1_MAX: u32 = 0xff;
pub const SUPPLEMENTARY_MIN: u32 = 0x10000;
pub const HIGH_SURROGATE_MIN: u32 = 0xd800;
pub const HIGH_SURROGATE_MAX: u32 = 0xdbff;
pub const LOW_SURROGATE_MIN: u32 = 0xdc00;
pub const LOW_SURROGATE_MAX: u32 = 0xdfff;
pub const SURROGATE_MIN: u32 = Self::HIGH_SURROGATE_MIN;
pub const SURROGATE_MAX: u32 = Self::LOW_SURROGATE_MAX;
#[inline]
pub const fn is_code_point(value: u32) -> bool {
value <= Self::MAX_CODE_POINT
}
#[inline]
pub const fn is_scalar_value(value: u32) -> bool {
Self::is_code_point(value) && !Self::is_surrogate(value)
}
#[inline]
pub const fn is_surrogate(value: u32) -> bool {
value >= Self::SURROGATE_MIN && value <= Self::SURROGATE_MAX
}
#[inline]
pub const fn is_high_surrogate(value: u32) -> bool {
value >= Self::HIGH_SURROGATE_MIN && value <= Self::HIGH_SURROGATE_MAX
}
#[inline]
pub const fn is_low_surrogate(value: u32) -> bool {
value >= Self::LOW_SURROGATE_MIN && value <= Self::LOW_SURROGATE_MAX
}
#[inline]
pub const fn is_bmp(value: u32) -> bool {
value < Self::SUPPLEMENTARY_MIN
}
#[inline]
pub const fn is_supplementary(value: u32) -> bool {
value >= Self::SUPPLEMENTARY_MIN && value <= Self::MAX_CODE_POINT
}
#[inline]
pub const fn is_ascii(value: u32) -> bool {
value <= Self::ASCII_MAX
}
#[inline]
pub const fn is_noncharacter(value: u32) -> bool {
Self::is_code_point(value) && ((value >= 0xfdd0 && value <= 0xfdef) || (value & 0xfffe) == 0xfffe)
}
#[inline]
pub const fn is_control(value: u32) -> bool {
value <= 0x1f || (value >= 0x7f && value <= 0x9f)
}
#[inline]
pub const fn plane(value: u32) -> Option<u32> {
if Self::is_code_point(value) {
Some(value >> 16)
} else {
None
}
}
#[inline]
pub fn to_char(value: u32) -> Option<char> {
char::from_u32(value)
}
}