Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion html5ever/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "html5ever"
version = "0.32.1"
version = "0.33.0"
authors = [ "The html5ever Project Developers" ]
license = "MIT OR Apache-2.0"
repository = "https://github.com/servo/html5ever"
Expand Down
23 changes: 17 additions & 6 deletions html5ever/src/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,19 @@ pub fn parse_fragment<Sink>(
opts: ParseOpts,
context_name: QualName,
context_attrs: Vec<Attribute>,
context_element_allows_scripting: bool,
) -> Parser<Sink>
where
Sink: TreeSink,
{
let context_elem = create_element(&sink, context_name, context_attrs);
parse_fragment_for_element(sink, opts, context_elem, None)
parse_fragment_for_element(
sink,
opts,
context_elem,
context_element_allows_scripting,
None,
)
}

/// Like `parse_fragment`, but with an existing context element
Expand All @@ -75,19 +82,23 @@ pub fn parse_fragment_for_element<Sink>(
sink: Sink,
opts: ParseOpts,
context_element: Sink::Handle,
context_element_allows_scripting: bool,
form_element: Option<Sink::Handle>,
) -> Parser<Sink>
where
Sink: TreeSink,
{
let tb = TreeBuilder::new_for_fragment(sink, context_element, form_element, opts.tree_builder);
let tok_opts = TokenizerOpts {
initial_state: Some(tb.tokenizer_state_for_context_elem()),
let tree_builder =
TreeBuilder::new_for_fragment(sink, context_element, form_element, opts.tree_builder);
let tokenizer_options = TokenizerOpts {
initial_state: Some(
tree_builder.tokenizer_state_for_context_elem(context_element_allows_scripting),
),
..opts.tokenizer
};
let tok = Tokenizer::new(tb, tok_opts);
let tokenizer = Tokenizer::new(tree_builder, tokenizer_options);
Parser {
tokenizer: tok,
tokenizer,
input_buffer: BufferQueue::default(),
}
}
Expand Down
7 changes: 5 additions & 2 deletions html5ever/src/tree_builder/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,10 @@ where

// https://html.spec.whatwg.org/multipage/#concept-frag-parse-context
// Step 4. Set the state of the HTML parser's tokenization stage as follows:
pub fn tokenizer_state_for_context_elem(&self) -> tok_state::State {
pub fn tokenizer_state_for_context_elem(
&self,
context_element_allows_scripting: bool,
) -> tok_state::State {
let context_elem = self.context_elem.borrow();
let elem = context_elem.as_ref().expect("no context element");
let elem_name = self.sink.elem_name(elem);
Expand All @@ -246,7 +249,7 @@ where
local_name!("script") => tok_state::RawData(tok_state::ScriptData),

local_name!("noscript") => {
if self.opts.scripting_enabled {
if context_element_allows_scripting {
tok_state::RawData(tok_state::Rawtext)
} else {
tok_state::Data
Expand Down
2 changes: 1 addition & 1 deletion rcdom/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ path = "lib.rs"

[dependencies]
tendril = "0.4"
html5ever = { version = "0.32", path = "../html5ever" }
html5ever = { version = "0.33", path = "../html5ever" }
markup5ever = { version = "0.16", path = "../markup5ever" }
xml5ever = { version = "0.23", path = "../xml5ever" }

Expand Down
2 changes: 2 additions & 0 deletions rcdom/tests/html-serializer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ fn parse_and_serialize(input: StrTendril) -> StrTendril {
ParseOpts::default(),
QualName::new(None, ns!(html), local_name!("body")),
vec![],
true,
)
.one(input);
let inner: SerializableHandle = dom.document.children.borrow()[0].clone().into();
Expand Down Expand Up @@ -252,6 +253,7 @@ fn deep_tree() {
ParseOpts::default(),
QualName::new(None, ns!(html), local_name!("div")),
vec![],
true,
);
let src = "<b>".repeat(60_000);
let dom = parser.one(src);
Expand Down
2 changes: 1 addition & 1 deletion rcdom/tests/html-tree-builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ fn make_test_desc_with_scripting_flag(
}
},
Some(ref context) => {
let dom = parse_fragment(RcDom::default(), opts, context.clone(), vec![])
let dom = parse_fragment(RcDom::default(), opts, context.clone(), vec![], true)
.one(data.clone());
// fragment case: serialize children of the html element
// rather than children of the document
Expand Down