1+ use std:: cell:: RefCell ;
2+
13use html5ever:: buffer_queue:: BufferQueue ;
24use html5ever:: tendril:: format_tendril;
35use html5ever:: tokenizer:: {
@@ -8,11 +10,11 @@ use html5gum::{Emitter, Reader, Token};
810use pretty_assertions:: assert_eq;
911
1012pub fn run_html5ever ( s : & str ) {
11- let mut reference_tokenizer = html5ever:: tokenizer:: Tokenizer :: new (
12- TokenSink {
13+ let reference_tokenizer = html5ever:: tokenizer:: Tokenizer :: new (
14+ TokenSink ( RefCell :: new ( TokenSinkInner {
1315 testing_tokenizer : html5gum:: Tokenizer :: new ( s) ,
1416 carried_over_token : None ,
15- } ,
17+ } ) ) ,
1618 TokenizerOpts {
1719 // the html5gum tokenizer does not handle the BOM, and also not discarding a BOM is
1820 // what the test suite expects, see https://github.com/html5lib/html5lib-tests/issues/2
@@ -31,19 +33,30 @@ pub fn run_html5ever(s: &str) {
3133 reference_tokenizer. end ( ) ;
3234}
3335
34- struct TokenSink < R : Reader , E : Emitter > {
36+ struct TokenSinkInner < R : Reader , E : Emitter > {
3537 testing_tokenizer : html5gum:: Tokenizer < R , E > ,
3638 carried_over_token : Option < Token > ,
3739}
3840
41+ struct TokenSink < R : Reader , E : Emitter > ( RefCell < TokenSinkInner < R , E > > ) ;
42+
3943impl < R : Reader , E : Emitter < Token = Token > > html5ever:: tokenizer:: TokenSink for TokenSink < R , E > {
4044 type Handle = ( ) ;
4145
4246 fn process_token (
43- & mut self ,
47+ & self ,
4448 reference_token : html5ever:: tokenizer:: Token ,
4549 _line_number : u64 ,
4650 ) -> TokenSinkResult < Self :: Handle > {
51+ self . 0 . borrow_mut ( ) . process_token ( reference_token)
52+ }
53+ }
54+
55+ impl < R : Reader , E : Emitter < Token = Token > > TokenSinkInner < R , E > {
56+ fn process_token (
57+ & mut self ,
58+ reference_token : html5ever:: tokenizer:: Token ,
59+ ) -> TokenSinkResult < ( ) > {
4760 if matches ! ( reference_token, Token2 :: ParseError ( _) ) {
4861 // TODO
4962 return TokenSinkResult :: Continue ;
0 commit comments