@@ -212,6 +212,7 @@ pub struct Tokenizer<'a> {
212
212
/// Cache for `source_location()`
213
213
last_known_line_break : Cell < ( usize , usize ) > ,
214
214
var_functions : VarFunctions ,
215
+ viewport_percentages : ViewportPercentages ,
215
216
}
216
217
217
218
#[ derive( Copy , Clone , PartialEq , Eq ) ]
@@ -221,6 +222,13 @@ enum VarFunctions {
221
222
SeenAtLeastOne ,
222
223
}
223
224
225
+ #[ derive( Copy , Clone , PartialEq , Eq ) ]
226
+ enum ViewportPercentages {
227
+ DontCare ,
228
+ LookingForThem ,
229
+ SeenAtLeastOne ,
230
+ }
231
+
224
232
225
233
impl < ' a > Tokenizer < ' a > {
226
234
#[ inline]
@@ -230,6 +238,7 @@ impl<'a> Tokenizer<'a> {
230
238
position : 0 ,
231
239
last_known_line_break : Cell :: new ( ( 1 , 0 ) ) ,
232
240
var_functions : VarFunctions :: DontCare ,
241
+ viewport_percentages : ViewportPercentages :: DontCare ,
233
242
}
234
243
}
235
244
@@ -245,6 +254,18 @@ impl<'a> Tokenizer<'a> {
245
254
seen
246
255
}
247
256
257
+ #[ inline]
258
+ pub fn look_for_viewport_percentages ( & mut self ) {
259
+ self . viewport_percentages = ViewportPercentages :: LookingForThem ;
260
+ }
261
+
262
+ #[ inline]
263
+ pub fn seen_viewport_percentages ( & mut self ) -> bool {
264
+ let seen = self . viewport_percentages == ViewportPercentages :: SeenAtLeastOne ;
265
+ self . viewport_percentages = ViewportPercentages :: DontCare ;
266
+ seen
267
+ }
268
+
248
269
#[ inline]
249
270
pub fn next ( & mut self ) -> Result < Token < ' a > , ( ) > {
250
271
next_token ( self ) . ok_or ( ( ) )
@@ -784,7 +805,16 @@ fn consume_numeric<'a>(tokenizer: &mut Tokenizer<'a>) -> Token<'a> {
784
805
has_sign : has_sign,
785
806
} ;
786
807
if is_ident_start ( tokenizer) {
787
- Dimension ( value, consume_name ( tokenizer) )
808
+ let name = consume_name ( tokenizer) ;
809
+ if tokenizer. viewport_percentages == ViewportPercentages :: LookingForThem {
810
+ match & * name {
811
+ "vh" | "vw" | "vmin" | "vmax" => {
812
+ tokenizer. viewport_percentages = ViewportPercentages :: SeenAtLeastOne ;
813
+ }
814
+ _ => { }
815
+ }
816
+ }
817
+ Dimension ( value, name)
788
818
} else {
789
819
Number ( value)
790
820
}
0 commit comments