55use std:: fmt;
66use std:: f32:: consts:: PI ;
77
8- use super :: { Token , Parser , ToCss , ParseError } ;
8+ use super :: { Token , Parser , ToCss , ParseError , BasicParseError } ;
99use tokenizer:: NumericValue ;
1010
1111#[ cfg( feature = "serde" ) ]
@@ -141,7 +141,7 @@ impl Color {
141141 /// Parse a <color> value, per CSS Color Module Level 3.
142142 ///
143143 /// 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 > > {
145145 let token = try!( input. next ( ) ) ;
146146 match token {
147147 Token :: Hash ( ref value) | Token :: IDHash ( ref value) => {
@@ -151,10 +151,11 @@ impl Color {
151151 Token :: Function ( ref name) => {
152152 return input. parse_nested_block ( |arguments| {
153153 parse_color_function ( & * name, arguments)
154- } ) ;
154+ . map_err ( |e| ParseError :: Basic ( e) )
155+ } ) . map_err ( ParseError :: < ( ) > :: basic) ;
155156 }
156157 _ => Err ( ( ) )
157- } . map_err ( |( ) | ParseError :: UnexpectedToken ( token) )
158+ } . map_err ( |( ) | BasicParseError :: UnexpectedToken ( token) )
158159 }
159160
160161 /// Parse a color hash, without the leading '#' character.
@@ -411,11 +412,11 @@ fn clamp_floor_256_f32(val: f32) -> u8 {
411412}
412413
413414#[ 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 > > {
415416 let ( red, green, blue, uses_commas) = match_ignore_ascii_case ! { name,
416417 "rgb" | "rgba" => parse_rgb_components_rgb( arguments) ?,
417418 "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( ) ) ) ) ,
419420 } ;
420421
421422 let alpha = if !arguments. is_exhausted ( ) {
@@ -424,7 +425,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
424425 } else {
425426 match try!( arguments. next ( ) ) {
426427 Token :: Delim ( '/' ) => { } ,
427- t => return Err ( ParseError :: UnexpectedToken ( t) ) ,
428+ t => return Err ( BasicParseError :: UnexpectedToken ( t) ) ,
428429 } ;
429430 } ;
430431 let token = try!( arguments. next ( ) ) ;
@@ -436,7 +437,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
436437 clamp_unit_f32 ( v. unit_value )
437438 }
438439 t => {
439- return Err ( ParseError :: UnexpectedToken ( t) )
440+ return Err ( BasicParseError :: UnexpectedToken ( t) )
440441 }
441442 }
442443 } else {
@@ -449,7 +450,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
449450
450451
451452#[ 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 > > {
453454 let red: u8 ;
454455 let green: u8 ;
455456 let blue: u8 ;
@@ -466,7 +467,7 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
466467 uses_commas = true ;
467468 try!( arguments. expect_number ( ) )
468469 }
469- t => return Err ( ParseError :: UnexpectedToken ( t) )
470+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
470471 } ) ;
471472 if uses_commas {
472473 try!( arguments. expect_comma ( ) ) ;
@@ -481,20 +482,20 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
481482 uses_commas = true ;
482483 try!( arguments. expect_percentage ( ) )
483484 }
484- t => return Err ( ParseError :: UnexpectedToken ( t) )
485+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
485486 } ) ;
486487 if uses_commas {
487488 try!( arguments. expect_comma ( ) ) ;
488489 }
489490 blue = clamp_unit_f32 ( try!( arguments. expect_percentage ( ) ) ) ;
490491 }
491- t => return Err ( ParseError :: UnexpectedToken ( t) )
492+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
492493 } ;
493494 return Ok ( ( red, green, blue, uses_commas) ) ;
494495}
495496
496497#[ 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 > > {
498499 let mut uses_commas = false ;
499500 // Hue given as an angle
500501 // 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
510511 _ => Err ( ( ) ) ,
511512 }
512513 }
513- t => return Err ( ParseError :: UnexpectedToken ( t) )
514+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
514515 } ;
515- let hue_degrees = try!( hue_degrees. map_err ( |( ) | ParseError :: UnexpectedToken ( token) ) ) ;
516+ let hue_degrees = try!( hue_degrees. map_err ( |( ) | BasicParseError :: UnexpectedToken ( token) ) ) ;
516517 // Subtract an integer before rounding, to avoid some rounding errors:
517518 let hue_normalized_degrees = hue_degrees - 360. * ( hue_degrees / 360. ) . floor ( ) ;
518519 let hue = hue_normalized_degrees / 360. ;
@@ -525,7 +526,7 @@ fn parse_rgb_components_hsl<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
525526 uses_commas = true ;
526527 try!( arguments. expect_percentage ( ) )
527528 }
528- t => return Err ( ParseError :: UnexpectedToken ( t) )
529+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
529530 } ;
530531 let saturation = saturation. max ( 0. ) . min ( 1. ) ;
531532
0 commit comments