Yorick Peterse
bb8b328f5e
Revamp compiler specs for regular paths
2015-08-30 18:26:52 +02:00
Yorick Peterse
b74f8dc1a3
Removed compiler arity spec
...
This spec isn't very useful and breaks on 1.9 due to it apparently
handling arity values differently.
2015-08-30 01:55:31 +02:00
Yorick Peterse
1b62dd3256
Revamped compiler type test specs
2015-08-30 01:45:51 +02:00
Yorick Peterse
c6df73d031
Fix eq spec to not depend on at_xpath
2015-08-30 01:20:08 +02:00
Yorick Peterse
4ad4b89860
Revamp compiler specs for "self"
...
This also includes a fix for node() so that it matches attributes.
2015-08-28 16:57:24 +02:00
Yorick Peterse
3a04b1da06
Root element spec for "preceding-sibling"
2015-08-28 16:50:34 +02:00
Yorick Peterse
e8377b360a
Revamp compiler "preceding" specs
...
This also includes some fixes to make this axis behave correctly when
evaluate relative to a document.
2015-08-28 16:49:59 +02:00
Yorick Peterse
6b2874c507
Revamped compiler "preceding-sibling" specs
2015-08-28 16:30:26 +02:00
Yorick Peterse
84a9315b24
Revamped compiler specs for "parent"
2015-08-28 16:22:49 +02:00
Yorick Peterse
07658dadb1
Added Attribute#parent
2015-08-28 16:22:42 +02:00
Yorick Peterse
d0177633f8
Revamp namespace compiler specs
2015-08-28 15:58:42 +02:00
Yorick Peterse
a1e7d2d07f
Revamp compiler "following" specs
2015-08-28 15:53:57 +02:00
Yorick Peterse
824c897467
Revamp compiler specs for following-sibling
2015-08-28 15:48:03 +02:00
Yorick Peterse
aa3fbcf522
Revamp descendant compiler specs
2015-08-28 15:29:09 +02:00
Yorick Peterse
70bea2071c
Fixed ancestor-or-self relative to attributes
...
Per libxml behaviour this axis shouldn't match attributes when using
"ancestor-or-self::*".
2015-08-27 10:49:32 +02:00
Yorick Peterse
d5aad9c1c9
Revamp descendant-or-self compiler specs
2015-08-27 10:34:25 +02:00
Yorick Peterse
8f341b40d6
Revamp child axis compiler specs
2015-08-27 09:30:53 +02:00
Yorick Peterse
ed31b9f1d3
Revamp compiler specs for the attribute axis
2015-08-26 22:51:04 +02:00
Yorick Peterse
4fb7e2f6ce
Revamped ancestor/ancestor-or-self axis specs
...
This makes it easier to get more natural spec descriptions without
having to write them entirely by hand.
2015-08-26 22:35:13 +02:00
Yorick Peterse
9899a419b7
Added Attribute#each_ancestor
2015-08-26 22:26:46 +02:00
Yorick Peterse
365a9e9fa9
Replace (path) nodes with nested nodes
...
This changes the XPath AST so that every segment in a path (e.g.
foo/bar) is parsed as a child node of the node that precedes it. For
example, take the following expression:
foo/bar
This used to be parsed into the following AST:
(path
(axis "child" (test nil "foo"))
(axis "child" (test nil "bar")))
This is now parsed into the following AST:
(axis "child"
(test nil "foo")
(axis "child"
(test nil "bar")))
This new AST is much easier to deal with in the XPath::Compiler class,
especially when trying to ensure that each segment operates on the
correct input.
This commit also fixes parsing of type tests with predicates, such as:
comment()[10]
This used to throw a parser error.
2015-08-26 10:16:48 +02:00
Yorick Peterse
37ac844ebe
Fixed spec for sum() in a predicate
...
The return value of sum() should be used as a NodeSet index, not merely
just a truthy value.
2015-08-20 00:54:06 +02:00
Yorick Peterse
94ec1b5f5d
Corrected the last() compiler spec
...
This spec didn't match the correct nodes due to `1 < last()` always
evaluating to true in this particular case.
2015-08-20 00:23:58 +02:00
Yorick Peterse
7a4cb76d39
Cleaned up XPath last() specs a bit
2015-08-19 23:05:25 +02:00
Yorick Peterse
f41f6ff0c8
Only wrap followed_by nodes in begin/end
2015-08-19 20:14:24 +02:00
Yorick Peterse
a30cdba8d0
Fixed XPath compiler support for not()
2015-08-19 20:14:24 +02:00
Yorick Peterse
8e60c69def
Added spec for not() in a predicate
2015-08-19 20:14:24 +02:00
Yorick Peterse
0dcee637d3
Added Ruby::Node#if_false
2015-08-19 20:14:24 +02:00
Yorick Peterse
4b50a161ed
Wrap all compiler assignments in begin/end
...
This is much safer than having to explicitly call "wrap" in a potential
large amount of places.
2015-08-19 20:14:24 +02:00
Yorick Peterse
aaba0049ab
Updated XPath compiler arity spec
2015-08-19 20:14:24 +02:00
Yorick Peterse
b217aab2cb
XPath compiler support for translate()
2015-08-19 20:14:24 +02:00
Yorick Peterse
106d83e780
XPath compiler support for sum()
2015-08-19 20:14:24 +02:00
Yorick Peterse
e7e5b123cf
XPath compiler support for substring()
2015-08-19 20:14:24 +02:00
Yorick Peterse
be05008be9
Added substring-after() spec for a predicate
2015-08-19 20:14:24 +02:00
Yorick Peterse
b60ed03bb4
Added substring-before() spec for a predicate
2015-08-19 20:14:24 +02:00
Yorick Peterse
32dba554d7
Ruby generator support for Ranges
2015-08-19 20:14:23 +02:00
Yorick Peterse
0e3451881b
Specs for contains/starts-with in a predicate
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
d408989499
Added expanded_name for Element and Attribute
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
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
e3b45fddfc
to_float support for non String values
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
4da1c637bc
Cleaned up descendant-or-self compiler specs
2015-08-19 20:14:22 +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