Skip to content

Commit 7a268f3

Browse files
committed
Suspend the whole tokenizer and tree builder on </script>
1 parent b5c4552 commit 7a268f3

File tree

12 files changed

+185
-162
lines changed

12 files changed

+185
-162
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22

33
name = "html5ever"
4-
version = "0.9.0"
4+
version = "0.10.0"
55
authors = [ "The html5ever Project Developers" ]
66
license = "MIT / Apache-2.0"
77
repository = "https://github.com/servo/html5ever"

examples/noop-tokenize.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,19 @@ use std::default::Default;
1717

1818
use tendril::{ByteTendril, ReadExt};
1919

20-
use html5ever::tokenizer::{TokenSink, Token, Tokenizer};
20+
use html5ever::tokenizer::{TokenSinkResult, TokenSink, Token, Tokenizer};
2121
use html5ever::tokenizer::buffer_queue::BufferQueue;
2222

2323
struct Sink(Vec<Token>);
2424

2525
impl TokenSink for Sink {
26-
fn process_token(&mut self, token: Token) {
26+
type Handle = ();
27+
28+
fn process_token(&mut self, token: Token) -> TokenSinkResult<()> {
2729
// Don't use the token, but make sure we don't get
2830
// optimized out entirely.
2931
self.0.push(token);
32+
TokenSinkResult::Continue
3033
}
3134
}
3235

examples/tokenize.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use std::default::Default;
1515

1616
use tendril::{ByteTendril, ReadExt};
1717

18-
use html5ever::tokenizer::{TokenSink, Tokenizer, Token, TokenizerOpts, ParseError};
18+
use html5ever::tokenizer::{TokenSink, Tokenizer, Token, TokenizerOpts, ParseError, TokenSinkResult};
1919
use html5ever::tokenizer::{CharacterTokens, NullCharacterToken, TagToken, StartTag, EndTag};
2020
use html5ever::tokenizer::buffer_queue::BufferQueue;
2121

@@ -41,7 +41,9 @@ impl TokenPrinter {
4141
}
4242

4343
impl TokenSink for TokenPrinter {
44-
fn process_token(&mut self, token: Token) {
44+
type Handle = ();
45+
46+
fn process_token(&mut self, token: Token) -> TokenSinkResult<()> {
4547
match token {
4648
CharacterTokens(b) => {
4749
for c in b.chars() {
@@ -74,6 +76,7 @@ impl TokenSink for TokenPrinter {
7476
println!("OTHER: {:?}", token);
7577
}
7678
}
79+
TokenSinkResult::Continue
7780
}
7881
}
7982

src/driver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ pub struct Parser<Sink> where Sink: TreeSink {
8686
impl<Sink: TreeSink> TendrilSink<tendril::fmt::UTF8> for Parser<Sink> {
8787
fn process(&mut self, t: StrTendril) {
8888
self.input_buffer.push_front(t);
89-
self.tokenizer.feed(&mut self.input_buffer)
89+
let _ = self.tokenizer.feed(&mut self.input_buffer);
9090
}
9191

9292
// FIXME: Is it too noisy to report every character decoding error?

src/tokenizer/interface.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,21 @@ pub enum Token {
9797
// FIXME: rust-lang/rust#22629
9898
unsafe impl Send for Token { }
9999

100-
pub enum StateChangeQuery {
100+
#[derive(Debug, PartialEq)]
101+
#[must_use]
102+
pub enum TokenSinkResult<Handle> {
103+
Continue,
104+
Script(Handle),
101105
Plaintext,
102-
Quiescent,
103-
RawData(states::RawKind),
106+
RawData(states::RawKind)
104107
}
105108

106109
/// Types which can receive tokens from the tokenizer.
107110
pub trait TokenSink {
111+
type Handle;
112+
108113
/// Process a token.
109-
fn process_token(&mut self, token: Token);
114+
fn process_token(&mut self, token: Token) -> TokenSinkResult<Self::Handle>;
110115

111116
/// Used in the markup declaration open state. By default, this always
112117
/// returns false and thus all CDATA sections are tokenized as bogus
@@ -115,11 +120,4 @@ pub trait TokenSink {
115120
fn adjusted_current_node_present_but_not_in_html_namespace(&self) -> bool {
116121
false
117122
}
118-
119-
/// The tokenizer will call this after emitting any tag.
120-
/// This allows the tree builder to change the tokenizer's state.
121-
/// By default no state changes occur.
122-
fn query_state_change(&mut self) -> Option<StateChangeQuery> {
123-
None
124-
}
125123
}

0 commit comments

Comments
 (0)