Parsing of pseudo classes without node tests.

This commit is contained in:
Yorick Peterse 2014-10-07 23:01:58 +02:00
parent a6b0bd96c8
commit 91f9cc984b
2 changed files with 31 additions and 7 deletions

View File

@ -122,14 +122,25 @@ rule
; ;
pseudo_class pseudo_class
# :root
: pseudo_name { s(:pseudo, val[0]) }
# x:root # x:root
: path_member T_COLON T_IDENT { s(:pseudo, val[2], val[0]) } | path_member pseudo_name { s(:pseudo, val[1], val[0]) }
# :nth-child(2)
| pseudo_name pseudo_args { s(:pseudo, val[0], nil, val[1]) }
# x:nth-child(2) # x:nth-child(2)
| path_member T_COLON T_IDENT T_LPAREN pseudo_arg T_RPAREN | path_member pseudo_name pseudo_args { s(:pseudo, val[1], val[0], val[2]) }
{ ;
s(:pseudo, val[2], val[0], val[4])
} pseudo_name
: T_COLON T_IDENT { val[1] }
;
pseudo_args
: T_LPAREN pseudo_arg T_RPAREN { val[1] }
; ;
pseudo_arg pseudo_arg

View File

@ -2,11 +2,15 @@ require 'spec_helper'
describe Oga::CSS::Parser do describe Oga::CSS::Parser do
context 'pseudo classes' do context 'pseudo classes' do
example 'parse the :root pseudo class' do example 'parse the x:root pseudo class' do
parse_css('x:root').should == s(:pseudo, 'root', s(:test, nil, 'x')) parse_css('x:root').should == s(:pseudo, 'root', s(:test, nil, 'x'))
end end
example 'parse the x:nth-child pseudo class' do example 'parse the :root pseudo class' do
parse_css(':root').should == s(:pseudo, 'root')
end
example 'parse the x:nth-child(1) pseudo class' do
parse_css('x:nth-child(1)').should == s( parse_css('x:nth-child(1)').should == s(
:pseudo, :pseudo,
'nth-child', 'nth-child',
@ -15,6 +19,15 @@ describe Oga::CSS::Parser do
) )
end end
example 'parse the :nth-child(1) pseudo class' do
parse_css(':nth-child(1)').should == s(
:pseudo,
'nth-child',
nil,
s(:int, 1)
)
end
example 'parse the x:nth-child(odd) pseudo class' do example 'parse the x:nth-child(odd) pseudo class' do
parse_css('x:nth-child(odd)').should == s( parse_css('x:nth-child(odd)').should == s(
:pseudo, :pseudo,