Basic support for parsing CSS pseudo classes.
This currently does not yet allow chained pseudo classes, nor does it allow for pseudos such as nth-child(2n).
This commit is contained in:
parent
e2b36ad9a4
commit
d0a8a3b18c
|
@ -14,6 +14,7 @@ rule
|
||||||
path_member
|
path_member
|
||||||
: node_test
|
: node_test
|
||||||
| axis
|
| axis
|
||||||
|
| pseudo_class
|
||||||
;
|
;
|
||||||
|
|
||||||
path_members
|
path_members
|
||||||
|
@ -60,6 +61,11 @@ rule
|
||||||
| op_members T_HYPHEN_IN op_members { s(:hyphen_in, val[0],val[2]) }
|
| op_members T_HYPHEN_IN op_members { s(:hyphen_in, val[0],val[2]) }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
op_members
|
||||||
|
: node_test
|
||||||
|
| string
|
||||||
|
;
|
||||||
|
|
||||||
axis
|
axis
|
||||||
# x > y
|
# x > y
|
||||||
: node_test T_CHILD node_test
|
: node_test T_CHILD node_test
|
||||||
|
@ -80,14 +86,33 @@ rule
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
op_members
|
pseudo_class
|
||||||
: node_test
|
# x:root
|
||||||
| string
|
: node_test T_COLON T_IDENT { s(:pseudo, val[2], val[0]) }
|
||||||
|
|
||||||
|
# x:nth-child(2)
|
||||||
|
| node_test T_COLON T_IDENT T_LPAREN pseudo_args T_RPAREN
|
||||||
|
{
|
||||||
|
s(:pseudo, val[2], val[0], *val[4])
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
pseudo_args
|
||||||
|
: pseudo_args pseudo_arg { val[0] << val[1] }
|
||||||
|
| pseudo_arg { val }
|
||||||
|
;
|
||||||
|
|
||||||
|
pseudo_arg
|
||||||
|
: integer
|
||||||
;
|
;
|
||||||
|
|
||||||
string
|
string
|
||||||
: T_STRING { s(:string, val[0]) }
|
: T_STRING { s(:string, val[0]) }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
integer
|
||||||
|
: T_INT { s(:int, val[0].to_i) }
|
||||||
|
;
|
||||||
end
|
end
|
||||||
|
|
||||||
---- inner
|
---- inner
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Oga::CSS::Parser do
|
||||||
|
context 'pseudo classes' do
|
||||||
|
example 'parse the :root pseudo class' do
|
||||||
|
parse_css('x:root').should == s(:pseudo, 'root', s(:test, nil, 'x'))
|
||||||
|
end
|
||||||
|
|
||||||
|
example 'parse the :nth-child pseudo class' do
|
||||||
|
parse_css('x:nth-child(2)').should == s(
|
||||||
|
:pseudo,
|
||||||
|
'nth-child',
|
||||||
|
s(:test, nil, 'x'),
|
||||||
|
s(:int, 2)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue