Parsing of CSS predicates.
This adds support for parsing expressions such as "foo[class]".
This commit is contained in:
parent
665d5fe08c
commit
2dd148539d
|
@ -30,7 +30,8 @@ rule
|
||||||
;
|
;
|
||||||
|
|
||||||
node_test
|
node_test
|
||||||
: node_name { s(:test, *val[0]) }
|
: node_name { s(:test, *val[0]) }
|
||||||
|
| node_name predicate { s(:test, *val[0], val[1]) }
|
||||||
;
|
;
|
||||||
|
|
||||||
node_name
|
node_name
|
||||||
|
@ -43,6 +44,10 @@ rule
|
||||||
# |foo
|
# |foo
|
||||||
| T_PIPE T_IDENT { [nil, val[1]] }
|
| T_PIPE T_IDENT { [nil, val[1]] }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
predicate
|
||||||
|
: T_LBRACK expression T_RBRACK { val[1] }
|
||||||
|
;
|
||||||
end
|
end
|
||||||
|
|
||||||
---- inner
|
---- inner
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Oga::CSS::Parser do
|
||||||
|
context 'predicates' do
|
||||||
|
example 'parse a predicate' do
|
||||||
|
parse_css('foo[bar]').should == s(:test, nil, 'foo', s(:test, nil, 'bar'))
|
||||||
|
end
|
||||||
|
|
||||||
|
example 'parse a node test followed by a node test with a predicate' do
|
||||||
|
parse_css('foo bar[baz]').should == s(
|
||||||
|
:path,
|
||||||
|
s(:test, nil, 'foo'),
|
||||||
|
s(:test, nil, 'bar', s(:test, nil, 'baz'))
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue