@@ -61,20 +61,24 @@ impl<'a, T> ParseError<'a, T> {
61
61
}
62
62
63
63
/// The owned input for a parser.
64
- pub struct ParserInput < ' t > ( Tokenizer < ' t > ) ;
64
+ pub struct ParserInput < ' t > {
65
+ tokenizer : Tokenizer < ' t > ,
66
+ }
65
67
66
68
impl < ' t > ParserInput < ' t > {
67
69
/// Create a new input for a parser.
68
70
pub fn new ( input : & ' t str ) -> ParserInput < ' t > {
69
- ParserInput ( Tokenizer :: new ( input) )
71
+ ParserInput {
72
+ tokenizer : Tokenizer :: new ( input) ,
73
+ }
70
74
}
71
75
}
72
76
73
77
/// A CSS parser that borrows its `&str` input,
74
78
/// yields `Token`s,
75
79
/// and keeps track of nested blocks and functions.
76
80
pub struct Parser < ' i : ' t , ' t > {
77
- tokenizer : & ' t mut ParserInput < ' i > ,
81
+ input : & ' t mut ParserInput < ' i > ,
78
82
/// If `Some(_)`, .parse_nested_block() can be called.
79
83
at_start_of : Option < BlockType > ,
80
84
/// For parsers from `parse_until` or `parse_nested_block`
@@ -182,15 +186,15 @@ impl<'i: 't, 't> Parser<'i, 't> {
182
186
#[ inline]
183
187
pub fn new ( input : & ' t mut ParserInput < ' i > ) -> Parser < ' i , ' t > {
184
188
Parser {
185
- tokenizer : input,
189
+ input : input,
186
190
at_start_of : None ,
187
191
stop_before : Delimiter :: None ,
188
192
}
189
193
}
190
194
191
195
/// Return the current line that is being parsed.
192
196
pub fn current_line ( & self ) -> & ' i str {
193
- self . tokenizer . 0 . current_source_line ( )
197
+ self . input . tokenizer . current_source_line ( )
194
198
}
195
199
196
200
/// Check whether the input is exhausted. That is, if `.next()` would return a token.
@@ -223,7 +227,7 @@ impl<'i: 't, 't> Parser<'i, 't> {
223
227
#[ inline]
224
228
pub fn position ( & self ) -> SourcePosition {
225
229
SourcePosition {
226
- position : self . tokenizer . 0 . position ( ) ,
230
+ position : self . input . tokenizer . position ( ) ,
227
231
at_start_of : self . at_start_of ,
228
232
}
229
233
}
@@ -234,35 +238,35 @@ impl<'i: 't, 't> Parser<'i, 't> {
234
238
/// Should only be used with `SourcePosition` values from the same `Parser` instance.
235
239
#[ inline]
236
240
pub fn reset ( & mut self , new_position : SourcePosition ) {
237
- self . tokenizer . 0 . reset ( new_position. position ) ;
241
+ self . input . tokenizer . reset ( new_position. position ) ;
238
242
self . at_start_of = new_position. at_start_of ;
239
243
}
240
244
241
245
/// Start looking for `var()` functions. (See the `.seen_var_functions()` method.)
242
246
#[ inline]
243
247
pub fn look_for_var_functions ( & mut self ) {
244
- self . tokenizer . 0 . look_for_var_functions ( )
248
+ self . input . tokenizer . look_for_var_functions ( )
245
249
}
246
250
247
251
/// Return whether a `var()` function has been seen by the tokenizer since
248
252
/// either `look_for_var_functions` was called, and stop looking.
249
253
#[ inline]
250
254
pub fn seen_var_functions ( & mut self ) -> bool {
251
- self . tokenizer . 0 . seen_var_functions ( )
255
+ self . input . tokenizer . seen_var_functions ( )
252
256
}
253
257
254
258
/// Start looking for viewport percentage lengths. (See the `seen_viewport_percentages`
255
259
/// method.)
256
260
#[ inline]
257
261
pub fn look_for_viewport_percentages ( & mut self ) {
258
- self . tokenizer . 0 . look_for_viewport_percentages ( )
262
+ self . input . tokenizer . look_for_viewport_percentages ( )
259
263
}
260
264
261
265
/// Return whether a `vh`, `vw`, `vmin`, or `vmax` dimension has been seen by the tokenizer
262
266
/// since `look_for_viewport_percentages` was called, and stop looking.
263
267
#[ inline]
264
268
pub fn seen_viewport_percentages ( & mut self ) -> bool {
265
- self . tokenizer . 0 . seen_viewport_percentages ( )
269
+ self . input . tokenizer . seen_viewport_percentages ( )
266
270
}
267
271
268
272
/// Execute the given closure, passing it the parser.
@@ -283,25 +287,25 @@ impl<'i: 't, 't> Parser<'i, 't> {
283
287
/// Return a slice of the CSS input
284
288
#[ inline]
285
289
pub fn slice ( & self , range : Range < SourcePosition > ) -> & ' i str {
286
- self . tokenizer . 0 . slice ( range. start . position ..range. end . position )
290
+ self . input . tokenizer . slice ( range. start . position ..range. end . position )
287
291
}
288
292
289
293
/// Return a slice of the CSS input, from the given position to the current one.
290
294
#[ inline]
291
295
pub fn slice_from ( & self , start_position : SourcePosition ) -> & ' i str {
292
- self . tokenizer . 0 . slice_from ( start_position. position )
296
+ self . input . tokenizer . slice_from ( start_position. position )
293
297
}
294
298
295
299
/// Return the line and column number within the input for the current position.
296
300
#[ inline]
297
301
pub fn current_source_location ( & self ) -> SourceLocation {
298
- self . tokenizer . 0 . current_source_location ( )
302
+ self . input . tokenizer . current_source_location ( )
299
303
}
300
304
301
305
/// Return the line and column number within the input for the given position.
302
306
#[ inline]
303
307
pub fn source_location ( & self , target : SourcePosition ) -> SourceLocation {
304
- self . tokenizer . 0 . source_location ( target. position )
308
+ self . input . tokenizer . source_location ( target. position )
305
309
}
306
310
307
311
/// Return the next token in the input that is neither whitespace or a comment,
@@ -342,13 +346,13 @@ impl<'i: 't, 't> Parser<'i, 't> {
342
346
/// comments should always be ignored between tokens.
343
347
pub fn next_including_whitespace_and_comments ( & mut self ) -> Result < Token < ' i > , BasicParseError < ' i > > {
344
348
if let Some ( block_type) = self . at_start_of . take ( ) {
345
- consume_until_end_of_block ( block_type, & mut self . tokenizer . 0 ) ;
349
+ consume_until_end_of_block ( block_type, & mut self . input . tokenizer ) ;
346
350
}
347
- let byte = self . tokenizer . 0 . next_byte ( ) ;
351
+ let byte = self . input . tokenizer . next_byte ( ) ;
348
352
if self . stop_before . contains ( Delimiters :: from_byte ( byte) ) {
349
353
return Err ( BasicParseError :: EndOfInput )
350
354
}
351
- let token = self . tokenizer . 0 . next ( ) . map_err ( |( ) | BasicParseError :: EndOfInput ) ?;
355
+ let token = self . input . tokenizer . next ( ) . map_err ( |( ) | BasicParseError :: EndOfInput ) ?;
352
356
if let Some ( block_type) = BlockType :: opening ( & token) {
353
357
self . at_start_of = Some ( block_type) ;
354
358
}
@@ -665,23 +669,23 @@ pub fn parse_until_before<'i: 't, 't, F, T, E>(parser: &mut Parser<'i, 't>,
665
669
// Introduce a new scope to limit duration of nested_parser’s borrow
666
670
{
667
671
let mut delimited_parser = Parser {
668
- tokenizer : parser. tokenizer ,
672
+ input : parser. input ,
669
673
at_start_of : parser. at_start_of . take ( ) ,
670
674
stop_before : delimiters,
671
675
} ;
672
676
result = delimited_parser. parse_entirely ( parse) ;
673
677
if let Some ( block_type) = delimited_parser. at_start_of {
674
- consume_until_end_of_block ( block_type, & mut delimited_parser. tokenizer . 0 ) ;
678
+ consume_until_end_of_block ( block_type, & mut delimited_parser. input . tokenizer ) ;
675
679
}
676
680
}
677
681
// FIXME: have a special-purpose tokenizer method for this that does less work.
678
682
loop {
679
- if delimiters. contains ( Delimiters :: from_byte ( ( parser. tokenizer . 0 ) . next_byte ( ) ) ) {
683
+ if delimiters. contains ( Delimiters :: from_byte ( ( parser. input . tokenizer ) . next_byte ( ) ) ) {
680
684
break
681
685
}
682
- if let Ok ( token) = ( parser. tokenizer . 0 ) . next ( ) {
686
+ if let Ok ( token) = ( parser. input . tokenizer ) . next ( ) {
683
687
if let Some ( block_type) = BlockType :: opening ( & token) {
684
- consume_until_end_of_block ( block_type, & mut parser. tokenizer . 0 ) ;
688
+ consume_until_end_of_block ( block_type, & mut parser. input . tokenizer ) ;
685
689
}
686
690
} else {
687
691
break
@@ -696,12 +700,12 @@ pub fn parse_until_after<'i: 't, 't, F, T, E>(parser: &mut Parser<'i, 't>,
696
700
-> Result < T , ParseError < ' i , E > >
697
701
where F : for < ' tt > FnOnce ( & mut Parser < ' i , ' tt > ) -> Result < T , ParseError < ' i , E > > {
698
702
let result = parser. parse_until_before ( delimiters, parse) ;
699
- let next_byte = ( parser. tokenizer . 0 ) . next_byte ( ) ;
703
+ let next_byte = ( parser. input . tokenizer ) . next_byte ( ) ;
700
704
if next_byte. is_some ( ) && !parser. stop_before . contains ( Delimiters :: from_byte ( next_byte) ) {
701
705
debug_assert ! ( delimiters. contains( Delimiters :: from_byte( next_byte) ) ) ;
702
- ( parser. tokenizer . 0 ) . advance ( 1 ) ;
706
+ ( parser. input . tokenizer ) . advance ( 1 ) ;
703
707
if next_byte == Some ( b'{' ) {
704
- consume_until_end_of_block ( BlockType :: CurlyBracket , & mut parser. tokenizer . 0 ) ;
708
+ consume_until_end_of_block ( BlockType :: CurlyBracket , & mut parser. input . tokenizer ) ;
705
709
}
706
710
}
707
711
result
@@ -724,16 +728,16 @@ pub fn parse_nested_block<'i: 't, 't, F, T, E>(parser: &mut Parser<'i, 't>, pars
724
728
// Introduce a new scope to limit duration of nested_parser’s borrow
725
729
{
726
730
let mut nested_parser = Parser {
727
- tokenizer : parser. tokenizer ,
731
+ input : parser. input ,
728
732
at_start_of : None ,
729
733
stop_before : closing_delimiter,
730
734
} ;
731
735
result = nested_parser. parse_entirely ( parse) ;
732
736
if let Some ( block_type) = nested_parser. at_start_of {
733
- consume_until_end_of_block ( block_type, & mut nested_parser. tokenizer . 0 ) ;
737
+ consume_until_end_of_block ( block_type, & mut nested_parser. input . tokenizer ) ;
734
738
}
735
739
}
736
- consume_until_end_of_block ( block_type, & mut parser. tokenizer . 0 ) ;
740
+ consume_until_end_of_block ( block_type, & mut parser. input . tokenizer ) ;
737
741
result
738
742
}
739
743
0 commit comments