oak_html/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type HtmlToken = Token<HtmlTokenType>;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub enum HtmlTokenType {
10 TagOpen,
11 TagClose,
12 TagSlashOpen,
13 TagSelfClose,
14 TagName,
15 AttributeName,
16 AttributeValue,
17 Attribute,
18 Text,
19 Comment,
20 Equal,
21 Quote,
22 Doctype,
23 CData,
24 ProcessingInstruction,
25 EntityRef,
26 CharRef,
27 Whitespace,
28 Newline,
29 Document,
30 Element,
31 Eof,
32 Error,
33}
34
35impl TokenType for HtmlTokenType {
36 type Role = UniversalTokenRole;
37 const END_OF_STREAM: Self = Self::Eof;
38
39 fn is_ignored(&self) -> bool {
40 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
41 }
42
43 fn role(&self) -> Self::Role {
44 match self {
45 Self::TagOpen | Self::TagClose | Self::TagSlashOpen | Self::TagSelfClose => UniversalTokenRole::Operator,
46 Self::TagName => UniversalTokenRole::Name,
47 Self::AttributeName => UniversalTokenRole::Name,
48 Self::AttributeValue => UniversalTokenRole::Literal,
49 Self::Text => UniversalTokenRole::None,
50 Self::Comment => UniversalTokenRole::Comment,
51 Self::Equal => UniversalTokenRole::Operator,
52 Self::Quote => UniversalTokenRole::Operator,
53 Self::Doctype => UniversalTokenRole::Keyword,
54 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
55 _ => UniversalTokenRole::None,
56 }
57 }
58}