oak_html/kind/
mod.rs

1use oak_core::SyntaxKind;
2use serde::{Deserialize, Serialize};
3
4/// HTML 语法节点类型
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub enum HtmlSyntaxKind {
7    // 标签相关
8    TagOpen,      // <
9    TagClose,     // >
10    TagSlashOpen, // </
11    TagSelfClose, // />
12
13    // 标签名和属性
14    TagName,
15    AttributeName,
16    AttributeValue,
17
18    // 文本内容
19    Text,
20
21    // 注释
22    Comment, // <!-- -->
23
24    // 特殊字符
25    Equal, // =
26    Quote, // " '
27
28    // DOCTYPE
29    Doctype, // <!DOCTYPE html>
30
31    // CDATA
32    CData, // <![CDATA[...]]>
33
34    // 处理指令
35    ProcessingInstruction, // <?xml ... ?>
36
37    // 实体引用
38    EntityRef, // &amp; &lt;
39    CharRef,   // &#123; &#x1A;
40
41    // 空白和换行
42    Whitespace,
43    Newline,
44
45    // 特殊
46    Eof,
47    Error,
48}
49
50impl SyntaxKind for HtmlSyntaxKind {
51    fn is_trivia(&self) -> bool {
52        matches!(self, Self::Whitespace | Self::Comment | Self::Newline)
53    }
54
55    fn is_comment(&self) -> bool {
56        matches!(self, Self::Comment)
57    }
58
59    fn is_whitespace(&self) -> bool {
60        matches!(self, Self::Whitespace | Self::Newline)
61    }
62
63    fn is_token_type(&self) -> bool {
64        !matches!(self, Self::Error)
65    }
66
67    fn is_element_type(&self) -> bool {
68        matches!(self, Self::Error)
69    }
70}