Yorick Peterse
64d9ecfd53
XPath compiler support for number()
2015-08-19 20:14:23 +02:00
Yorick Peterse
58aa8f0833
Boolean support for Conversion.to_float
2015-08-19 20:14:23 +02:00
Yorick Peterse
43dab548e9
XPath compiler support for not()
2015-08-19 20:14:23 +02:00
Yorick Peterse
2585fbd0b7
XPath compiler support for normalize-space()
2015-08-19 20:14:23 +02:00
Yorick Peterse
e677a5abdf
XPath compiler support for namespace-uri()
2015-08-19 20:14:23 +02:00
Yorick Peterse
9cb589cb34
XPath compiler support for name()
2015-08-19 20:14:23 +02:00
Yorick Peterse
d408989499
Added expanded_name for Element and Attribute
2015-08-19 20:14:23 +02:00
Yorick Peterse
25e2f57a8d
XPath compiler support for local-name()
2015-08-19 20:14:23 +02:00
Yorick Peterse
49a7c2c782
Fixed incorrect spelling of "predicate"
2015-08-19 20:14:23 +02:00
Yorick Peterse
db93f845f3
Renamed on_predicate methods
...
This ensures they all start with "on_predicate".
2015-08-19 20:14:23 +02:00
Yorick Peterse
c026244f6e
XPath compiler support for id() in predicates
2015-08-19 20:14:23 +02:00
Yorick Peterse
49196c285f
XPath compiler support for lang()
2015-08-19 20:14:23 +02:00
Yorick Peterse
eb6cf68140
Tidied up YARD documentation of the XPath compiler
2015-08-19 20:14:23 +02:00
Yorick Peterse
54473d9865
Allow followed_by to take a block
...
This removes the need for a lot of local variables in the Compiler
class, at the cost of some extra indentation levels.
2015-08-19 20:14:22 +02:00
Yorick Peterse
7bcd462e22
XPath compiler support for id()
...
This has been largely ported over from the Evaluator implementation.
2015-08-19 20:14:22 +02:00
Yorick Peterse
2ff1f9ab4f
XPath compiler support for a bucket of functions
...
This includes the following functions:
* boolean()
* ceiling()
* floor()
* round()
* concat()
* contains()
* count()
2015-08-19 20:14:22 +02:00
Yorick Peterse
e3b45fddfc
to_float support for non String values
2015-08-19 20:14:22 +02:00
Yorick Peterse
f3f3c7d31c
Cleaned up literal usage in the XPath compiler
2015-08-19 20:14:22 +02:00
Yorick Peterse
44bd0751bc
Removed commented out code
...
Something something I should just get a decent debugging mode.
2015-08-19 20:14:22 +02:00
Yorick Peterse
e4e777ac4a
XPath compiler support for preceding-sibling
2015-08-19 20:14:22 +02:00
Yorick Peterse
7362a783b8
XPath compiler support for the preceding axis
2015-08-19 20:14:22 +02:00
Yorick Peterse
67bc338474
XPath compiler support for the namespace axis
2015-08-19 20:14:22 +02:00
Yorick Peterse
07b52fb48a
Added Ruby::Node#not
...
This is a shortcut for "!foo". Using this method one doesn't have to
worry about how the "!" operator binds. For example, this:
!foo.or(bar)
would be parsed/evaluated as this:
!(foo.or(bar))
when instead we want it to be this:
(!foo).or(bar)
Using explicit parenthesis leads to ugly code, so now we can do this
instead:
foo.not.or(bar)
2015-08-19 20:14:22 +02:00
Yorick Peterse
4698e98632
XPath compiler support for the following axis
2015-08-19 20:14:22 +02:00
Yorick Peterse
e04ca9be35
XPath compiler Support for following-sibling
...
This is a direct port of the same handler used in the Evaluator class.
The code is a bit rough on the edges but this will be cleaned up in
upcoming commits.
2015-08-19 20:14:22 +02:00
Yorick Peterse
02ee35122a
XPath compiler support for the self axis
2015-08-19 20:14:22 +02:00
Yorick Peterse
bc49af02a2
XPath compiler support for the parent axis
2015-08-19 20:14:22 +02:00
Yorick Peterse
ca7930cbf4
XPath compiler support for "descendant"
2015-08-19 20:14:22 +02:00
Yorick Peterse
f8671a96b7
Fixed compiler support for descendant-or-self
2015-08-19 20:14:22 +02:00
Yorick Peterse
23379d6467
Fixed node() type test for the XPath compiler
...
This ensures the handler behaves the same as in the old XPath evaluator.
2015-08-19 20:14:22 +02:00
Yorick Peterse
4da1c637bc
Cleaned up descendant-or-self compiler specs
2015-08-19 20:14:22 +02:00
Yorick Peterse
8a49d9c0ee
Basic compiler support for descendant-or-self
...
The generated code isn't entirely correct which considering the tests do
pass means the tests need to be fixed too.
2015-08-19 20:14:22 +02:00
Yorick Peterse
d50f89cdf1
Use "node" for axis variables
...
This ensures that any nested code uses the right variables.
2015-08-19 20:14:22 +02:00
Yorick Peterse
045cfe4ab8
XPath compiler support for operators in predicates
...
Previously the operator methods would ignore any blocks set by the
on_predicate family of methods.
2015-08-19 20:14:22 +02:00
Yorick Peterse
aa8386e6f3
Cleaned up compiler handling of axes/calls
...
Function call handlers don't receive a single AST node, instead they
receive the XPath arguments as separate method arguments.
2015-08-19 20:14:21 +02:00
Yorick Peterse
bfc970a95a
XPath compiler support for type tests
2015-08-19 20:14:21 +02:00
Yorick Peterse
ef59f160c7
XPath compiler support for true()/false()
2015-08-19 20:14:21 +02:00
Yorick Peterse
2eb12eced6
XPath compiler support for all operators
...
Some specs still fail due to true()/false() not being implemented but
the operators themselves should work just fine.
2015-08-19 20:14:21 +02:00
Yorick Peterse
3a18d23792
to_boolean support for truthy Ruby values
2015-08-19 20:14:21 +02:00
Yorick Peterse
06ae1503d4
nodes/attributes support in to_compatible_types
...
This extends XPath::Conversion.to_compatible_types so that it can also
take XML::Node and XML::Attribute objects as input.
2015-08-19 20:14:21 +02:00
Yorick Peterse
376d016acd
Expanded supported input for Conversion.to_float
...
This extends XPath::Conversion.to_float so it can also convert NodeSet
and Node instances.
2015-08-19 20:14:21 +02:00
Yorick Peterse
8a82cc3593
XPath compiler support for the "=" operator
2015-08-19 20:14:21 +02:00
Yorick Peterse
04aa8f6546
Ruby generator support for "begin" blocks
2015-08-19 20:14:21 +02:00
Yorick Peterse
92b43a7500
Renamed on_begin to on_followed_by
2015-08-19 20:14:21 +02:00
Yorick Peterse
c98ba21a87
Ruby generator support for mass assignments
2015-08-19 20:14:21 +02:00
Yorick Peterse
53c142ca26
Prefix compiler predicate methods with on_
2015-08-19 20:14:21 +02:00
Yorick Peterse
bea7e19d57
Cast compiled predicate indexes to integers
2015-08-19 20:14:21 +02:00
Yorick Peterse
1f2545c03b
Renamed xpath_number? to number?
2015-08-19 20:14:21 +02:00
Yorick Peterse
0e9f533358
Use return_nodeset? vs USE_NODESET
2015-08-19 20:14:21 +02:00
Yorick Peterse
9000d5efdb
XPath::Compiler#compile specifies blocks for paths
...
Previously the on_path method itself would specify a block to use when a
node was matched. This makes it impossible to customize this behaviour
which is needed when a path is used in an operator or predicate. By
letting the #compile() method specify the block other handlers can
overwrite it.
2015-08-19 20:14:21 +02:00