oak_html/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
2
3pub type HtmlToken = Token<HtmlTokenType>;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub enum HtmlTokenType {
10 TagOpen,
12 TagClose,
14 TagSlashOpen,
16 TagSelfClose,
18 TagName,
20 AttributeName,
22 AttributeValue,
24 Attribute,
26 Text,
28 Comment,
30 Equal,
32 Quote,
34 Doctype,
36 CData,
38 ProcessingInstruction,
40 EntityRef,
42 CharRef,
44 Whitespace,
46 Newline,
48 Document,
50 Element,
52 Eof,
54 Error,
56}
57
58impl TokenType for HtmlTokenType {
59 type Role = UniversalTokenRole;
60 const END_OF_STREAM: Self = Self::Eof;
61
62 fn is_ignored(&self) -> bool {
63 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
64 }
65
66 fn role(&self) -> Self::Role {
67 match self {
68 Self::TagOpen | Self::TagClose | Self::TagSlashOpen | Self::TagSelfClose => UniversalTokenRole::Operator,
69 Self::TagName => UniversalTokenRole::Name,
70 Self::AttributeName => UniversalTokenRole::Name,
71 Self::AttributeValue => UniversalTokenRole::Literal,
72 Self::Text => UniversalTokenRole::None,
73 Self::Comment => UniversalTokenRole::Comment,
74 Self::Equal => UniversalTokenRole::Operator,
75 Self::Quote => UniversalTokenRole::Operator,
76 Self::Doctype => UniversalTokenRole::Keyword,
77 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
78 _ => UniversalTokenRole::None,
79 }
80 }
81}