Commit Graph

327 Commits

Author SHA1 Message Date
Yorick Peterse d8e2b97031 Tweaked docs of the XML parsers. 2014-09-04 09:34:59 +02:00
Yorick Peterse fbf3ae6e36 Manually increment XPath indexes.
This ensures that the index is only incremented for elements that match a node
test.
2014-09-03 23:56:13 +02:00
Yorick Peterse 81a62a6f00 Added XML::Attribute#text
This allows attributes to also be used for axes such as "=".
2014-09-03 23:38:00 +02:00
Yorick Peterse dc5874f5aa Show XML parsing errors when using IO as input.
Previously this wouldn't display anything due to the IO object being exhausted.
To fix this the input has to be wound back to the start, which means re-reading
it. Sadly I can't think of a way around this that doesn't require buffering
lines while parsing them (which massively increases memory usage).
2014-09-03 22:52:59 +02:00
Yorick Peterse d67f43508d Use #each_line instead of #lines.
IO#each_line is deprecated so lets not rely on it.
2014-09-03 22:31:54 +02:00
Yorick Peterse bd31379c85 Fixed processing of nested predicates.
This ensures that nested predicates and functions that depend on predicates are
processed correctly.
2014-09-03 20:56:07 +02:00
Yorick Peterse e858b54c58 Use nested node stacks for predicates.
This ensures the current context node is set correctly when using the "self"
axis inside a path that's inside a predicate, e.g.

    foo/bar[baz/. = "something"]

Here the "self" axis should refer to foo/bar/baz, _not_ foo/bar.
2014-09-03 19:54:16 +02:00
Yorick Peterse 2b96d65103 XPath "self" axis inside predicates.
The "self" axis should use the current context node when inside a predicate.
2014-09-03 09:40:17 +02:00
Yorick Peterse 71f2b42074 Convenience methods for parsing XML/HTML. 2014-09-03 09:31:48 +02:00
Yorick Peterse d92133ef43 Benchmark Oga XPath evaluation without the parser.
This gives better insight in the performance of the evaluator itself.
2014-09-02 20:55:42 +02:00
Yorick Peterse 9649b50cc9 XML module for more easily querying using XPath. 2014-09-02 20:16:52 +02:00
Yorick Peterse ad34ab47a0 Support for binding/evaluating XPath variables. 2014-09-02 19:04:02 +02:00
Yorick Peterse 5a0e8c5480 Lexing/parsing of XPath variable references. 2014-09-02 10:52:08 +02:00
Yorick Peterse 5de37bdf81 Support for the XPath ">=" operator. 2014-09-01 22:45:01 +02:00
Yorick Peterse 099227901a Support for the XPath "<=" operator. 2014-09-01 22:40:50 +02:00
Yorick Peterse 6eacf74da4 Fixed comparing node equality in XPath expressions
Previously this would take the text of the entire node set, not of the first
node in the set.
2014-09-01 22:34:18 +02:00
Yorick Peterse 8884db8cb6 Support for the XPath ">" operator. 2014-09-01 22:23:35 +02:00
Yorick Peterse 6b45a03cb4 Support for the XPath "<" operator. 2014-09-01 22:20:32 +02:00
Yorick Peterse e1d9e62b72 Support for the XPath "!=" operator. 2014-09-01 20:48:11 +02:00
Yorick Peterse 9e5f15787d Support for the XPath "=" operator. 2014-09-01 18:57:12 +02:00
Yorick Peterse a70645fb89 Support for the XPath sub/- operator. 2014-08-29 09:41:17 +02:00
Yorick Peterse 89686b6cff Support for the XPath mul/* operator. 2014-08-29 09:36:40 +02:00
Yorick Peterse 034b360d13 Support for the XPath "mod" operator. 2014-08-29 09:31:11 +02:00
Yorick Peterse 78c8cd1323 Support for the XPath "div" operator. 2014-08-28 23:05:12 +02:00
Yorick Peterse ced7f739fc Support for the XPath "add" / "+" operator. 2014-08-28 21:18:09 +02:00
Yorick Peterse 4fa40b58cf Support for the XPath "or" operator. 2014-08-28 21:01:12 +02:00
Yorick Peterse 4f189d9218 Support for the XPath "and" operator. 2014-08-28 09:42:55 +02:00
Yorick Peterse 809ed9bfa6 Handle boolean values in the boolean() function. 2014-08-28 09:36:21 +02:00
Yorick Peterse 8fb8fb17b6 Clarified docs for floor(), ceiling() and round(). 2014-08-28 00:01:33 +02:00
Yorick Peterse 543112dcdc Support for the XPath round() function. 2014-08-28 00:00:25 +02:00
Yorick Peterse a2b8e3c954 Support for the XPath ceiling() function. 2014-08-27 23:56:43 +02:00
Yorick Peterse c8fb1ad202 Support for the XPath floor() function. 2014-08-27 23:52:23 +02:00
Yorick Peterse 7c68f2a49b Raise for non node sets in the sum() function.
According to the XPath spec this function *can only* take node sets, nothing
else. Lets actually enforce that.
2014-08-27 23:47:19 +02:00
Yorick Peterse ac06670c24 Better conversion of types to numbers.
The XPath number() function should also be capable of converting booleans to
numbers, something it previously was not able to do. In order to do this
reliably we can't rely on the string() function as this would make it impossible
to distinguish between literal string values and booleans. This is due to
true(), which returns a TrueClass, being converted to the string "true". This
string in turn can't be converted to a float.
2014-08-27 23:38:47 +02:00
Yorick Peterse fcb28d5ae8 Specs for various XPath evaluator helper methods. 2014-08-27 23:37:12 +02:00
Yorick Peterse 30a5d01ebd Support for the XPath sum() function. 2014-08-27 23:05:04 +02:00
Yorick Peterse 585b3535b2 Support for the XPath lang() function. 2014-08-27 20:26:27 +02:00
Yorick Peterse 10e82de87b Handle boolean values in predicate results. 2014-08-27 20:26:10 +02:00
Yorick Peterse 7c41fa814f Default attribute namespaces.
When an attribute is prefixed with "xml" the default namespace should be used
automatically. This namespace is not registered on element level by default as
this namespace isn't registered manually, instead it's a "magic" namespace. This
also ensures we match the behaviour of libxml more closely, hopefully reducing
confusion.
2014-08-27 20:24:40 +02:00
Yorick Peterse d2f991538d Support for the XPath true()/false() functions. 2014-08-27 09:37:28 +02:00
Yorick Peterse 4ef79bad90 Support for the XPath not() function. 2014-08-27 09:35:02 +02:00
Yorick Peterse 338aeeb514 Work around JRuby issue #1923.
String#start_with?() returns false on JRuby when used with an empty string. See
https://github.com/jruby/jruby/issues/1923 for more information.
2014-08-26 21:08:50 +02:00
Yorick Peterse 29870c21f2 Use char Arrays in on_call_translate().
When running a 1.9 based Ruby Enumerable doesn't have the method #[].
2014-08-26 20:41:16 +02:00
Yorick Peterse e288ab88f5 Support for the XPath boolean() function. 2014-08-26 20:22:28 +02:00
Yorick Peterse bcd138a15a Lexing of explicit negative/positive XPath numbers 2014-08-26 20:21:30 +02:00
Yorick Peterse 8295fa5783 Support for the XPath translate() function. 2014-08-26 18:14:44 +02:00
Yorick Peterse 7f3f626744 Support for the XPath normalize-space() function. 2014-08-26 00:06:58 +02:00
Yorick Peterse 06bed1cfdd Support for the XPath string-length() function. 2014-08-25 23:46:18 +02:00
Yorick Peterse a60057db5c Proper handling of decimals for string() calls.
When calling the string() XPath function floats with zero decimals (10.0, 5.0,
etc) should result in a string without any decimals. Ruby converts 10.0 to
"10.0" whereas XPath expects "10".
2014-08-25 23:21:36 +02:00
Yorick Peterse 6c0c5ab720 Revert "Return XPath integers as actual integers."
The particular case of string(10) having to return "10" instead of "10.0" will
be handled separately. Returning integers breaks behaviour/expectations
elsewhere.

This reverts commit 431a253000.
2014-08-25 23:14:22 +02:00