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: Option<Atom>,
58 force_quirks: bool,
60
61 public_id: Option<Atom>,
63
64 system_id: Option<Atom>,
66 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}