5
5
use std:: fmt;
6
6
use std:: f32:: consts:: PI ;
7
7
8
- use super :: { Token , Parser , ToCss , ParseError } ;
8
+ use super :: { Token , Parser , ToCss , ParseError , BasicParseError } ;
9
9
use tokenizer:: NumericValue ;
10
10
11
11
#[ cfg( feature = "serde" ) ]
@@ -141,7 +141,7 @@ impl Color {
141
141
/// Parse a <color> value, per CSS Color Module Level 3.
142
142
///
143
143
/// FIXME(#2) Deprecated CSS2 System Colors are not supported yet.
144
- pub fn parse < ' i , ' t > ( input : & mut Parser < ' i , ' t > ) -> Result < Color , ParseError < ' i > > {
144
+ pub fn parse < ' i , ' t > ( input : & mut Parser < ' i , ' t > ) -> Result < Color , BasicParseError < ' i > > {
145
145
let token = try!( input. next ( ) ) ;
146
146
match token {
147
147
Token :: Hash ( ref value) | Token :: IDHash ( ref value) => {
@@ -151,10 +151,11 @@ impl Color {
151
151
Token :: Function ( ref name) => {
152
152
return input. parse_nested_block ( |arguments| {
153
153
parse_color_function ( & * name, arguments)
154
- } ) ;
154
+ . map_err ( |e| ParseError :: Basic ( e) )
155
+ } ) . map_err ( ParseError :: < ( ) > :: basic) ;
155
156
}
156
157
_ => Err ( ( ) )
157
- } . map_err ( |( ) | ParseError :: UnexpectedToken ( token) )
158
+ } . map_err ( |( ) | BasicParseError :: UnexpectedToken ( token) )
158
159
}
159
160
160
161
/// Parse a color hash, without the leading '#' character.
@@ -411,11 +412,11 @@ fn clamp_floor_256_f32(val: f32) -> u8 {
411
412
}
412
413
413
414
#[ inline]
414
- fn parse_color_function < ' i , ' t > ( name : & str , arguments : & mut Parser < ' i , ' t > ) -> Result < Color , ParseError < ' i > > {
415
+ fn parse_color_function < ' i , ' t > ( name : & str , arguments : & mut Parser < ' i , ' t > ) -> Result < Color , BasicParseError < ' i > > {
415
416
let ( red, green, blue, uses_commas) = match_ignore_ascii_case ! { name,
416
417
"rgb" | "rgba" => parse_rgb_components_rgb( arguments) ?,
417
418
"hsl" | "hsla" => parse_rgb_components_hsl( arguments) ?,
418
- _ => return Err ( ParseError :: UnexpectedToken ( Token :: Ident ( name. to_owned( ) . into( ) ) ) ) ,
419
+ _ => return Err ( BasicParseError :: UnexpectedToken ( Token :: Ident ( name. to_owned( ) . into( ) ) ) ) ,
419
420
} ;
420
421
421
422
let alpha = if !arguments. is_exhausted ( ) {
@@ -424,7 +425,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
424
425
} else {
425
426
match try!( arguments. next ( ) ) {
426
427
Token :: Delim ( '/' ) => { } ,
427
- t => return Err ( ParseError :: UnexpectedToken ( t) ) ,
428
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) ) ,
428
429
} ;
429
430
} ;
430
431
let token = try!( arguments. next ( ) ) ;
@@ -436,7 +437,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
436
437
clamp_unit_f32 ( v. unit_value )
437
438
}
438
439
t => {
439
- return Err ( ParseError :: UnexpectedToken ( t) )
440
+ return Err ( BasicParseError :: UnexpectedToken ( t) )
440
441
}
441
442
}
442
443
} else {
@@ -449,7 +450,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
449
450
450
451
451
452
#[ inline]
452
- fn parse_rgb_components_rgb < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , ParseError < ' i > > {
453
+ fn parse_rgb_components_rgb < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , BasicParseError < ' i > > {
453
454
let red: u8 ;
454
455
let green: u8 ;
455
456
let blue: u8 ;
@@ -466,7 +467,7 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
466
467
uses_commas = true ;
467
468
try!( arguments. expect_number ( ) )
468
469
}
469
- t => return Err ( ParseError :: UnexpectedToken ( t) )
470
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
470
471
} ) ;
471
472
if uses_commas {
472
473
try!( arguments. expect_comma ( ) ) ;
@@ -481,20 +482,20 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
481
482
uses_commas = true ;
482
483
try!( arguments. expect_percentage ( ) )
483
484
}
484
- t => return Err ( ParseError :: UnexpectedToken ( t) )
485
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
485
486
} ) ;
486
487
if uses_commas {
487
488
try!( arguments. expect_comma ( ) ) ;
488
489
}
489
490
blue = clamp_unit_f32 ( try!( arguments. expect_percentage ( ) ) ) ;
490
491
}
491
- t => return Err ( ParseError :: UnexpectedToken ( t) )
492
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
492
493
} ;
493
494
return Ok ( ( red, green, blue, uses_commas) ) ;
494
495
}
495
496
496
497
#[ inline]
497
- fn parse_rgb_components_hsl < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , ParseError < ' i > > {
498
+ fn parse_rgb_components_hsl < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , BasicParseError < ' i > > {
498
499
let mut uses_commas = false ;
499
500
// Hue given as an angle
500
501
// https://drafts.csswg.org/css-values/#angles
@@ -510,9 +511,9 @@ fn parse_rgb_components_hsl<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
510
511
_ => Err ( ( ) ) ,
511
512
}
512
513
}
513
- t => return Err ( ParseError :: UnexpectedToken ( t) )
514
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
514
515
} ;
515
- let hue_degrees = try!( hue_degrees. map_err ( |( ) | ParseError :: UnexpectedToken ( token) ) ) ;
516
+ let hue_degrees = try!( hue_degrees. map_err ( |( ) | BasicParseError :: UnexpectedToken ( token) ) ) ;
516
517
// Subtract an integer before rounding, to avoid some rounding errors:
517
518
let hue_normalized_degrees = hue_degrees - 360. * ( hue_degrees / 360. ) . floor ( ) ;
518
519
let hue = hue_normalized_degrees / 360. ;
@@ -525,7 +526,7 @@ fn parse_rgb_components_hsl<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
525
526
uses_commas = true ;
526
527
try!( arguments. expect_percentage ( ) )
527
528
}
528
- t => return Err ( ParseError :: UnexpectedToken ( t) )
529
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
529
530
} ;
530
531
let saturation = saturation. max ( 0. ) . min ( 1. ) ;
531
532
0 commit comments