swc_html_ast/
token.rs

1use swc_atoms::Atom;
2use swc_common::{ast_node, EqIgnoreSpan, Span};
3
4#[ast_node("TokenAndSpan")]
5#[derive(Eq, Hash, EqIgnoreSpan)]
6pub struct TokenAndSpan {
7    pub span: Span,
8    pub token: Token,
9}
10
11#[ast_node]
12#[derive(Eq, PartialOrd, Ord, Hash, EqIgnoreSpan)]
13pub struct AttributeToken {
14    pub span: Span,
15
16    pub name: Atom,
17    pub raw_name: Option<Atom>,
18
19    pub value: Option<Atom>,
20    pub raw_value: Option<Atom>,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Hash, EqIgnoreSpan)]
24#[cfg_attr(
25    feature = "rkyv",
26    derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
27)]
28#[cfg_attr(
29    feature = "rkyv",
30    rkyv(serialize_bounds(__S: rkyv::ser::Writer + rkyv::ser::Allocator,
31        __S::Error: rkyv::rancor::Source))
32)]
33#[cfg_attr(feature = "rkyv", derive(bytecheck::CheckBytes))]
34#[cfg_attr(feature = "rkyv", repr(u32))]
35#[cfg_attr(feature = "serde-impl", derive(serde::Serialize, serde::Deserialize))]
36pub enum Raw {
37    Same,
38    Atom(Atom),
39}
40
41#[derive(Debug, Clone, PartialEq, Eq, Hash, EqIgnoreSpan)]
42#[cfg_attr(
43    feature = "rkyv",
44    derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
45)]
46#[cfg_attr(
47    feature = "rkyv",
48    rkyv(serialize_bounds(__S: rkyv::ser::Writer + rkyv::ser::Allocator,
49        __S::Error: rkyv::rancor::Source))
50)]
51#[cfg_attr(feature = "rkyv", derive(bytecheck::CheckBytes))]
52#[cfg_attr(feature = "rkyv", repr(u32))]
53#[cfg_attr(feature = "serde-impl", derive(serde::Serialize, serde::Deserialize))]
54pub enum Token {
55    Doctype {
56        // Name
57        name: Option<Atom>,
58        // Is force quirks?
59        force_quirks: bool,
60
61        // Public identifier
62        public_id: Option<Atom>,
63
64        // System identifier
65        system_id: Option<Atom>,
66        // Raw value
67        raw: Option<Atom>,
68    },
69    StartTag {
70        tag_name: Atom,
71        raw_tag_name: Option<Atom>,
72        is_self_closing: bool,
73        attributes: Vec<AttributeToken>,
74    },
75    EndTag {
76        tag_name: Atom,
77        raw_tag_name: Option<Atom>,
78        is_self_closing: bool,
79        attributes: Vec<AttributeToken>,
80    },
81    Comment {
82        data: Atom,
83        raw: Option<Atom>,
84    },
85    Character {
86        value: char,
87        raw: Option<Raw>,
88    },
89    Eof,
90}