@@ -141,7 +141,8 @@ impl Color {
141
141
///
142
142
/// FIXME(#2) Deprecated CSS2 System Colors are not supported yet.
143
143
pub fn parse < ' i , ' t > ( input : & mut Parser < ' i , ' t > ) -> Result < Color , BasicParseError < ' i > > {
144
- let token = input. next ( ) ?;
144
+ // FIXME: remove clone() when lifetimes are non-lexical
145
+ let token = input. next ( ) ?. clone ( ) ;
145
146
match token {
146
147
Token :: Hash ( ref value) | Token :: IDHash ( ref value) => {
147
148
Color :: parse_hash ( value. as_bytes ( ) )
@@ -422,21 +423,17 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
422
423
if uses_commas {
423
424
arguments. expect_comma ( ) ?;
424
425
} else {
425
- match arguments. next ( ) ? {
426
- Token :: Delim ( '/' ) => { } ,
427
- t => return Err ( BasicParseError :: UnexpectedToken ( t) ) ,
428
- } ;
426
+ arguments. expect_delim ( '/' ) ?;
429
427
} ;
430
- let token = arguments. next ( ) ?;
431
- match token {
428
+ match * arguments. next ( ) ? {
432
429
Token :: Number { value : v, .. } => {
433
430
clamp_unit_f32 ( v)
434
431
}
435
432
Token :: Percentage { unit_value : v, .. } => {
436
433
clamp_unit_f32 ( v)
437
434
}
438
- t => {
439
- return Err ( BasicParseError :: UnexpectedToken ( t) )
435
+ ref t => {
436
+ return Err ( BasicParseError :: UnexpectedToken ( t. clone ( ) ) )
440
437
}
441
438
}
442
439
} else {
@@ -457,10 +454,10 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
457
454
458
455
// Either integers or percentages, but all the same type.
459
456
// https://drafts.csswg.org/css-color/#rgb-functions
460
- match arguments. next ( ) ? {
457
+ match arguments. next ( ) ?. clone ( ) {
461
458
Token :: Number { value : v, .. } => {
462
459
red = clamp_floor_256_f32 ( v) ;
463
- green = clamp_floor_256_f32 ( match arguments. next ( ) ? {
460
+ green = clamp_floor_256_f32 ( match arguments. next ( ) ?. clone ( ) {
464
461
Token :: Number { value : v, .. } => v,
465
462
Token :: Comma => {
466
463
uses_commas = true ;
@@ -475,7 +472,7 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
475
472
}
476
473
Token :: Percentage { unit_value, .. } => {
477
474
red = clamp_unit_f32 ( unit_value) ;
478
- green = clamp_unit_f32 ( match arguments. next ( ) ? {
475
+ green = clamp_unit_f32 ( match arguments. next ( ) ?. clone ( ) {
479
476
Token :: Percentage { unit_value, .. } => unit_value,
480
477
Token :: Comma => {
481
478
uses_commas = true ;
@@ -498,28 +495,26 @@ fn parse_rgb_components_hsl<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
498
495
let mut uses_commas = false ;
499
496
// Hue given as an angle
500
497
// https://drafts.csswg.org/css-values/#angles
501
- let token = arguments. next ( ) ?;
502
- let hue_degrees = match token {
503
- Token :: Number { value : v, .. } => Ok ( v) ,
498
+ let hue_degrees = match * arguments. next ( ) ? {
499
+ Token :: Number { value : v, .. } => v,
504
500
Token :: Dimension { value : v, ref unit, .. } => {
505
501
match_ignore_ascii_case ! { & * unit,
506
- "deg" => Ok ( v ) ,
507
- "grad" => Ok ( v * 360. / 400. ) ,
508
- "rad" => Ok ( v * 360. / ( 2. * PI ) ) ,
509
- "turn" => Ok ( v * 360. ) ,
510
- _ => Err ( ( ) ) ,
502
+ "deg" => v ,
503
+ "grad" => v * 360. / 400. ,
504
+ "rad" => v * 360. / ( 2. * PI ) ,
505
+ "turn" => v * 360. ,
506
+ _ => return Err ( BasicParseError :: UnexpectedToken ( Token :: Ident ( unit . clone ( ) ) ) ) ,
511
507
}
512
508
}
513
- t => return Err ( BasicParseError :: UnexpectedToken ( t) )
509
+ ref t => return Err ( BasicParseError :: UnexpectedToken ( t. clone ( ) ) )
514
510
} ;
515
- let hue_degrees = hue_degrees. map_err ( |( ) | BasicParseError :: UnexpectedToken ( token) ) ?;
516
511
// Subtract an integer before rounding, to avoid some rounding errors:
517
512
let hue_normalized_degrees = hue_degrees - 360. * ( hue_degrees / 360. ) . floor ( ) ;
518
513
let hue = hue_normalized_degrees / 360. ;
519
514
520
515
// Saturation and lightness are clamped to 0% ... 100%
521
516
// https://drafts.csswg.org/css-color/#the-hsl-notation
522
- let saturation = match arguments. next ( ) ? {
517
+ let saturation = match arguments. next ( ) ?. clone ( ) {
523
518
Token :: Percentage { unit_value, .. } => unit_value,
524
519
Token :: Comma => {
525
520
uses_commas = true ;
0 commit comments