@@ -12,7 +12,8 @@ use super::{Token, Parser};
1212/// in which case the caller needs to check if the arguments’ parser is exhausted.
1313/// Return `Ok((A, B))`, or `Err(())` for a syntax error.
1414pub fn parse_nth ( input : & mut Parser ) -> Result < ( i32 , i32 ) , ( ) > {
15- match try!( input. next ( ) ) {
15+ let tok = try!( input. next ( ) ) ;
16+ match tok {
1617 Token :: Number ( value) => Ok ( ( 0 , try!( value. int_value . ok_or ( ( ) ) ) as i32 ) ) ,
1718 Token :: Dimension ( value, unit) => {
1819 let a = try!( value. int_value . ok_or ( ( ) ) ) as i32 ;
@@ -37,12 +38,17 @@ pub fn parse_nth(input: &mut Parser) -> Result<(i32, i32), ()> {
3738 }
3839 }
3940 }
40- Token :: Delim ( '+' ) => match try!( input. next_including_whitespace ( ) ) {
41- Token :: Ident ( value) => {
42- match_ignore_ascii_case ! { & value,
43- "n" => parse_b( input, 1 ) ,
44- "n-" => parse_signless_b( input, 1 , -1 ) ,
45- _ => Ok ( ( 1 , try!( parse_n_dash_digits( & * value) ) ) )
41+ Token :: Delim ( '+' ) | Token :: Delim ( '-' ) => match try!( input. next_including_whitespace ( ) ) {
42+ Token :: Ident ( n) => {
43+ let val = if Token :: Delim ( '+' ) == tok {
44+ 1
45+ } else {
46+ -1
47+ } ;
48+ match_ignore_ascii_case ! { & n,
49+ "n" => parse_b( input, val) ,
50+ "n-" => parse_signless_b( input, val, -1 ) ,
51+ _ => Ok ( ( 1 , try!( parse_n_dash_digits( & * n) ) ) )
4652 }
4753 }
4854 _ => Err ( ( ) )
0 commit comments