use crate::types::CharClass;
pub const UNDERSCORE: CharClass = CharClass::from_byte(b'_');
pub const DASH: CharClass = CharClass::from_byte(b'-');
pub const DOT: CharClass = CharClass::from_byte(b'.');
pub const PLUS: CharClass = CharClass::from_byte(b'+');
pub const SP: CharClass = CharClass::from_byte(b' ');
pub const TAB: CharClass = CharClass::from_byte(b'\t');
pub const LF: CharClass = CharClass::from_byte(b'\n');
pub const CR: CharClass = CharClass::from_byte(b'\r');
pub const HWS: CharClass = SP.union(TAB);
pub const NEWLINE: CharClass = LF.union(CR);
pub const WS: CharClass = HWS.union(NEWLINE);
pub const DIGIT: CharClass = CharClass::EMPTY.with_range(b'0', b'9');
pub const LOWER: CharClass = CharClass::EMPTY.with_range(b'a', b'z');
pub const UPPER: CharClass = CharClass::EMPTY.with_range(b'A', b'Z');
pub const ALPHA: CharClass = LOWER.union(UPPER);
pub const ALNUM: CharClass = ALPHA.union(DIGIT);
pub const IDENT_START: CharClass = ALPHA.union(UNDERSCORE);
pub const IDENT_CONT: CharClass = ALNUM.union(UNDERSCORE);
pub const HEX_LOWER: CharClass = CharClass::EMPTY.with_range(b'a', b'f');
pub const HEX_UPPER: CharClass = CharClass::EMPTY.with_range(b'A', b'F');
pub const HEX_DIGIT: CharClass = DIGIT.union(HEX_LOWER).union(HEX_UPPER);
pub const OCT_DIGIT: CharClass = CharClass::EMPTY.with_range(b'0', b'7');
pub const BIN_DIGIT: CharClass = CharClass::from_byte(b'0').union(CharClass::from_byte(b'1'));
pub const NOT_LF: CharClass = CharClass::EMPTY
.with_range(0, 9)
.union(CharClass::EMPTY.with_range(11, 255));
pub const NOT_CR: CharClass = CharClass::EMPTY
.with_range(0, 12)
.union(CharClass::EMPTY.with_range(14, 255));
pub const NOT_NEWLINE: CharClass = NOT_LF;