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,18 +141,19 @@ 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) => parse_color_hash ( & * value) ,
148
148
Token :: Ident ( ref value) => parse_color_keyword ( & * value) ,
149
149
Token :: Function ( ref name) => {
150
150
return input. parse_nested_block ( |arguments| {
151
151
parse_color_function ( & * name, arguments)
152
- } ) ;
152
+ . map_err ( |e| ParseError :: Basic ( e) )
153
+ } ) . map_err ( ParseError :: < ( ) > :: basic) ;
153
154
}
154
155
_ => Err ( ( ) )
155
- } . map_err ( |( ) | ParseError :: UnexpectedToken ( token) )
156
+ } . map_err ( |( ) | BasicParseError :: UnexpectedToken ( token) )
156
157
}
157
158
}
158
159
@@ -402,11 +403,11 @@ fn clamp_256_f32(val: f32) -> u8 {
402
403
}
403
404
404
405
#[ inline]
405
- fn parse_color_function < ' i , ' t > ( name : & str , arguments : & mut Parser < ' i , ' t > ) -> Result < Color , ParseError < ' i > > {
406
+ fn parse_color_function < ' i , ' t > ( name : & str , arguments : & mut Parser < ' i , ' t > ) -> Result < Color , BasicParseError < ' i > > {
406
407
let ( red, green, blue, uses_commas) = match_ignore_ascii_case ! { name,
407
408
"rgb" | "rgba" => parse_rgb_components_rgb( arguments) ?,
408
409
"hsl" | "hsla" => parse_rgb_components_hsl( arguments) ?,
409
- _ => return Err ( ParseError :: UnexpectedToken ( Token :: Ident ( name. to_owned( ) . into( ) ) ) ) ,
410
+ _ => return Err ( BasicParseError :: UnexpectedToken ( Token :: Ident ( name. to_owned( ) . into( ) ) ) ) ,
410
411
} ;
411
412
412
413
let alpha = if !arguments. is_exhausted ( ) {
@@ -415,7 +416,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
415
416
} else {
416
417
match try!( arguments. next ( ) ) {
417
418
Token :: Delim ( '/' ) => { } ,
418
- t => return Err ( ParseError :: UnexpectedToken ( t) ) ,
419
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) ) ,
419
420
} ;
420
421
} ;
421
422
let token = try!( arguments. next ( ) ) ;
@@ -427,7 +428,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
427
428
clamp_unit_f32 ( v. unit_value )
428
429
}
429
430
t => {
430
- return Err ( ParseError :: UnexpectedToken ( t) )
431
+ return Err ( BasicParseError :: UnexpectedToken ( t) )
431
432
}
432
433
}
433
434
} else {
@@ -440,7 +441,7 @@ fn parse_color_function<'i, 't>(name: &str, arguments: &mut Parser<'i, 't>) -> R
440
441
441
442
442
443
#[ inline]
443
- fn parse_rgb_components_rgb < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , ParseError < ' i > > {
444
+ fn parse_rgb_components_rgb < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , BasicParseError < ' i > > {
444
445
let red: u8 ;
445
446
let green: u8 ;
446
447
let blue: u8 ;
@@ -457,7 +458,7 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
457
458
uses_commas = true ;
458
459
try!( arguments. expect_number ( ) )
459
460
}
460
- t => return Err ( ParseError :: UnexpectedToken ( t) )
461
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
461
462
} ) ;
462
463
if uses_commas {
463
464
try!( arguments. expect_comma ( ) ) ;
@@ -472,20 +473,20 @@ fn parse_rgb_components_rgb<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
472
473
uses_commas = true ;
473
474
try!( arguments. expect_percentage ( ) )
474
475
}
475
- t => return Err ( ParseError :: UnexpectedToken ( t) )
476
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
476
477
} ) ;
477
478
if uses_commas {
478
479
try!( arguments. expect_comma ( ) ) ;
479
480
}
480
481
blue = clamp_unit_f32 ( try!( arguments. expect_percentage ( ) ) ) ;
481
482
}
482
- t => return Err ( ParseError :: UnexpectedToken ( t) )
483
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
483
484
} ;
484
485
return Ok ( ( red, green, blue, uses_commas) ) ;
485
486
}
486
487
487
488
#[ inline]
488
- fn parse_rgb_components_hsl < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , ParseError < ' i > > {
489
+ fn parse_rgb_components_hsl < ' i , ' t > ( arguments : & mut Parser < ' i , ' t > ) -> Result < ( u8 , u8 , u8 , bool ) , BasicParseError < ' i > > {
489
490
let mut uses_commas = false ;
490
491
// Hue given as an angle
491
492
// https://drafts.csswg.org/css-values/#angles
@@ -501,9 +502,9 @@ fn parse_rgb_components_hsl<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
501
502
_ => Err ( ( ) ) ,
502
503
}
503
504
}
504
- t => return Err ( ParseError :: UnexpectedToken ( t) )
505
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
505
506
} ;
506
- let hue_degrees = try!( hue_degrees. map_err ( |( ) | ParseError :: UnexpectedToken ( token) ) ) ;
507
+ let hue_degrees = try!( hue_degrees. map_err ( |( ) | BasicParseError :: UnexpectedToken ( token) ) ) ;
507
508
// Subtract an integer before rounding, to avoid some rounding errors:
508
509
let hue_normalized_degrees = hue_degrees - 360. * ( hue_degrees / 360. ) . floor ( ) ;
509
510
let hue = hue_normalized_degrees / 360. ;
@@ -516,7 +517,7 @@ fn parse_rgb_components_hsl<'i, 't>(arguments: &mut Parser<'i, 't>) -> Result<(u
516
517
uses_commas = true ;
517
518
try!( arguments. expect_percentage ( ) )
518
519
}
519
- t => return Err ( ParseError :: UnexpectedToken ( t) )
520
+ t => return Err ( BasicParseError :: UnexpectedToken ( t) )
520
521
} ;
521
522
let saturation = saturation. max ( 0. ) . min ( 1. ) ;
522
523
0 commit comments