55use std:: fmt;
66use std:: f32:: consts:: PI ;
77
8- use super :: { Token , Parser , ToCss , ParseError , BasicParseError } ;
8+ use super :: { Token , Parser , ToCss } ;
99use tokenizer:: NumericValue ;
1010
1111#[ cfg( feature = "serde" ) ]
@@ -141,48 +141,46 @@ 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 , BasicParseError < ' i > > {
145- let token = try!( input. next ( ) ) ;
146- match token {
147- Token :: Hash ( ref value) | Token :: IDHash ( ref value) => {
144+ pub fn parse ( input : & mut Parser ) -> Result < Color , ( ) > {
145+ match try!( input. next ( ) ) {
146+ Token :: Hash ( value) | Token :: IDHash ( value) => {
148147 Color :: parse_hash ( value. as_bytes ( ) )
149148 } ,
150- Token :: Ident ( ref value) => parse_color_keyword ( & * value) ,
151- Token :: Function ( ref name) => {
152- return input. parse_nested_block ( |arguments| {
149+ Token :: Ident ( value) => parse_color_keyword ( & * value) ,
150+ Token :: Function ( name) => {
151+ input. parse_nested_block ( |arguments| {
153152 parse_color_function ( & * name, arguments)
154- . map_err ( |e| ParseError :: Basic ( e) )
155- } ) . map_err ( ParseError :: < ( ) > :: basic) ;
153+ } )
156154 }
157155 _ => Err ( ( ) )
158- } . map_err ( | ( ) | BasicParseError :: UnexpectedToken ( token ) )
156+ }
159157 }
160158
161159 /// Parse a color hash, without the leading '#' character.
162160 #[ inline]
163161 pub fn parse_hash ( value : & [ u8 ] ) -> Result < Self , ( ) > {
164162 match value. len ( ) {
165- 8 => Ok ( rgba (
163+ 8 => rgba (
166164 try!( from_hex ( value[ 0 ] ) ) * 16 + try!( from_hex ( value[ 1 ] ) ) ,
167165 try!( from_hex ( value[ 2 ] ) ) * 16 + try!( from_hex ( value[ 3 ] ) ) ,
168166 try!( from_hex ( value[ 4 ] ) ) * 16 + try!( from_hex ( value[ 5 ] ) ) ,
169- try!( from_hex ( value[ 6 ] ) ) * 16 + try!( from_hex ( value[ 7 ] ) ) ) ,
167+ try!( from_hex ( value[ 6 ] ) ) * 16 + try!( from_hex ( value[ 7 ] ) ) ,
170168 ) ,
171- 6 => Ok ( rgb (
169+ 6 => rgb (
172170 try!( from_hex ( value[ 0 ] ) ) * 16 + try!( from_hex ( value[ 1 ] ) ) ,
173171 try!( from_hex ( value[ 2 ] ) ) * 16 + try!( from_hex ( value[ 3 ] ) ) ,
174- try!( from_hex ( value[ 4 ] ) ) * 16 + try!( from_hex ( value[ 5 ] ) ) ) ,
172+ try!( from_hex ( value[ 4 ] ) ) * 16 + try!( from_hex ( value[ 5 ] ) ) ,
175173 ) ,
176- 4 => Ok ( rgba (
174+ 4 => rgba (
177175 try!( from_hex ( value[ 0 ] ) ) * 17 ,
178176 try!( from_hex ( value[ 1 ] ) ) * 17 ,
179177 try!( from_hex ( value[ 2 ] ) ) * 17 ,
180- try!( from_hex ( value[ 3 ] ) ) * 17 ) ,
178+ try!( from_hex ( value[ 3 ] ) ) * 17 ,
181179 ) ,
182- 3 => Ok ( rgb (
180+ 3 => rgb (
183181 try!( from_hex ( value[ 0 ] ) ) * 17 ,
184182 try!( from_hex ( value[ 1 ] ) ) * 17 ,
185- try!( from_hex ( value[ 2 ] ) ) * 17 ) ,
183+ try!( from_hex ( value[ 2 ] ) ) * 17 ,
186184 ) ,
187185 _ => Err ( ( ) )
188186 }
@@ -192,13 +190,13 @@ impl Color {
192190
193191
194192#[ inline]
195- fn rgb ( red : u8 , green : u8 , blue : u8 ) -> Color {
193+ fn rgb ( red : u8 , green : u8 , blue : u8 ) -> Result < Color , ( ) > {
196194 rgba ( red, green, blue, 255 )
197195}
198196
199197#[ inline]
200- fn rgba ( red : u8 , green : u8 , blue : u8 , alpha : u8 ) -> Color {
201- Color :: RGBA ( RGBA :: new ( red, green, blue, alpha) )
198+ fn rgba ( red : u8 , green : u8 , blue : u8 , alpha : u8 ) -> Result < Color , ( ) > {
199+ Ok ( Color :: RGBA ( RGBA :: new ( red, green, blue, alpha) ) )
202200}
203201
204202
@@ -412,11 +410,11 @@ fn clamp_floor_256_f32(val: f32) -> u8 {
412410}
413411
414412#[ inline]
415- fn parse_color_function < ' i , ' t > ( name : & str , arguments : & mut Parser < ' i , ' t > ) -> Result < Color , BasicParseError < ' i > > {
413+ fn parse_color_function ( name : & str , arguments : & mut Parser ) -> Result < Color , ( ) > {
416414 let ( red, green, blue, uses_commas) = match_ignore_ascii_case ! { name,
417415 "rgb" | "rgba" => parse_rgb_components_rgb( arguments) ?,
418416 "hsl" | "hsla" => parse_rgb_components_hsl( arguments) ?,
419- _ => return Err ( BasicParseError :: UnexpectedToken ( Token :: Ident ( name . to_owned ( ) . into ( ) ) ) ) ,
417+ _ => return Err ( ( ) )
420418 } ;
421419
422420 let alpha = if !arguments. is_exhausted ( ) {
@@ -425,7 +423,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
425423 } else {
426424 match try!( arguments. next ( ) ) {
427425 Token :: Delim ( '/' ) => { } ,
428- t => return Err ( BasicParseError :: UnexpectedToken ( t ) ) ,
426+ _ => return Err ( ( ) )
429427 } ;
430428 } ;
431429 let token = try!( arguments. next ( ) ) ;
@@ -436,21 +434,21 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
436434 Token :: Percentage ( ref v) => {
437435 clamp_unit_f32 ( v. unit_value )
438436 }
439- t => {
440- return Err ( BasicParseError :: UnexpectedToken ( t ) )
437+ _ => {
438+ return Err ( ( ) )
441439 }
442440 }
443441 } else {
444442 255
445443 } ;
446444
447445 try!( arguments. expect_exhausted ( ) ) ;
448- Ok ( rgba ( red, green, blue, alpha) )
446+ rgba ( red, green, blue, alpha)
449447}
450448
451449
452450#[ inline]
453- fn parse_rgb_components_rgb < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , BasicParseError < ' i > > {
451+ fn parse_rgb_components_rgb ( arguments : & mut Parser ) -> Result < ( u8 , u8 , u8 , bool ) , ( ) > {
454452 let red: u8 ;
455453 let green: u8 ;
456454 let blue: u8 ;
@@ -467,7 +465,7 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
467465 uses_commas = true ;
468466 try!( arguments. expect_number ( ) )
469467 }
470- t => return Err ( BasicParseError :: UnexpectedToken ( t ) )
468+ _ => return Err ( ( ) )
471469 } ) ;
472470 if uses_commas {
473471 try!( arguments. expect_comma ( ) ) ;
@@ -482,38 +480,36 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
482480 uses_commas = true ;
483481 try!( arguments. expect_percentage ( ) )
484482 }
485- t => return Err ( BasicParseError :: UnexpectedToken ( t ) )
483+ _ => return Err ( ( ) )
486484 } ) ;
487485 if uses_commas {
488486 try!( arguments. expect_comma ( ) ) ;
489487 }
490488 blue = clamp_unit_f32 ( try!( arguments. expect_percentage ( ) ) ) ;
491489 }
492- t => return Err ( BasicParseError :: UnexpectedToken ( t ) )
490+ _ => return Err ( ( ) )
493491 } ;
494492 return Ok ( ( red, green, blue, uses_commas) ) ;
495493}
496494
497495#[ inline]
498- fn parse_rgb_components_hsl < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , BasicParseError < ' i > > {
496+ fn parse_rgb_components_hsl ( arguments : & mut Parser ) -> Result < ( u8 , u8 , u8 , bool ) , ( ) > {
499497 let mut uses_commas = false ;
500498 // Hue given as an angle
501499 // https://drafts.csswg.org/css-values/#angles
502- let token = try!( arguments. next ( ) ) ;
503- let hue_degrees = match token {
504- Token :: Number ( NumericValue { value : v, .. } ) => Ok ( v) ,
505- Token :: Dimension ( NumericValue { value : v, .. } , ref unit) => {
500+ let hue_degrees = match try!( arguments. next ( ) ) {
501+ Token :: Number ( NumericValue { value : v, .. } ) => v,
502+ Token :: Dimension ( NumericValue { value : v, .. } , unit) => {
506503 match_ignore_ascii_case ! { & * unit,
507- "deg" => Ok ( v ) ,
508- "grad" => Ok ( v * 360. / 400. ) ,
509- "rad" => Ok ( v * 360. / ( 2. * PI ) ) ,
510- "turn" => Ok ( v * 360. ) ,
511- _ => Err ( ( ) ) ,
504+ "deg" => v ,
505+ "grad" => v * 360. / 400. ,
506+ "rad" => v * 360. / ( 2. * PI ) ,
507+ "turn" => v * 360. ,
508+ _ => return Err ( ( ) )
512509 }
513510 }
514- t => return Err ( BasicParseError :: UnexpectedToken ( t ) )
511+ _ => return Err ( ( ) )
515512 } ;
516- let hue_degrees = try!( hue_degrees. map_err ( |( ) | BasicParseError :: UnexpectedToken ( token) ) ) ;
517513 // Subtract an integer before rounding, to avoid some rounding errors:
518514 let hue_normalized_degrees = hue_degrees - 360. * ( hue_degrees / 360. ) . floor ( ) ;
519515 let hue = hue_normalized_degrees / 360. ;
@@ -526,7 +522,7 @@ fn parse_rgb_components_hsl<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
526522 uses_commas = true ;
527523 try!( arguments. expect_percentage ( ) )
528524 }
529- t => return Err ( BasicParseError :: UnexpectedToken ( t ) )
525+ _ => return Err ( ( ) )
530526 } ;
531527 let saturation = saturation. max ( 0. ) . min ( 1. ) ;
532528
0 commit comments