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