Lex wildcards as T_IDENT instead of T_STAR.
This commit is contained in:
parent
45db337c76
commit
514c342cab
|
@ -145,14 +145,13 @@ module Oga
|
||||||
rparen = ')' @{ add_token(:T_RPAREN) };
|
rparen = ')' @{ add_token(:T_RPAREN) };
|
||||||
comma = ',' @{ add_token(:T_COMMA) };
|
comma = ',' @{ add_token(:T_COMMA) };
|
||||||
colon = ':' @{ add_token(:T_COLON) };
|
colon = ':' @{ add_token(:T_COLON) };
|
||||||
star = '*' @{ add_token(:T_STAR) };
|
|
||||||
|
|
||||||
# Identifiers
|
# Identifiers
|
||||||
#
|
#
|
||||||
# Identifiers are used for element names, namespaces, attribute names,
|
# Identifiers are used for element names, namespaces, attribute names,
|
||||||
# etc. Identifiers have to start with a letter.
|
# etc. Identifiers have to start with a letter.
|
||||||
|
|
||||||
identifier = [a-zA-Z]+ [a-zA-Z\-_0-9]*;
|
identifier = [a-zA-Z*]+ [a-zA-Z\-_0-9]*;
|
||||||
|
|
||||||
action emit_identifier {
|
action emit_identifier {
|
||||||
emit(:T_IDENT, ts, te)
|
emit(:T_IDENT, ts, te)
|
||||||
|
@ -281,7 +280,7 @@ module Oga
|
||||||
|
|
||||||
main := |*
|
main := |*
|
||||||
operator;
|
operator;
|
||||||
whitespace | slash | lparen | rparen | comma | colon | star;
|
whitespace | slash | lparen | rparen | comma | colon;
|
||||||
|
|
||||||
'[' => { add_token(:T_LBRACK) };
|
'[' => { add_token(:T_LBRACK) };
|
||||||
']' => { add_token(:T_RBRACK) };
|
']' => { add_token(:T_RBRACK) };
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
class Oga::XPath::Parser
|
class Oga::XPath::Parser
|
||||||
|
|
||||||
token T_AXIS T_COLON T_COMMA T_FLOAT T_INT T_IDENT T_STAR
|
token T_AXIS T_COLON T_COMMA T_FLOAT T_INT T_IDENT
|
||||||
token T_LBRACK T_RBRACK T_LPAREN T_RPAREN T_SLASH T_STRING
|
token T_LBRACK T_RBRACK T_LPAREN T_RPAREN T_SLASH T_STRING
|
||||||
token T_PIPE T_AND T_OR T_ADD T_DIV T_MOD T_EQ T_NEQ T_LT T_GT T_LTE T_GTE
|
token T_PIPE T_AND T_OR T_ADD T_DIV T_MOD T_EQ T_NEQ T_LT T_GT T_LTE T_GTE
|
||||||
|
|
||||||
|
|
|
@ -16,13 +16,13 @@ describe Oga::XPath::Lexer do
|
||||||
end
|
end
|
||||||
|
|
||||||
example 'lex a whildcard node test' do
|
example 'lex a whildcard node test' do
|
||||||
lex_xpath('/*').should == [[:T_SLASH, nil], [:T_STAR, nil]]
|
lex_xpath('/*').should == [[:T_SLASH, nil], [:T_IDENT, '*']]
|
||||||
end
|
end
|
||||||
|
|
||||||
example 'lex a wildcard node test for a namespace' do
|
example 'lex a wildcard node test for a namespace' do
|
||||||
lex_xpath('/*:foo').should == [
|
lex_xpath('/*:foo').should == [
|
||||||
[:T_SLASH, nil],
|
[:T_SLASH, nil],
|
||||||
[:T_STAR, nil],
|
[:T_IDENT, '*'],
|
||||||
[:T_COLON, nil],
|
[:T_COLON, nil],
|
||||||
[:T_IDENT, 'foo']
|
[:T_IDENT, 'foo']
|
||||||
]
|
]
|
||||||
|
|
|
@ -108,7 +108,7 @@ describe Oga::XPath::Lexer do
|
||||||
[:T_SLASH, nil],
|
[:T_SLASH, nil],
|
||||||
[:T_IDENT, 'foo'],
|
[:T_IDENT, 'foo'],
|
||||||
[:T_SLASH, nil],
|
[:T_SLASH, nil],
|
||||||
[:T_STAR, nil],
|
[:T_IDENT, '*'],
|
||||||
[:T_RBRACK, nil]
|
[:T_RBRACK, nil]
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Oga::XPath::Parser do
|
||||||
|
context 'wildcards' do
|
||||||
|
example 'parse a wildcard name test' do
|
||||||
|
parse_xpath('*').should == s(:path, s(:test, nil, '*'))
|
||||||
|
end
|
||||||
|
|
||||||
|
example 'parse a wildcard namespace test' do
|
||||||
|
parse_xpath('*:A').should == s(:path, s(:test, '*', 'A'))
|
||||||
|
end
|
||||||
|
|
||||||
|
example 'parse a wildcard namespace and name test' do
|
||||||
|
parse_xpath('*:*').should == s(:path, s(:test, '*', '*'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue