2
2
extern crate rustler;
3
3
#[ macro_use]
4
4
extern crate lazy_static;
5
- extern crate tendril;
6
5
extern crate scoped_pool;
6
+ extern crate tendril;
7
7
8
8
extern crate html5ever;
9
9
extern crate markup5ever;
10
10
11
11
use std:: panic;
12
12
13
- use rustler:: { Env , Term , NifResult , Error , Encoder , Decoder } ;
14
- use rustler:: types:: binary:: Binary ;
15
13
use rustler:: env:: OwnedEnv ;
14
+ use rustler:: types:: binary:: Binary ;
15
+ use rustler:: { Decoder , Encoder , Env , Error , NifResult , Term } ;
16
16
17
17
use html5ever:: rcdom:: RcDom ;
18
- use html5ever:: driver:: ParseOpts ;
19
- use html5ever:: tokenizer:: TokenizerOpts ;
20
- use html5ever:: tree_builder:: TreeBuilderOpts ;
21
- use html5ever:: tree_builder:: QuirksMode ;
22
18
use tendril:: TendrilSink ;
23
19
24
- use :: common:: { QNW , STW } ;
25
-
26
20
mod common;
27
- mod rc_dom;
28
21
mod flat_dom;
22
+ mod rc_dom;
29
23
30
24
mod atoms {
31
25
rustler_atoms ! {
32
26
atom html5ever_nif_result;
33
27
34
28
atom ok;
35
29
atom error;
36
- atom nil;
37
30
atom nif_panic;
38
31
39
32
atom doctype;
40
33
atom comment;
41
34
42
- atom discard_bom;
43
- atom scripting_enabled;
44
- atom iframe_srcdoc;
45
- atom drop_doctype;
46
- atom error_level;
47
-
48
35
atom none;
49
36
atom some;
50
37
atom all;
@@ -71,40 +58,6 @@ impl<'a> Decoder<'a> for ErrorLevel {
71
58
}
72
59
}
73
60
74
- fn term_to_configs ( term : Term ) -> NifResult < ParseOpts > {
75
- if atoms:: nil ( ) == term {
76
- Ok ( ParseOpts :: default ( ) )
77
- } else {
78
- let env = term. get_env ( ) ;
79
-
80
- let errors: ErrorLevel = term. map_get ( atoms:: error_level ( ) . to_term ( env) ) ?. decode ( ) ?;
81
-
82
- let discard_bom: bool = term. map_get ( atoms:: discard_bom ( ) . to_term ( env) ) ?. decode ( ) ?;
83
- let scripting_enabled: bool = term. map_get ( atoms:: scripting_enabled ( ) . to_term ( env) ) ?
84
- . decode ( ) ?;
85
- let iframe_srcdoc: bool = term. map_get ( atoms:: iframe_srcdoc ( ) . to_term ( env) ) ?. decode ( ) ?;
86
- let drop_doctype: bool = term. map_get ( atoms:: drop_doctype ( ) . to_term ( env) ) ?. decode ( ) ?;
87
-
88
- Ok ( ParseOpts {
89
- tokenizer : TokenizerOpts {
90
- exact_errors : errors == ErrorLevel :: All ,
91
- discard_bom : discard_bom,
92
- profile : false ,
93
- initial_state : None ,
94
- last_start_tag_name : None ,
95
- } ,
96
- tree_builder : TreeBuilderOpts {
97
- exact_errors : errors == ErrorLevel :: All ,
98
- scripting_enabled : scripting_enabled,
99
- iframe_srcdoc : iframe_srcdoc,
100
- drop_doctype : drop_doctype,
101
- ignore_missing_rules : false ,
102
- quirks_mode : QuirksMode :: NoQuirks ,
103
- } ,
104
- } )
105
- }
106
- }
107
-
108
61
// Thread pool for `parse_async`.
109
62
// TODO: How do we decide on pool size?
110
63
lazy_static ! {
@@ -140,7 +93,11 @@ fn parse_async<'a>(env: Env<'a>, args: &[Term<'a>]) -> NifResult<Term<'a>> {
140
93
let result = parser. one ( std:: str:: from_utf8 ( binary. as_slice ( ) ) . unwrap ( ) ) ;
141
94
142
95
let result_term = rc_dom:: handle_to_term ( inner_env, & result. document ) ;
143
- ( atoms:: html5ever_nif_result ( ) , atoms:: ok ( ) , result_term. unwrap ( ) ) . encode ( inner_env)
96
+ (
97
+ atoms:: html5ever_nif_result ( ) ,
98
+ atoms:: ok ( ) ,
99
+ result_term. unwrap ( ) ,
100
+ ) . encode ( inner_env)
144
101
} ) {
145
102
Ok ( term) => term,
146
103
Err ( err) => {
@@ -174,7 +131,11 @@ fn parse_sync<'a>(env: Env<'a>, args: &[Term<'a>]) -> NifResult<Term<'a>> {
174
131
175
132
let result_term = rc_dom:: handle_to_term ( env, & result. document ) ;
176
133
177
- Ok ( ( atoms:: html5ever_nif_result ( ) , atoms:: ok ( ) , result_term. unwrap ( ) ) . encode ( env) )
134
+ Ok ( (
135
+ atoms:: html5ever_nif_result ( ) ,
136
+ atoms:: ok ( ) ,
137
+ result_term. unwrap ( ) ,
138
+ ) . encode ( env) )
178
139
}
179
140
180
141
fn flat_parse_sync < ' a > ( env : Env < ' a > , args : & [ Term < ' a > ] ) -> NifResult < Term < ' a > > {
@@ -192,14 +153,15 @@ fn flat_parse_sync<'a>(env: Env<'a>, args: &[Term<'a>]) -> NifResult<Term<'a>> {
192
153
Ok ( ( atoms:: html5ever_nif_result ( ) , atoms:: ok ( ) , result_term) . encode ( env) )
193
154
}
194
155
195
- rustler_export_nifs ! ( "Elixir.Html5ever.Native" ,
196
- [
197
- ( "parse_async" , 1 , parse_async) ,
198
- ( "parse_sync" , 1 , parse_sync) ,
199
- ( "flat_parse_sync" , 1 , flat_parse_sync)
200
- ] ,
201
- Some ( on_load) ) ;
202
-
156
+ rustler_export_nifs ! (
157
+ "Elixir.Html5ever.Native" ,
158
+ [
159
+ ( "parse_async" , 1 , parse_async) ,
160
+ ( "parse_sync" , 1 , parse_sync) ,
161
+ ( "flat_parse_sync" , 1 , flat_parse_sync)
162
+ ] ,
163
+ Some ( on_load)
164
+ ) ;
203
165
204
166
fn on_load < ' a > ( _env : Env < ' a > , _load_info : Term < ' a > ) -> bool {
205
167
true
0 commit comments