Skip to content

Commit 82ede61

Browse files
committed
Checkpoint.
1 parent b1c1e03 commit 82ede61

File tree

11 files changed

+306
-289
lines changed

11 files changed

+306
-289
lines changed

html5ever/examples/noop-tree-builder.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
extern crate html5ever;
1212

1313
use std::borrow::Cow;
14-
use std::cell::{Cell, RefCell, Ref};
14+
use std::cell::Cell;
1515
use std::collections::HashMap;
1616
use std::io;
1717

@@ -61,14 +61,15 @@ impl <'a> TreeSink for Sink<'a> {
6161
x == y
6262
}
6363

64-
fn elem_name(&self, target: &usize) -> ExpandedName {
64+
fn elem_name(&self, _target: &usize) -> ExpandedName {
65+
//XXX(jdm)
6566
//let names = self.names.borrow();
6667
//Ref::map(names, |names| names.get(target).expect("not an element").expanded())
6768
//self.names.get(target).expect("not an element").expanded()
6869
todo!()
6970
}
7071

71-
fn create_element(&self, name: QualName, _: Vec<Attribute>, _: ElementFlags) -> usize {
72+
fn create_element(&self, _name: QualName, _: Vec<Attribute>, _: ElementFlags) -> usize {
7273
let id = self.get_id();
7374
//self.names.insert(id, name);
7475
id

html5ever/examples/print-tree-actions.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ impl TreeSink for Sink {
6767
x == y
6868
}
6969

70-
fn elem_name(&self, target: &usize) -> ExpandedName {
70+
fn elem_name(&self, _target: &usize) -> ExpandedName {
71+
//XXX(jdm)
7172
//self.names.borrow().get(target).cloned().expect("not an element").expanded()
7273
todo!()
7374
}

html5ever/src/tokenizer/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ macro_rules! shorthand (
612612
( $me:ident : clear_comment ) => ( $me.current_comment.borrow_mut().clear() );
613613
( $me:ident : create_doctype ) => ( *$me.current_doctype.borrow_mut() = Doctype::default() );
614614
( $me:ident : push_doctype_name $c:expr ) => ( option_push(&mut $me.current_doctype.borrow_mut().name, $c) );
615-
( $me:ident : push_doctype_id $k:ident $c:expr ) => ( option_push(&mut *$me.doctype_id($k), $c) );
615+
( $me:ident : push_doctype_id $k:ident $c:expr ) => ( option_push(&mut $me.doctype_id($k), $c) );
616616
( $me:ident : clear_doctype_id $k:ident ) => ( $me.clear_doctype_id($k) );
617617
( $me:ident : force_quirks ) => ( $me.current_doctype.borrow_mut().force_quirks = true);
618618
( $me:ident : emit_doctype ) => ( $me.emit_current_doctype() );

rcdom/tests/xml-tokenizer.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99

1010
use serde_json::{Map, Value};
1111
use std::borrow::Cow::Borrowed;
12+
use std::cell::RefCell;
1213
use std::ffi::OsStr;
1314
use std::io::Read;
1415
use std::path::Path;
15-
use std::{env, mem};
16+
use std::env;
1617

1718
use util::find_tests::foreach_xml5lib_test;
1819
use util::runner::Test;
@@ -56,48 +57,48 @@ fn splits(s: &str, n: usize) -> Vec<Vec<StrTendril>> {
5657
}
5758

5859
struct TokenLogger {
59-
tokens: Vec<Token>,
60-
current_str: StrTendril,
60+
tokens: RefCell<Vec<Token>>,
61+
current_str: RefCell<StrTendril>,
6162
exact_errors: bool,
6263
}
6364

6465
impl TokenLogger {
6566
fn new(exact_errors: bool) -> TokenLogger {
6667
TokenLogger {
67-
tokens: vec![],
68-
current_str: StrTendril::new(),
68+
tokens: RefCell::new(vec![]),
69+
current_str: RefCell::new(StrTendril::new()),
6970
exact_errors,
7071
}
7172
}
7273

7374
// Push anything other than character tokens
74-
fn push(&mut self, token: Token) {
75+
fn push(&self, token: Token) {
7576
self.finish_str();
76-
self.tokens.push(token);
77+
self.tokens.borrow_mut().push(token);
7778
}
7879

79-
fn finish_str(&mut self) {
80-
if self.current_str.len() > 0 {
81-
let s = mem::take(&mut self.current_str);
82-
self.tokens.push(CharacterTokens(s));
80+
fn finish_str(&self) {
81+
if self.current_str.borrow().len() > 0 {
82+
let s = self.current_str.take();
83+
self.tokens.borrow_mut().push(CharacterTokens(s));
8384
}
8485
}
8586

86-
fn get_tokens(mut self) -> Vec<Token> {
87+
fn get_tokens(self) -> Vec<Token> {
8788
self.finish_str();
88-
self.tokens
89+
self.tokens.take()
8990
}
9091
}
9192

9293
impl TokenSink for TokenLogger {
93-
fn process_token(&mut self, token: Token) {
94+
fn process_token(&self, token: Token) {
9495
match token {
9596
CharacterTokens(b) => {
96-
self.current_str.push_slice(&b);
97+
self.current_str.borrow_mut().push_slice(&b);
9798
},
9899

99100
NullCharacterToken => {
100-
self.current_str.push_char('\0');
101+
self.current_str.borrow_mut().push_char('\0');
101102
},
102103

103104
ParseError(_) => {
@@ -128,7 +129,7 @@ impl TokenSink for TokenLogger {
128129

129130
fn tokenize_xml(input: Vec<StrTendril>, opts: XmlTokenizerOpts) -> Vec<Token> {
130131
let sink = TokenLogger::new(opts.exact_errors);
131-
let mut tok = XmlTokenizer::new(sink, opts);
132+
let tok = XmlTokenizer::new(sink, opts);
132133
let buf = BufferQueue::default();
133134

134135
for chunk in input.into_iter() {
@@ -269,7 +270,7 @@ fn json_to_token(js: &Value) -> Token {
269270
fn json_to_tokens(js: &Value, exact_errors: bool) -> Vec<Token> {
270271
// Use a TokenLogger so that we combine character tokens separated
271272
// by an ignored error.
272-
let mut sink = TokenLogger::new(exact_errors);
273+
let sink = TokenLogger::new(exact_errors);
273274
for tok in js.as_array().unwrap().iter() {
274275
match *tok {
275276
Value::String(ref s) if &s[..] == "ParseError" => {

xml5ever/examples/simple_xml_tokenizer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use xml5ever::tokenizer::{ParseError, Token, TokenSink, XmlTokenizer};
2424
struct SimpleTokenPrinter;
2525

2626
impl TokenSink for SimpleTokenPrinter {
27-
fn process_token(&mut self, token: Token) {
27+
fn process_token(&self, token: Token) {
2828
match token {
2929
CharacterTokens(b) => {
3030
println!("TEXT: {}", &*b);
@@ -75,7 +75,7 @@ fn main() {
7575
let input_buffer = BufferQueue::default();
7676
input_buffer.push_back(input.try_reinterpret().unwrap());
7777
// Here we create and run tokenizer
78-
let mut tok = XmlTokenizer::new(sink, Default::default());
78+
let tok = XmlTokenizer::new(sink, Default::default());
7979
tok.feed(&input_buffer);
8080
tok.end();
8181
}

xml5ever/examples/xml_tokenizer.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
extern crate markup5ever;
1313
extern crate xml5ever;
1414

15+
use std::cell::Cell;
1516
use std::io;
1617

1718
use markup5ever::buffer_queue::BufferQueue;
@@ -21,29 +22,29 @@ use xml5ever::tokenizer::{EmptyTag, EndTag, ShortTag, StartTag};
2122
use xml5ever::tokenizer::{PIToken, Pi};
2223
use xml5ever::tokenizer::{ParseError, Token, TokenSink, XmlTokenizer, XmlTokenizerOpts};
2324

24-
#[derive(Copy, Clone)]
25+
#[derive(Clone)]
2526
struct TokenPrinter {
26-
in_char_run: bool,
27+
in_char_run: Cell<bool>,
2728
}
2829

2930
impl TokenPrinter {
30-
fn is_char(&mut self, is_char: bool) {
31-
match (self.in_char_run, is_char) {
31+
fn is_char(&self, is_char: bool) {
32+
match (self.in_char_run.get(), is_char) {
3233
(false, true) => print!("CHAR : \""),
3334
(true, false) => println!("\""),
3435
_ => (),
3536
}
36-
self.in_char_run = is_char;
37+
self.in_char_run.set(is_char);
3738
}
3839

39-
fn do_char(&mut self, c: char) {
40+
fn do_char(&self, c: char) {
4041
self.is_char(true);
4142
print!("{}", c.escape_default().collect::<String>());
4243
}
4344
}
4445

4546
impl TokenSink for TokenPrinter {
46-
fn process_token(&mut self, token: Token) {
47+
fn process_token(&self, token: Token) {
4748
match token {
4849
CharacterTokens(b) => {
4950
for c in b.chars() {
@@ -88,13 +89,13 @@ impl TokenSink for TokenPrinter {
8889
}
8990

9091
fn main() {
91-
let mut sink = TokenPrinter { in_char_run: false };
92+
let sink = TokenPrinter { in_char_run: Cell::new(false) };
9293
let mut input = ByteTendril::new();
9394
io::stdin().read_to_tendril(&mut input).unwrap();
9495
let input_buffer = BufferQueue::default();
9596
input_buffer.push_back(input.try_reinterpret().unwrap());
9697

97-
let mut tok = XmlTokenizer::new(
98+
let tok = XmlTokenizer::new(
9899
sink,
99100
XmlTokenizerOpts {
100101
profile: true,
@@ -104,5 +105,5 @@ fn main() {
104105
);
105106
tok.feed(&input_buffer);
106107
tok.end();
107-
sink.is_char(false);
108+
tok.sink.is_char(false);
108109
}

xml5ever/src/driver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ impl<Sink: TreeSink> TendrilSink<tendril::fmt::UTF8> for XmlParser<Sink> {
7171
self.tokenizer.sink.sink.parse_error(desc)
7272
}
7373

74-
fn finish(mut self) -> Self::Output {
74+
fn finish(self) -> Self::Output {
7575
self.tokenizer.end();
7676
self.tokenizer.sink.sink.finish()
7777
}

xml5ever/src/tokenizer/char_ref/mod.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ impl CharRefTokenizer {
115115
impl CharRefTokenizer {
116116
pub fn step<Sink: TokenSink>(
117117
&mut self,
118-
tokenizer: &mut XmlTokenizer<Sink>,
118+
tokenizer: &XmlTokenizer<Sink>,
119119
input: &BufferQueue,
120120
) -> Status {
121121
if self.result.is_some() {
@@ -135,7 +135,7 @@ impl CharRefTokenizer {
135135

136136
fn do_begin<Sink: TokenSink>(
137137
&mut self,
138-
tokenizer: &mut XmlTokenizer<Sink>,
138+
tokenizer: &XmlTokenizer<Sink>,
139139
input: &BufferQueue,
140140
) -> Status {
141141
match unwrap_or_return!(tokenizer.peek(input), Stuck) {
@@ -158,7 +158,7 @@ impl CharRefTokenizer {
158158

159159
fn do_octothorpe<Sink: TokenSink>(
160160
&mut self,
161-
tokenizer: &mut XmlTokenizer<Sink>,
161+
tokenizer: &XmlTokenizer<Sink>,
162162
input: &BufferQueue,
163163
) -> Status {
164164
let c = unwrap_or_return!(tokenizer.peek(input), Stuck);
@@ -179,7 +179,7 @@ impl CharRefTokenizer {
179179

180180
fn do_numeric<Sink: TokenSink>(
181181
&mut self,
182-
tokenizer: &mut XmlTokenizer<Sink>,
182+
tokenizer: &XmlTokenizer<Sink>,
183183
base: u32,
184184
input: &BufferQueue,
185185
) -> Status {
@@ -209,7 +209,7 @@ impl CharRefTokenizer {
209209

210210
fn do_numeric_semicolon<Sink: TokenSink>(
211211
&mut self,
212-
tokenizer: &mut XmlTokenizer<Sink>,
212+
tokenizer: &XmlTokenizer<Sink>,
213213
input: &BufferQueue,
214214
) -> Status {
215215
match unwrap_or_return!(tokenizer.peek(input), Stuck) {
@@ -223,7 +223,7 @@ impl CharRefTokenizer {
223223

224224
fn unconsume_numeric<Sink: TokenSink>(
225225
&mut self,
226-
tokenizer: &mut XmlTokenizer<Sink>,
226+
tokenizer: &XmlTokenizer<Sink>,
227227
input: &BufferQueue,
228228
) -> Status {
229229
let mut unconsume = StrTendril::from_char('#');
@@ -236,7 +236,7 @@ impl CharRefTokenizer {
236236
self.finish_none()
237237
}
238238

239-
fn finish_numeric<Sink: TokenSink>(&mut self, tokenizer: &mut XmlTokenizer<Sink>) -> Status {
239+
fn finish_numeric<Sink: TokenSink>(&mut self, tokenizer: &XmlTokenizer<Sink>) -> Status {
240240
fn conv(n: u32) -> char {
241241
from_u32(n).expect("invalid char missed by error handling cases")
242242
}
@@ -272,7 +272,7 @@ impl CharRefTokenizer {
272272

273273
fn do_named<Sink: TokenSink>(
274274
&mut self,
275-
tokenizer: &mut XmlTokenizer<Sink>,
275+
tokenizer: &XmlTokenizer<Sink>,
276276
input: &BufferQueue,
277277
) -> Status {
278278
let c = unwrap_or_return!(tokenizer.get_char(input), Stuck);
@@ -294,7 +294,7 @@ impl CharRefTokenizer {
294294
}
295295
}
296296

297-
fn emit_name_error<Sink: TokenSink>(&mut self, tokenizer: &mut XmlTokenizer<Sink>) {
297+
fn emit_name_error<Sink: TokenSink>(&mut self, tokenizer: &XmlTokenizer<Sink>) {
298298
let msg = format_if!(
299299
tokenizer.opts.exact_errors,
300300
"Invalid character reference",
@@ -306,15 +306,15 @@ impl CharRefTokenizer {
306306

307307
fn unconsume_name<Sink: TokenSink>(
308308
&mut self,
309-
tokenizer: &mut XmlTokenizer<Sink>,
309+
tokenizer: &XmlTokenizer<Sink>,
310310
input: &BufferQueue,
311311
) {
312312
tokenizer.unconsume(input, self.name_buf_opt.take().unwrap());
313313
}
314314

315315
fn finish_named<Sink: TokenSink>(
316316
&mut self,
317-
tokenizer: &mut XmlTokenizer<Sink>,
317+
tokenizer: &XmlTokenizer<Sink>,
318318
end_char: Option<char>,
319319
input: &BufferQueue,
320320
) -> Status {
@@ -403,7 +403,7 @@ impl CharRefTokenizer {
403403

404404
fn do_bogus_name<Sink: TokenSink>(
405405
&mut self,
406-
tokenizer: &mut XmlTokenizer<Sink>,
406+
tokenizer: &XmlTokenizer<Sink>,
407407
input: &BufferQueue,
408408
) -> Status {
409409
let c = unwrap_or_return!(tokenizer.get_char(input), Stuck);
@@ -419,7 +419,7 @@ impl CharRefTokenizer {
419419

420420
pub fn end_of_file<Sink: TokenSink>(
421421
&mut self,
422-
tokenizer: &mut XmlTokenizer<Sink>,
422+
tokenizer: &XmlTokenizer<Sink>,
423423
input: &BufferQueue,
424424
) {
425425
while self.result.is_none() {

xml5ever/src/tokenizer/interface.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,15 @@ pub enum Token {
109109
/// Types which can receive tokens from the tokenizer.
110110
pub trait TokenSink {
111111
/// Process a token.
112-
fn process_token(&mut self, token: Token);
112+
fn process_token(&self, token: Token);
113113

114114
/// Signal to the sink that parsing has ended.
115-
fn end(&mut self) {}
115+
fn end(&self) {}
116116

117117
/// The tokenizer will call this after emitting any start tag.
118118
/// This allows the tree builder to change the tokenizer's state.
119119
/// By default no state changes occur.
120-
fn query_state_change(&mut self) -> Option<states::XmlState> {
120+
fn query_state_change(&self) -> Option<states::XmlState> {
121121
None
122122
}
123123
}

0 commit comments

Comments
 (0)