1#[cfg(feature = "serde-impl")]
2use serde::{Deserialize, Serialize};
3use swc_atoms::Atom;
4use swc_common::{ast_node, EqIgnoreSpan, Span};
5
6#[ast_node("TokenAndSpan")]
7#[derive(Eq, Hash, EqIgnoreSpan)]
8pub struct TokenAndSpan {
9 pub span: Span,
10 pub token: Token,
11}
12
13#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, EqIgnoreSpan)]
14#[cfg_attr(feature = "serde-impl", derive(Serialize, Deserialize))]
15pub struct AttributeToken {
16 pub span: Span,
17 pub name: Atom,
18 pub raw_name: Option<Atom>,
19 pub value: Option<Atom>,
20 pub raw_value: Option<Atom>,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Hash, EqIgnoreSpan)]
24#[cfg_attr(feature = "serde-impl", derive(Serialize, Deserialize))]
25pub enum Token {
26 Doctype {
27 name: Option<Atom>,
29 public_id: Option<Atom>,
31 system_id: Option<Atom>,
33 raw: Option<Atom>,
35 },
36 StartTag {
37 tag_name: Atom,
38 attributes: Vec<AttributeToken>,
39 },
40 EndTag {
41 tag_name: Atom,
42 attributes: Vec<AttributeToken>,
43 },
44 EmptyTag {
45 tag_name: Atom,
46 attributes: Vec<AttributeToken>,
47 },
48 Comment {
49 data: Atom,
50 raw: Atom,
51 },
52 Character {
53 value: char,
54 raw: Option<Atom>,
55 },
56 ProcessingInstruction {
57 target: Atom,
58 data: Atom,
59 },
60 Cdata {
61 data: Atom,
62 raw: Atom,
63 },
64 Eof,
65}