Skip to content

Commit 949ba19

Browse files
committed
Parse nth-child(-/*comment*/n+b) (fixes #153)
1 parent 1b1f703 commit 949ba19

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

src/css-parsing-tests/An+B.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@
8080
" -n +1", [-1, 1],
8181
"+ n +1", null,
8282
"- N +1", null,
83+
"+/**/n +1", [1, 1],
84+
"-/**/N +1", [-1, 1],
8385

8486
"3N -1", [3, -1],
8587
"+2n -1 ", [2, -1],

src/nth.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
1414
pub 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

Comments
 (0)