use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum TokenKind {
Identifier,
LeftBrace, RightBrace, LeftBracket, RightBracket, LeftParen, RightParen,
Colon, Semicolon, Comma, Dot, Hash, GreaterThan, LessThan, Plus, Tilde, Asterisk, Ampersand, AtSign, Slash, Equals, Percent, Caret, Question, Dollar, Pipe, ColumnCombinator, Bang,
String { quote: char }, Number, Percentage, Dimension { unit_len: u8 }, Url,
Comment,
Whitespace,
Eof,
}
impl fmt::Display for TokenKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TokenKind::Identifier => write!(f, "identifier"),
TokenKind::LeftBrace => write!(f, "'{{'"),
TokenKind::RightBrace => write!(f, "'}}'"),
TokenKind::LeftBracket => write!(f, "'['"),
TokenKind::RightBracket => write!(f, "']'"),
TokenKind::LeftParen => write!(f, "'('"),
TokenKind::RightParen => write!(f, "')'"),
TokenKind::Colon => write!(f, "':'"),
TokenKind::Semicolon => write!(f, "';'"),
TokenKind::Comma => write!(f, "','"),
TokenKind::Dot => write!(f, "'.'"),
TokenKind::Hash => write!(f, "'#'"),
TokenKind::GreaterThan => write!(f, "'>'"),
TokenKind::LessThan => write!(f, "'<'"),
TokenKind::Plus => write!(f, "'+'"),
TokenKind::Tilde => write!(f, "'~'"),
TokenKind::Asterisk => write!(f, "'*'"),
TokenKind::Ampersand => write!(f, "'&'"),
TokenKind::AtSign => write!(f, "'@'"),
TokenKind::Slash => write!(f, "'/'"),
TokenKind::Equals => write!(f, "'='"),
TokenKind::Percent => write!(f, "'%'"),
TokenKind::Caret => write!(f, "'^'"),
TokenKind::Question => write!(f, "'?'"),
TokenKind::Dollar => write!(f, "'$'"),
TokenKind::Pipe => write!(f, "'|'"),
TokenKind::ColumnCombinator => write!(f, "'||'"),
TokenKind::Bang => write!(f, "'!'"),
TokenKind::String { .. } => write!(f, "string"),
TokenKind::Number => write!(f, "number"),
TokenKind::Percentage => write!(f, "percentage"),
TokenKind::Dimension { .. } => write!(f, "dimension"),
TokenKind::Url => write!(f, "url"),
TokenKind::Comment => write!(f, "comment"),
TokenKind::Whitespace => write!(f, "whitespace"),
TokenKind::Eof => write!(f, "end of input"),
}
}
}
#[derive(Debug, Clone)]
pub(crate) struct Token {
pub kind: TokenKind,
pub start: u32,
pub end: u32,
}
#[cfg(test)]
const _: () = assert!(size_of::<Token>() == 16);