mirror of
https://github.com/swc-project/swc.git
synced 2024-12-18 03:01:48 +03:00
feat(html/ast): Add raw
to doctype (#5198)
This commit is contained in:
parent
71ea5d25e4
commit
945510a695
@ -48,6 +48,7 @@ pub struct DocumentType {
|
||||
pub name: Option<JsWord>,
|
||||
pub public_id: Option<JsWord>,
|
||||
pub system_id: Option<JsWord>,
|
||||
pub raw: Option<JsWord>,
|
||||
}
|
||||
|
||||
#[derive(StringEnum, Clone, Copy, Eq, PartialEq, PartialOrd, Ord, Hash, EqIgnoreSpan)]
|
||||
|
@ -23,29 +23,16 @@ pub struct AttributeToken {
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, EqIgnoreSpan)]
|
||||
pub enum Token {
|
||||
Doctype {
|
||||
// DOCTYPE keyword
|
||||
raw_keyword: Option<JsWord>,
|
||||
|
||||
// Name
|
||||
name: Option<JsWord>,
|
||||
raw_name: Option<JsWord>,
|
||||
|
||||
// Is force quirks?
|
||||
force_quirks: bool,
|
||||
|
||||
// PUBLIC keyword
|
||||
raw_public_keyword: Option<JsWord>,
|
||||
// Quotes around public identifier
|
||||
public_quote: Option<char>,
|
||||
// Public identifier
|
||||
public_id: Option<JsWord>,
|
||||
|
||||
// SYSTEM keyword
|
||||
raw_system_keyword: Option<JsWord>,
|
||||
// Quotes around system identifier
|
||||
system_quote: Option<char>,
|
||||
// System identifier
|
||||
system_id: Option<JsWord>,
|
||||
// Raw value
|
||||
raw: Option<JsWord>,
|
||||
},
|
||||
StartTag {
|
||||
tag_name: JsWord,
|
||||
|
@ -326,6 +326,12 @@ fn verify_document_fragment(
|
||||
struct DropSpan;
|
||||
|
||||
impl VisitMut for DropSpan {
|
||||
fn visit_mut_document_type(&mut self, n: &mut DocumentType) {
|
||||
n.visit_mut_children_with(self);
|
||||
|
||||
n.raw = None;
|
||||
}
|
||||
|
||||
fn visit_mut_comment(&mut self, n: &mut Comment) {
|
||||
n.visit_mut_children_with(self);
|
||||
|
||||
|
@ -96,15 +96,9 @@ pub enum State {
|
||||
|
||||
#[derive(PartialEq, Eq, Clone, Debug)]
|
||||
struct Doctype {
|
||||
raw_keyword: Option<String>,
|
||||
name: Option<String>,
|
||||
raw_name: Option<String>,
|
||||
force_quirks: bool,
|
||||
raw_public_keyword: Option<String>,
|
||||
public_quote: Option<char>,
|
||||
public_id: Option<String>,
|
||||
raw_system_keyword: Option<String>,
|
||||
system_quote: Option<char>,
|
||||
system_id: Option<String>,
|
||||
}
|
||||
|
||||
@ -158,12 +152,12 @@ where
|
||||
pending_tokens: VecDeque<TokenAndSpan>,
|
||||
current_doctype_token: Option<Doctype>,
|
||||
current_comment_token: Option<Comment>,
|
||||
doctype_raw: Option<String>,
|
||||
current_tag_token: Option<Tag>,
|
||||
attribute_start_position: Option<BytePos>,
|
||||
character_reference_code: Option<Vec<(u8, u32, Option<char>)>>,
|
||||
temporary_buffer: String,
|
||||
is_adjusted_current_node_is_element_in_html_namespace: Option<bool>,
|
||||
doctype_keyword: Option<String>,
|
||||
}
|
||||
|
||||
impl<I> Lexer<I>
|
||||
@ -185,6 +179,7 @@ where
|
||||
last_start_tag_name: None,
|
||||
pending_tokens: VecDeque::new(),
|
||||
current_doctype_token: None,
|
||||
doctype_raw: None,
|
||||
current_comment_token: None,
|
||||
current_tag_token: None,
|
||||
attribute_start_position: None,
|
||||
@ -192,7 +187,6 @@ where
|
||||
// Do this without a new allocation.
|
||||
temporary_buffer: String::with_capacity(33),
|
||||
is_adjusted_current_node_is_element_in_html_namespace: None,
|
||||
doctype_keyword: None,
|
||||
};
|
||||
|
||||
// A leading Byte Order Mark (BOM) causes the character encoding argument to be
|
||||
@ -448,62 +442,60 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
fn create_doctype_token(&mut self, keyword: Option<String>, name_c: Option<(char, char)>) {
|
||||
fn create_doctype_token(&mut self, name_c: Option<char>) {
|
||||
let mut new_name = None;
|
||||
let mut new_raw_name = None;
|
||||
|
||||
if let Some(name_c) = name_c {
|
||||
let mut name = String::with_capacity(4);
|
||||
let mut raw_name = String::with_capacity(4);
|
||||
|
||||
name.push(name_c.0);
|
||||
raw_name.push(name_c.1);
|
||||
|
||||
name.push(name_c);
|
||||
new_name = Some(name);
|
||||
new_raw_name = Some(raw_name);
|
||||
}
|
||||
|
||||
self.current_doctype_token = Some(Doctype {
|
||||
raw_keyword: keyword,
|
||||
name: new_name,
|
||||
raw_name: new_raw_name,
|
||||
force_quirks: false,
|
||||
public_quote: None,
|
||||
raw_public_keyword: None,
|
||||
public_id: None,
|
||||
system_quote: None,
|
||||
raw_system_keyword: None,
|
||||
system_id: None,
|
||||
});
|
||||
}
|
||||
|
||||
fn append_to_doctype_token(
|
||||
&mut self,
|
||||
raw_keyword: Option<String>,
|
||||
name: Option<(char, char)>,
|
||||
public_id: Option<(char, char)>,
|
||||
system_id: Option<(char, char)>,
|
||||
) {
|
||||
if let Some(ref mut token) = self.current_doctype_token {
|
||||
if let Some(raw_keyword) = raw_keyword {
|
||||
if let Doctype {
|
||||
raw_keyword: Some(old_raw_keyword),
|
||||
..
|
||||
} = token
|
||||
{
|
||||
*old_raw_keyword = raw_keyword;
|
||||
fn append_raw_to_doctype_token(&mut self, c: char) {
|
||||
if let Some(doctype_raw) = &mut self.doctype_raw {
|
||||
let is_cr = c == '\r';
|
||||
|
||||
if is_cr {
|
||||
let mut raw = String::with_capacity(2);
|
||||
|
||||
raw.push(c);
|
||||
|
||||
if self.input.cur() == Some('\n') {
|
||||
self.input.bump();
|
||||
|
||||
raw.push('\n');
|
||||
}
|
||||
|
||||
doctype_raw.push_str(&raw);
|
||||
} else {
|
||||
doctype_raw.push(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn append_to_doctype_token(
|
||||
&mut self,
|
||||
name: Option<char>,
|
||||
public_id: Option<char>,
|
||||
system_id: Option<char>,
|
||||
) {
|
||||
if let Some(ref mut token) = self.current_doctype_token {
|
||||
if let Some(name) = name {
|
||||
if let Doctype {
|
||||
name: Some(old_name),
|
||||
raw_name: Some(old_raw_name),
|
||||
..
|
||||
} = token
|
||||
{
|
||||
old_name.push(name.0);
|
||||
old_raw_name.push(name.1);
|
||||
old_name.push(name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -513,7 +505,7 @@ where
|
||||
..
|
||||
} = token
|
||||
{
|
||||
old_public_id.push(public_id.0);
|
||||
old_public_id.push(public_id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -523,7 +515,7 @@ where
|
||||
..
|
||||
} = token
|
||||
{
|
||||
old_system_id.push(system_id.0);
|
||||
old_system_id.push(system_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -535,46 +527,37 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
fn set_doctype_token_public_id(&mut self, quote: char) {
|
||||
if let Some(Doctype {
|
||||
public_id,
|
||||
public_quote,
|
||||
..
|
||||
}) = &mut self.current_doctype_token
|
||||
{
|
||||
fn set_doctype_token_public_id(&mut self) {
|
||||
if let Some(Doctype { public_id, .. }) = &mut self.current_doctype_token {
|
||||
// The Longest public id is `-//softquad software//dtd hotmetal pro
|
||||
// 6.0::19990601::extensions to html 4.0//`
|
||||
*public_id = Some(String::with_capacity(78));
|
||||
*public_quote = Some(quote);
|
||||
}
|
||||
}
|
||||
|
||||
fn set_doctype_token_system_id(&mut self, quote: char) {
|
||||
if let Some(Doctype {
|
||||
system_id,
|
||||
system_quote,
|
||||
..
|
||||
}) = &mut self.current_doctype_token
|
||||
{
|
||||
fn set_doctype_token_system_id(&mut self) {
|
||||
if let Some(Doctype { system_id, .. }) = &mut self.current_doctype_token {
|
||||
// The Longest system id is `http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd`
|
||||
*system_id = Some(String::with_capacity(58));
|
||||
*system_quote = Some(quote);
|
||||
}
|
||||
}
|
||||
|
||||
fn emit_doctype_token(&mut self) {
|
||||
let current_doctype_token = self.current_doctype_token.take().unwrap();
|
||||
|
||||
let raw = match self.doctype_raw.take() {
|
||||
Some(raw) => raw,
|
||||
_ => {
|
||||
unreachable!();
|
||||
}
|
||||
};
|
||||
|
||||
let token = Token::Doctype {
|
||||
raw_keyword: current_doctype_token.raw_keyword.map(JsWord::from),
|
||||
name: current_doctype_token.name.map(JsWord::from),
|
||||
raw_name: current_doctype_token.raw_name.map(JsWord::from),
|
||||
force_quirks: current_doctype_token.force_quirks,
|
||||
raw_public_keyword: current_doctype_token.raw_public_keyword.map(JsWord::from),
|
||||
public_quote: current_doctype_token.public_quote,
|
||||
public_id: current_doctype_token.public_id.map(JsWord::from),
|
||||
raw_system_keyword: current_doctype_token.raw_system_keyword.map(JsWord::from),
|
||||
system_quote: current_doctype_token.system_quote,
|
||||
system_id: current_doctype_token.system_id.map(JsWord::from),
|
||||
raw: Some(JsWord::from(raw)),
|
||||
};
|
||||
|
||||
self.emit_token(token);
|
||||
@ -864,7 +847,7 @@ where
|
||||
value: c,
|
||||
raw: Some(String::from(c).into()),
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
@ -2631,8 +2614,10 @@ where
|
||||
Some(e @ 'e' | e @ 'E') => {
|
||||
self.state = State::Doctype;
|
||||
|
||||
let mut raw_keyword = String::with_capacity(7);
|
||||
let mut raw_keyword = String::with_capacity(9);
|
||||
|
||||
raw_keyword.push('<');
|
||||
raw_keyword.push('!');
|
||||
raw_keyword.push(d);
|
||||
raw_keyword.push(o);
|
||||
raw_keyword.push(c);
|
||||
@ -2641,7 +2626,7 @@ where
|
||||
raw_keyword.push(p);
|
||||
raw_keyword.push(e);
|
||||
|
||||
self.doctype_keyword = Some(raw_keyword);
|
||||
self.doctype_raw = Some(raw_keyword);
|
||||
}
|
||||
_ => {
|
||||
anything_else(self);
|
||||
@ -3032,8 +3017,7 @@ where
|
||||
// U+0020 SPACE
|
||||
// Switch to the before DOCTYPE name state.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::BeforeDoctypeName;
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
@ -3047,10 +3031,7 @@ where
|
||||
// token.
|
||||
None => {
|
||||
self.emit_error(ErrorKind::EofInDoctype);
|
||||
|
||||
let doctype_keyword = self.doctype_keyword.take();
|
||||
|
||||
self.create_doctype_token(doctype_keyword, None);
|
||||
self.create_doctype_token(None);
|
||||
self.set_force_quirks();
|
||||
self.emit_doctype_token();
|
||||
self.emit_token(Token::Eof);
|
||||
@ -3076,19 +3057,15 @@ where
|
||||
// U+0020 SPACE
|
||||
// Ignore the character.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
}
|
||||
// ASCII upper alpha
|
||||
// Create a new DOCTYPE token. Set the token's name to the lowercase version
|
||||
// of the current input character (add 0x0020 to the character's code
|
||||
// point). Switch to the DOCTYPE name state.
|
||||
Some(c) if is_ascii_upper_alpha(c) => {
|
||||
let doctype_keyword = self.doctype_keyword.take();
|
||||
|
||||
self.create_doctype_token(
|
||||
doctype_keyword,
|
||||
Some((c.to_ascii_lowercase(), c)),
|
||||
);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.create_doctype_token(Some(c.to_ascii_lowercase()));
|
||||
self.state = State::DoctypeName;
|
||||
}
|
||||
// U+0000 NULL
|
||||
@ -3096,23 +3073,19 @@ where
|
||||
// token. Set the token's name to a U+FFFD REPLACEMENT CHARACTER character.
|
||||
// Switch to the DOCTYPE name state.
|
||||
Some(c @ '\x00') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::UnexpectedNullCharacter);
|
||||
|
||||
let doctype_keyword = self.doctype_keyword.take();
|
||||
|
||||
self.create_doctype_token(
|
||||
doctype_keyword,
|
||||
Some((REPLACEMENT_CHARACTER, c)),
|
||||
);
|
||||
self.create_doctype_token(Some(REPLACEMENT_CHARACTER));
|
||||
self.state = State::DoctypeName;
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is a missing-doctype-name parse error. Create a new DOCTYPE token.
|
||||
// Set its force-quirks flag to on. Switch to the data state. Emit the
|
||||
// current token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::MissingDoctypeName);
|
||||
self.create_doctype_token(None, None);
|
||||
self.create_doctype_token(None);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
self.emit_doctype_token();
|
||||
@ -3123,7 +3096,7 @@ where
|
||||
// token.
|
||||
None => {
|
||||
self.emit_error(ErrorKind::EofInDoctype);
|
||||
self.create_doctype_token(None, None);
|
||||
self.create_doctype_token(None);
|
||||
self.set_force_quirks();
|
||||
self.emit_doctype_token();
|
||||
self.emit_token(Token::Eof);
|
||||
@ -3135,10 +3108,8 @@ where
|
||||
// character. Switch to the DOCTYPE name state.
|
||||
Some(c) => {
|
||||
self.validate_input_stream_character(c);
|
||||
|
||||
let doctype_keyword = self.doctype_keyword.take();
|
||||
|
||||
self.create_doctype_token(doctype_keyword, Some((c, c)));
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.create_doctype_token(Some(c));
|
||||
self.state = State::DoctypeName;
|
||||
}
|
||||
}
|
||||
@ -3153,12 +3124,13 @@ where
|
||||
// U+0020 SPACE
|
||||
// Switch to the after DOCTYPE name state.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::AfterDoctypeName;
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// Switch to the data state. Emit the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::Data;
|
||||
self.emit_doctype_token();
|
||||
}
|
||||
@ -3166,24 +3138,16 @@ where
|
||||
// Append the lowercase version of the current input character (add 0x0020
|
||||
// to the character's code point) to the current DOCTYPE token's name.
|
||||
Some(c) if is_ascii_upper_alpha(c) => {
|
||||
self.append_to_doctype_token(
|
||||
None,
|
||||
Some((c.to_ascii_lowercase(), c)),
|
||||
None,
|
||||
None,
|
||||
);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.append_to_doctype_token(Some(c.to_ascii_lowercase()), None, None);
|
||||
}
|
||||
// U+0000 NULL
|
||||
// This is an unexpected-null-character parse error. Append a U+FFFD
|
||||
// REPLACEMENT CHARACTER character to the current DOCTYPE token's name.
|
||||
Some(c @ '\x00') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::UnexpectedNullCharacter);
|
||||
self.append_to_doctype_token(
|
||||
None,
|
||||
Some((REPLACEMENT_CHARACTER, c)),
|
||||
None,
|
||||
None,
|
||||
);
|
||||
self.append_to_doctype_token(Some(REPLACEMENT_CHARACTER), None, None);
|
||||
}
|
||||
// EOF
|
||||
// This is an eof-in-doctype parse error. Set the current DOCTYPE token's
|
||||
@ -3201,7 +3165,8 @@ where
|
||||
// Append the current input character to the current DOCTYPE token's name.
|
||||
Some(c) => {
|
||||
self.validate_input_stream_character(c);
|
||||
self.append_to_doctype_token(None, Some((c, c)), None, None);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.append_to_doctype_token(Some(c), None, None);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3217,11 +3182,12 @@ where
|
||||
// U+0020 SPACE
|
||||
// Ignore the character.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// Switch to the data state. Emit the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::Data;
|
||||
self.emit_doctype_token();
|
||||
}
|
||||
@ -3269,21 +3235,17 @@ where
|
||||
match &*first_six_chars.to_lowercase() {
|
||||
"public" => {
|
||||
self.state = State::AfterDoctypePublicKeyword;
|
||||
self.append_to_doctype_token(
|
||||
Some(first_six_chars),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
|
||||
if let Some(doctype_raw) = &mut self.doctype_raw {
|
||||
doctype_raw.push_str(&first_six_chars);
|
||||
}
|
||||
}
|
||||
"system" => {
|
||||
self.state = State::AfterDoctypeSystemKeyword;
|
||||
self.append_to_doctype_token(
|
||||
Some(first_six_chars),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
|
||||
if let Some(doctype_raw) = &mut self.doctype_raw {
|
||||
doctype_raw.push_str(&first_six_chars);
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
self.cur_pos = cur_pos;
|
||||
@ -3308,7 +3270,7 @@ where
|
||||
// U+0020 SPACE
|
||||
// Switch to the before DOCTYPE public identifier state.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::BeforeDoctypePublicIdentifier;
|
||||
}
|
||||
// U+0022 QUOTATION MARK (")
|
||||
@ -3316,9 +3278,10 @@ where
|
||||
// Set the current DOCTYPE token's public identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE public identifier
|
||||
// (double-quoted) state.
|
||||
Some('"') => {
|
||||
Some(c @ '"') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::MissingWhitespaceAfterDoctypePublicKeyword);
|
||||
self.set_doctype_token_public_id('"');
|
||||
self.set_doctype_token_public_id();
|
||||
self.state = State::DoctypePublicIdentifierDoubleQuoted;
|
||||
}
|
||||
// U+0027 APOSTROPHE (')
|
||||
@ -3326,16 +3289,18 @@ where
|
||||
// Set the current DOCTYPE token's public identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE public identifier
|
||||
// (single-quoted) state.
|
||||
Some('\'') => {
|
||||
Some(c @ '\'') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::MissingWhitespaceAfterDoctypePublicKeyword);
|
||||
self.set_doctype_token_public_id('\'');
|
||||
self.set_doctype_token_public_id();
|
||||
self.state = State::DoctypePublicIdentifierSingleQuoted;
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is a missing-doctype-public-identifier parse error. Set the current
|
||||
// DOCTYPE token's force-quirks flag to on. Switch to the data state. Emit
|
||||
// the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::MissingDoctypePublicIdentifier);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
@ -3374,29 +3339,32 @@ where
|
||||
// U+0020 SPACE
|
||||
// Ignore the character.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
}
|
||||
// U+0022 QUOTATION MARK (")
|
||||
// Set the current DOCTYPE token's public identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE public identifier
|
||||
// (double-quoted) state.
|
||||
Some('"') => {
|
||||
self.set_doctype_token_public_id('"');
|
||||
Some(c @ '"') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.set_doctype_token_public_id();
|
||||
self.state = State::DoctypePublicIdentifierDoubleQuoted;
|
||||
}
|
||||
// U+0027 APOSTROPHE (')
|
||||
// Set the current DOCTYPE token's public identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE public identifier
|
||||
// (single-quoted) state.
|
||||
Some('\'') => {
|
||||
self.set_doctype_token_public_id('\'');
|
||||
Some(c @ '\'') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.set_doctype_token_public_id();
|
||||
self.state = State::DoctypePublicIdentifierSingleQuoted;
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is a missing-doctype-public-identifier parse error. Set the current
|
||||
// DOCTYPE token's force-quirks flag to on. Switch to the data state. Emit
|
||||
// the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::MissingDoctypePublicIdentifier);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
@ -3431,7 +3399,8 @@ where
|
||||
match self.consume_next_char() {
|
||||
// U+0022 QUOTATION MARK (")
|
||||
// Switch to the after DOCTYPE public identifier state.
|
||||
Some('"') => {
|
||||
Some(c @ '"') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::AfterDoctypePublicIdentifier;
|
||||
}
|
||||
// U+0000 NULL
|
||||
@ -3439,19 +3408,16 @@ where
|
||||
// REPLACEMENT CHARACTER character to the current DOCTYPE token's public
|
||||
// identifier.
|
||||
Some(c @ '\x00') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::UnexpectedNullCharacter);
|
||||
self.append_to_doctype_token(
|
||||
None,
|
||||
None,
|
||||
Some((REPLACEMENT_CHARACTER, c)),
|
||||
None,
|
||||
);
|
||||
self.append_to_doctype_token(None, Some(REPLACEMENT_CHARACTER), None);
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is an abrupt-doctype-public-identifier parse error. Set the current
|
||||
// DOCTYPE token's force-quirks flag to on. Switch to the data state. Emit
|
||||
// the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::AbruptDoctypePublicIdentifier);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
@ -3474,7 +3440,8 @@ where
|
||||
// identifier.
|
||||
Some(c) => {
|
||||
self.validate_input_stream_character(c);
|
||||
self.append_to_doctype_token(None, None, Some((c, c)), None);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.append_to_doctype_token(None, Some(c), None);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3484,7 +3451,8 @@ where
|
||||
match self.consume_next_char() {
|
||||
// U+0027 APOSTROPHE (')
|
||||
// Switch to the after DOCTYPE public identifier state.
|
||||
Some('\'') => {
|
||||
Some(c @ '\'') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::AfterDoctypePublicIdentifier;
|
||||
}
|
||||
// U+0000 NULL
|
||||
@ -3492,19 +3460,16 @@ where
|
||||
// REPLACEMENT CHARACTER character to the current DOCTYPE token's public
|
||||
// identifier.
|
||||
Some(c @ '\x00') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::UnexpectedNullCharacter);
|
||||
self.append_to_doctype_token(
|
||||
None,
|
||||
None,
|
||||
Some((REPLACEMENT_CHARACTER, c)),
|
||||
None,
|
||||
);
|
||||
self.append_to_doctype_token(None, Some(REPLACEMENT_CHARACTER), None);
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is an abrupt-doctype-public-identifier parse error. Set the current
|
||||
// DOCTYPE token's force-quirks flag to on. Switch to the data state. Emit
|
||||
// the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::AbruptDoctypePublicIdentifier);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
@ -3527,7 +3492,8 @@ where
|
||||
// identifier.
|
||||
Some(c) => {
|
||||
self.validate_input_stream_character(c);
|
||||
self.append_to_doctype_token(None, None, Some((c, c)), None);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.append_to_doctype_token(None, Some(c), None);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3541,12 +3507,13 @@ where
|
||||
// U+0020 SPACE
|
||||
// Switch to the between DOCTYPE public and system identifiers state.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::BetweenDoctypePublicAndSystemIdentifiers;
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// Switch to the data state. Emit the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::Data;
|
||||
self.emit_doctype_token();
|
||||
}
|
||||
@ -3555,11 +3522,12 @@ where
|
||||
// parse error. Set the current DOCTYPE token's system
|
||||
// identifier to the empty string (not missing), then switch
|
||||
// to the DOCTYPE system identifier (double-quoted) state.
|
||||
Some('"') => {
|
||||
Some(c @ '"') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(
|
||||
ErrorKind::MissingWhitespaceBetweenDoctypePublicAndSystemIdentifiers,
|
||||
);
|
||||
self.set_doctype_token_system_id('"');
|
||||
self.set_doctype_token_system_id();
|
||||
self.state = State::DoctypeSystemIdentifierDoubleQuoted;
|
||||
}
|
||||
// U+0027 APOSTROPHE (')
|
||||
@ -3567,11 +3535,12 @@ where
|
||||
// parse error. Set the current DOCTYPE token's system
|
||||
// identifier to the empty string (not missing), then switch
|
||||
// to the DOCTYPE system identifier (single-quoted) state.
|
||||
Some('\'') => {
|
||||
Some(c @ '\'') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(
|
||||
ErrorKind::MissingWhitespaceBetweenDoctypePublicAndSystemIdentifiers,
|
||||
);
|
||||
self.set_doctype_token_system_id('\'');
|
||||
self.set_doctype_token_system_id();
|
||||
self.state = State::DoctypeSystemIdentifierSingleQuoted;
|
||||
}
|
||||
// EOF
|
||||
@ -3607,11 +3576,12 @@ where
|
||||
// U+0020 SPACE
|
||||
// Ignore the character.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// Switch to the data state. Emit the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::Data;
|
||||
self.emit_doctype_token();
|
||||
}
|
||||
@ -3619,16 +3589,18 @@ where
|
||||
// Set the current DOCTYPE token's system identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE system identifier
|
||||
// (double-quoted) state.
|
||||
Some('"') => {
|
||||
self.set_doctype_token_system_id('"');
|
||||
Some(c @ '"') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.set_doctype_token_system_id();
|
||||
self.state = State::DoctypeSystemIdentifierDoubleQuoted;
|
||||
}
|
||||
// U+0027 APOSTROPHE (')
|
||||
// Set the current DOCTYPE token's system identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE system identifier
|
||||
// (single-quoted) state.
|
||||
Some('\'') => {
|
||||
self.set_doctype_token_system_id('\'');
|
||||
Some(c @ '\'') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.set_doctype_token_system_id();
|
||||
self.state = State::DoctypeSystemIdentifierSingleQuoted;
|
||||
}
|
||||
// EOF
|
||||
@ -3664,7 +3636,7 @@ where
|
||||
// U+0020 SPACE
|
||||
// Switch to the before DOCTYPE system identifier state.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::BeforeDoctypeSystemIdentifier;
|
||||
}
|
||||
// U+0022 QUOTATION MARK (")
|
||||
@ -3672,9 +3644,10 @@ where
|
||||
// Set the current DOCTYPE token's system identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE system identifier
|
||||
// (double-quoted) state.
|
||||
Some('"') => {
|
||||
Some(c @ '"') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::MissingWhitespaceAfterDoctypeSystemKeyword);
|
||||
self.set_doctype_token_system_id('"');
|
||||
self.set_doctype_token_system_id();
|
||||
self.state = State::DoctypeSystemIdentifierDoubleQuoted;
|
||||
}
|
||||
// U+0027 APOSTROPHE (')
|
||||
@ -3682,16 +3655,18 @@ where
|
||||
// Set the current DOCTYPE token's system identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE system identifier
|
||||
// (single-quoted) state.
|
||||
Some('\'') => {
|
||||
Some(c @ '\'') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::MissingWhitespaceAfterDoctypeSystemKeyword);
|
||||
self.set_doctype_token_system_id('\'');
|
||||
self.set_doctype_token_system_id();
|
||||
self.state = State::DoctypeSystemIdentifierSingleQuoted;
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is a missing-doctype-system-identifier parse error. Set the current
|
||||
// DOCTYPE token's force-quirks flag to on. Switch to the data state. Emit
|
||||
// the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::MissingDoctypeSystemIdentifier);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
@ -3730,29 +3705,32 @@ where
|
||||
// U+0020 SPACE
|
||||
// Ignore the character.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
}
|
||||
// U+0022 QUOTATION MARK (")
|
||||
// Set the current DOCTYPE token's system identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE system identifier
|
||||
// (double-quoted) state.
|
||||
Some('"') => {
|
||||
self.set_doctype_token_system_id('"');
|
||||
Some(c @ '"') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.set_doctype_token_system_id();
|
||||
self.state = State::DoctypeSystemIdentifierDoubleQuoted;
|
||||
}
|
||||
// U+0027 APOSTROPHE (')
|
||||
// Set the current DOCTYPE token's system identifier to the empty string
|
||||
// (not missing), then switch to the DOCTYPE system identifier
|
||||
// (single-quoted) state.
|
||||
Some('\'') => {
|
||||
self.set_doctype_token_system_id('\'');
|
||||
Some(c @ '\'') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.set_doctype_token_system_id();
|
||||
self.state = State::DoctypeSystemIdentifierSingleQuoted;
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is a missing-doctype-system-identifier parse error. Set the current
|
||||
// DOCTYPE token's force-quirks flag to on. Switch to the data state. Emit
|
||||
// the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::EofInDoctype);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
@ -3787,7 +3765,8 @@ where
|
||||
match self.consume_next_char() {
|
||||
// U+0027 APOSTROPHE (')
|
||||
// Switch to the after DOCTYPE system identifier state.
|
||||
Some('"') => {
|
||||
Some(c @ '"') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::AfterDoctypeSystemIdentifier;
|
||||
}
|
||||
// U+0000 NULL
|
||||
@ -3795,19 +3774,16 @@ where
|
||||
// REPLACEMENT CHARACTER character to the current DOCTYPE token's system
|
||||
// identifier.
|
||||
Some(c @ '\x00') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::UnexpectedNullCharacter);
|
||||
self.append_to_doctype_token(
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
Some((REPLACEMENT_CHARACTER, c)),
|
||||
);
|
||||
self.append_to_doctype_token(None, None, Some(REPLACEMENT_CHARACTER));
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is an abrupt-doctype-system-identifier parse error. Set the current
|
||||
// DOCTYPE token's force-quirks flag to on. Switch to the data state. Emit
|
||||
// the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::AbruptDoctypeSystemIdentifier);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
@ -3830,7 +3806,8 @@ where
|
||||
// identifier.
|
||||
Some(c) => {
|
||||
self.validate_input_stream_character(c);
|
||||
self.append_to_doctype_token(None, None, None, Some((c, c)));
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.append_to_doctype_token(None, None, Some(c));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3840,7 +3817,8 @@ where
|
||||
match self.consume_next_char() {
|
||||
// U+0027 APOSTROPHE (')
|
||||
// Switch to the after DOCTYPE system identifier state.
|
||||
Some('\'') => {
|
||||
Some(c @ '\'') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::AfterDoctypeSystemIdentifier;
|
||||
}
|
||||
// U+0000 NULL
|
||||
@ -3848,19 +3826,16 @@ where
|
||||
// REPLACEMENT CHARACTER character to the current DOCTYPE token's system
|
||||
// identifier.
|
||||
Some(c @ '\x00') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::UnexpectedNullCharacter);
|
||||
self.append_to_doctype_token(
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
Some((REPLACEMENT_CHARACTER, c)),
|
||||
);
|
||||
self.append_to_doctype_token(None, None, Some(REPLACEMENT_CHARACTER));
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// This is an abrupt-doctype-system-identifier parse error. Set the current
|
||||
// DOCTYPE token's force-quirks flag to on. Switch to the data state. Emit
|
||||
// the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::AbruptDoctypeSystemIdentifier);
|
||||
self.set_force_quirks();
|
||||
self.state = State::Data;
|
||||
@ -3883,7 +3858,8 @@ where
|
||||
// identifier.
|
||||
Some(c) => {
|
||||
self.validate_input_stream_character(c);
|
||||
self.append_to_doctype_token(None, None, None, Some((c, c)));
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.append_to_doctype_token(None, None, Some(c));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3897,11 +3873,12 @@ where
|
||||
// U+0020 SPACE
|
||||
// Ignore the character.
|
||||
Some(c) if is_spacy(c) => {
|
||||
self.skip_next_lf(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
}
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// Switch to the data state. Emit the current DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::Data;
|
||||
self.emit_doctype_token();
|
||||
}
|
||||
@ -3933,13 +3910,15 @@ where
|
||||
match self.consume_next_char() {
|
||||
// U+003E GREATER-THAN SIGN (>)
|
||||
// Switch to the data state. Emit the DOCTYPE token.
|
||||
Some('>') => {
|
||||
Some(c @ '>') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.state = State::Data;
|
||||
self.emit_doctype_token();
|
||||
}
|
||||
// U+0000 NULL
|
||||
// This is an unexpected-null-character parse error. Ignore the character.
|
||||
Some('\x00') => {
|
||||
Some(c @ '\x00') => {
|
||||
self.append_raw_to_doctype_token(c);
|
||||
self.emit_error(ErrorKind::UnexpectedNullCharacter);
|
||||
}
|
||||
// EOF
|
||||
@ -3954,6 +3933,7 @@ where
|
||||
// Ignore the character.
|
||||
Some(c) => {
|
||||
self.validate_input_stream_character(c);
|
||||
self.append_raw_to_doctype_token(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -401,11 +401,13 @@ where
|
||||
name,
|
||||
public_id,
|
||||
system_id,
|
||||
raw,
|
||||
} => Child::DocumentType(DocumentType {
|
||||
span: start_span,
|
||||
name,
|
||||
public_id,
|
||||
system_id,
|
||||
raw,
|
||||
}),
|
||||
Data::Element {
|
||||
namespace,
|
||||
@ -1320,6 +1322,7 @@ where
|
||||
public_id,
|
||||
system_id,
|
||||
force_quirks,
|
||||
raw,
|
||||
..
|
||||
} => {
|
||||
let is_html_name = matches!(name, Some(name) if name.as_ref().eq_ignore_ascii_case("html"));
|
||||
@ -1340,6 +1343,7 @@ where
|
||||
name: name.clone(),
|
||||
public_id: public_id.clone(),
|
||||
system_id: system_id.clone(),
|
||||
raw: raw.clone(),
|
||||
},
|
||||
token_and_info.span,
|
||||
);
|
||||
|
@ -24,6 +24,7 @@ pub enum Data {
|
||||
name: Option<JsWord>,
|
||||
public_id: Option<JsWord>,
|
||||
system_id: Option<JsWord>,
|
||||
raw: Option<JsWord>,
|
||||
},
|
||||
Element {
|
||||
namespace: Namespace,
|
||||
|
@ -586,21 +586,8 @@ fn html5lib_test_tokenizer(input: PathBuf) {
|
||||
let mut new_token = token_and_span.unwrap().token.clone();
|
||||
|
||||
match new_token {
|
||||
Token::Doctype {
|
||||
ref mut raw_keyword,
|
||||
ref mut raw_name,
|
||||
ref mut public_quote,
|
||||
ref mut raw_public_keyword,
|
||||
ref mut system_quote,
|
||||
ref mut raw_system_keyword,
|
||||
..
|
||||
} => {
|
||||
*raw_keyword = None;
|
||||
*raw_name = None;
|
||||
*public_quote = None;
|
||||
*raw_public_keyword = None;
|
||||
*system_quote = None;
|
||||
*raw_system_keyword = None;
|
||||
Token::Doctype { ref mut raw, .. } => {
|
||||
*raw = None;
|
||||
}
|
||||
Token::StartTag {
|
||||
ref mut raw_tag_name,
|
||||
@ -678,16 +665,11 @@ fn html5lib_test_tokenizer(input: PathBuf) {
|
||||
.expect("failed to deserialize");
|
||||
|
||||
vec![Token::Doctype {
|
||||
raw_keyword: None,
|
||||
name: name.map(|v| v.into()),
|
||||
raw_name: None,
|
||||
force_quirks: !correctness,
|
||||
raw_public_keyword: None,
|
||||
public_quote: None,
|
||||
public_id: public_id.map(|v| v.into()),
|
||||
raw_system_keyword: None,
|
||||
system_quote: None,
|
||||
system_id: system_id.map(|v| v.into()),
|
||||
raw: None,
|
||||
}]
|
||||
}
|
||||
"StartTag" => {
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": "about:legacy-compat"
|
||||
"systemId": "about:legacy-compat",
|
||||
"raw": "<!DOCTYPE html SYSTEM \"about:legacy-compat\">"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE HTML>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype\rhtml>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype\nhtml>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!DOCTYPE html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
@ -16,7 +16,8 @@
|
||||
},
|
||||
"name": "html",
|
||||
"publicId": null,
|
||||
"systemId": null
|
||||
"systemId": null,
|
||||
"raw": "<!doctype html>"
|
||||
},
|
||||
{
|
||||
"type": "Element",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user