Skip to main content

oak_css/lexer/
token_type.rs

1use oak_core::{TokenType, UniversalTokenRole};
2use serde::{Deserialize, Serialize};
3
4/// CSS token type
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
6pub enum CssTokenType {
7    /// Whitespace
8    Whitespace,
9    /// Newline
10    Newline,
11    /// Comment
12    Comment,
13
14    /// String literal
15    StringLiteral,
16    /// Number literal
17    NumberLiteral,
18    /// Color literal
19    ColorLiteral,
20    /// Url literal
21    UrlLiteral,
22
23    /// Identifier
24    Identifier,
25    /// Class name
26    ClassName,
27    /// Id selector
28    IdSelector,
29    /// Tag name
30    TagName,
31    /// Pseudo class
32    PseudoClass,
33    /// Pseudo element
34    PseudoElement,
35    /// Attribute name
36    AttributeName,
37    /// Property name
38    PropertyName,
39    /// Function name
40    FunctionName,
41
42    /// !important
43    Important,
44    /// inherit
45    Inherit,
46    /// initial
47    Initial,
48    /// unset
49    Unset,
50    /// auto
51    Auto,
52    /// none
53    None,
54    /// normal
55    Normal,
56
57    /// px
58    Px,
59    /// em
60    Em,
61    /// rem
62    Rem,
63    /// %
64    Percent,
65    /// vh
66    Vh,
67    /// vw
68    Vw,
69    /// pt
70    Pt,
71    /// cm
72    Cm,
73    /// mm
74    Mm,
75    /// in
76    In,
77    /// pc
78    Pc,
79    /// ex
80    Ex,
81    /// ch
82    Ch,
83    /// vmin
84    Vmin,
85    /// vmax
86    Vmax,
87
88    /// :
89    Colon,
90    /// ;
91    Semicolon,
92    /// ,
93    Comma,
94    /// .
95    Dot,
96    /// #
97    Hash,
98    /// +
99    Plus,
100    /// -
101    Minus,
102    /// *
103    Star,
104    /// /
105    Slash,
106    /// =
107    Equals,
108    /// ~
109    Tilde,
110    /// |
111    Pipe,
112    /// ^
113    Caret,
114    /// $
115    Dollar,
116    /// >
117    GreaterThan,
118
119    /// (
120    LeftParen,
121    /// )
122    RightParen,
123    /// {
124    LeftBrace,
125    /// }
126    RightBrace,
127    /// [
128    LeftBracket,
129    /// ]
130    RightBracket,
131
132    /// @import
133    AtImport,
134    /// @media
135    AtMedia,
136    /// @keyframes
137    AtKeyframes,
138    /// @font-face
139    AtFontFace,
140    /// @charset
141    AtCharset,
142    /// @namespace
143    AtNamespace,
144    /// @supports
145    AtSupports,
146    /// @page
147    AtPage,
148    /// @document
149    AtDocument,
150    /// Generic @-rule
151    AtRule,
152
153    /// End of file
154    Eof,
155    /// Error
156    Error,
157}
158
159impl TokenType for CssTokenType {
160    const END_OF_STREAM: Self = Self::Eof;
161    type Role = UniversalTokenRole;
162
163    fn is_ignored(&self) -> bool {
164        matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
165    }
166
167    fn is_comment(&self) -> bool {
168        matches!(self, Self::Comment)
169    }
170
171    fn is_whitespace(&self) -> bool {
172        matches!(self, Self::Whitespace | Self::Newline)
173    }
174
175    fn role(&self) -> Self::Role {
176        match self {
177            Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
178            Self::Comment => UniversalTokenRole::Comment,
179            Self::StringLiteral | Self::NumberLiteral | Self::ColorLiteral | Self::UrlLiteral => UniversalTokenRole::Literal,
180            Self::Identifier | Self::ClassName | Self::IdSelector | Self::TagName | Self::PseudoClass | Self::PseudoElement | Self::AttributeName | Self::PropertyName | Self::FunctionName => UniversalTokenRole::Name,
181            Self::Important
182            | Self::Inherit
183            | Self::Initial
184            | Self::Unset
185            | Self::Auto
186            | Self::None
187            | Self::Normal
188            | Self::AtImport
189            | Self::AtMedia
190            | Self::AtKeyframes
191            | Self::AtFontFace
192            | Self::AtCharset
193            | Self::AtNamespace
194            | Self::AtSupports
195            | Self::AtPage
196            | Self::AtDocument => UniversalTokenRole::Keyword,
197            Self::Colon | Self::Semicolon | Self::Comma | Self::Dot | Self::Hash | Self::Plus | Self::Minus | Self::Star | Self::Slash | Self::Equals | Self::Tilde | Self::Pipe | Self::Caret | Self::Dollar | Self::GreaterThan => {
198                UniversalTokenRole::Operator
199            }
200            Self::LeftParen | Self::RightParen | Self::LeftBrace | Self::RightBrace | Self::LeftBracket | Self::RightBracket => UniversalTokenRole::Punctuation,
201            Self::Eof => UniversalTokenRole::Eof,
202            Self::Error => UniversalTokenRole::Error,
203            _ => UniversalTokenRole::None,
204        }
205    }
206}