Yorick Peterse
9e935e5d24
Force the usage of the Racc Gem.
...
This ensures that we're loading the Gem and not the standard library version.
2014-09-16 11:58:56 +02:00
Yorick Peterse
cdfeeed85f
Provide somewhat more meaningful parser errors.
...
While still a bit cryptic this is probably as best as we can get it. An example:
Oga.parse_xml("<namefoo:bar=\"10\"")
parser.rb:116:in `on_error': Unexpected string on line 1: (Racc::ParseError)
=> 1: <namefoo:bar="10"
This fixes #43 .
2014-09-16 01:09:06 +02:00
Yorick Peterse
32b11ef1e2
self-close certain XML/HTML elements.
...
When an XML element has no child nodes a self-closing tag is used. When parsing
documents/elements in HTML mode this is only done if the element is a so called
"void element" (e.g. <link> tags).
This fixes #46 .
2014-09-16 00:44:38 +02:00
Yorick Peterse
6fc7e2e254
Track document types when parsing.
...
When parsing XML/HTML documents the corresponding document type (:html or :xml)
is stored in Document#type.
2014-09-16 00:25:51 +02:00
Yorick Peterse
9959f5cda4
Don't remove namespace attributes when registering
...
When registering namespaces from an attributes list the attributes should _not_
be removed.
This fixes #45 .
2014-09-15 22:04:03 +02:00
Yorick Peterse
795e669632
Ignore default NS when serializing elements.
...
When a default namespace is set (using xmlns="...") the method
XML::Element#to_xml should _not_ include the namespace prefix in the output.
2014-09-15 21:42:08 +02:00
Yorick Peterse
1abba1be9c
Don't overwrite namespace_name with "xmlns".
...
This was a leftover from an early prototype.
2014-09-15 21:38:53 +02:00
Yorick Peterse
41526e7013
Whitespace pedantics in Element#namespace.
2014-09-15 21:37:54 +02:00
Yorick Peterse
abbd8d6f84
Handle registering of default XML namespaces.
...
When the default namespace is registered (using xmlns="...") Oga now properly
sets the namespace of the container and all child elements.
This fixes #44 .
2014-09-15 21:36:15 +02:00
Yorick Peterse
b06eadc812
XPath support for absolute paths without tests.
...
This allows Oga to parse and evaluate the XPath expression "/". This expression
can be used to select just the root node/document.
This fixes #35 .
2014-09-15 17:06:58 +02:00
Yorick Peterse
398aaf68bc
Return a correct list of available namespaces.
...
This ensures that inner namespaces take precedence over outer namespaces.
Fixes #40 .
2014-09-14 18:42:02 +02:00
Tero Tasanen
9f71b1ec7b
Ignore casing when testing for html void elements
...
Fixes #36
2014-09-14 12:02:02 +03:00
Yorick Peterse
ee538ddcc2
Merge pull request #34 from ttasanen/fix_comment
...
Fix function name in comment
2014-09-13 16:22:55 +02:00
Tero Tasanen
5979798356
Fix function name in comment
2014-09-13 16:22:06 +03:00
Yorick Peterse
d082822cdc
Removed the node_type method crap.
...
The logic this was used for now only resides in the pull parser, instead of
being exposed to the public.
This fixes #30 .
2014-09-13 15:09:52 +02:00
Yorick Peterse
9ab5c302f7
Release 0.1.1.
2014-09-13 11:50:30 +02:00
Yorick Peterse
b8a82b2094
Separate XML attributes by spaces.
...
This was originally reported by @jrochkind and partially patched by @billdueber.
My patches are built upon the latter, but without the need of using Array#map,
Array#join, etc. They also contain a few style changes.
This fixes #32 and #33 .
2014-09-13 11:47:06 +02:00
Yorick Peterse
019ba8c660
Set the initial version to 0.1.0.
2014-09-11 14:11:24 +02:00
Yorick Peterse
319d622fa5
Include namespaces when converting attrs to XML.
2014-09-11 14:03:04 +02:00
Yorick Peterse
c45d32a37e
Methods for adding attributes to elements.
...
The methods XML::Element#add_attribute and XML::Element#set can be used to more
easily add attributes to elements. The first method simply adds an Attribute
instance and links it to the element. This allows for fine grained control over
what data the attribute should contain. The second method ("set") simply sets an
attribute based on a name and value, optionally creating the attribute if it
doesn't already exist.
2014-09-10 23:55:29 +02:00
Yorick Peterse
6cb2d54875
Added XML::Element#inner_text=
...
This method can be used to more easily set the text of an element, without
having to manually muck around with XML::Text instances.
2014-09-10 23:25:39 +02:00
Yorick Peterse
6d19c9b311
Added XML::Element#get
...
This method can be used to directly retrieve an attribute value.
2014-09-10 19:03:32 +02:00
Yorick Peterse
e2dab952d0
Added XML::Node#before and XML::Node#after
...
These methods can be used to insert nodes before/after other nodes without
manually having to mess around with node sets.
This fixes #28 .
2014-09-09 22:48:31 +02:00
Yorick Peterse
fccc6359e1
Corrected YARD formatting.
2014-09-09 00:47:51 +02:00
Yorick Peterse
ef03a12f99
Optimize descendant-or-self and child axes.
...
By using NodeSet#concat we can further reduce the amount of object allocations.
This in turn greatly reduces the time it takes to query large documents using
descendant-or-self.
2014-09-05 20:20:13 +02:00
Yorick Peterse
9f6035e784
Reduce object allocations in on_axis_descendant
...
By using Traversal#each_node and _not_ calling on_test() (which was only called
for node_matches?) we can save ourselves a few object allocations.
2014-09-05 19:58:37 +02:00
Yorick Peterse
98984de540
Moved Document#each_node into a separate module.
...
This allows it to be re-used by XML::Node.
2014-09-05 19:42:38 +02:00
Yorick Peterse
8f562c24dd
Use NodeSet#concat for descendant-or-self.
...
In a sample XML file this removes around 3400 NodeSet allocations.
2014-09-05 10:56:49 +02:00
Yorick Peterse
bcdce306e5
Added NodeSet#concat.
...
This method allows two sets to be concatenated together without the need of
creating a 3rd node set (as is the case with NodeSet#+).
2014-09-05 10:07:22 +02:00
Yorick Peterse
1fdf876a93
Tweaked docs of the XPath code a bit.
2014-09-04 10:17:32 +02:00
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
Yorick Peterse
a1a2190fe2
Support for the XPath substring() function.
2014-08-25 23:13:34 +02:00
Yorick Peterse
5382891106
Support for the XPath number() function.
2014-08-25 23:13:03 +02:00
Yorick Peterse
ba058627f2
Corrected docs for on_call_string().
2014-08-25 23:12:45 +02:00
Yorick Peterse
b2ca18e127
Support for the XPath substring-after() function.
2014-08-25 22:19:13 +02:00
Yorick Peterse
b9cdb4a72b
Support for the XPath substring-before() function.
2014-08-25 22:11:05 +02:00
Yorick Peterse
83b873e3c1
Support for the XPath contains() function.
2014-08-25 21:52:33 +02:00
Yorick Peterse
5b65d6c31a
Support for the xpath starts-with() function.
2014-08-25 09:43:06 +02:00
Yorick Peterse
276a5ab83b
Support for lexing empty XPath strings.
2014-08-25 09:42:51 +02:00
Yorick Peterse
b688c6dc1b
Support for the XPath concat() function.
2014-08-23 20:24:18 +02:00
Yorick Peterse
431a253000
Return XPath integers as actual integers.
...
This is to ensure that calls such as string(10) return "10" and not "10.0". It
also saves integer -> float conversions when they're not needed.
2014-08-23 20:22:58 +02:00
Yorick Peterse
b316fd3e1c
Support for the XPath string() function.
2014-08-22 11:06:10 +02:00
Yorick Peterse
ff8a4ad3aa
Ignore comment nodes in NodeSet#text.
2014-08-22 11:05:39 +02:00
Yorick Peterse
99be3182ae
Support for evaluating XPath floats.
2014-08-22 10:59:03 +02:00
Yorick Peterse
6ac3408a71
Match all node types when using node()
...
Previously this would only match element and text nodes.
2014-08-22 10:58:36 +02:00
Yorick Peterse
da09f1296c
Support for using namespace-uri() with attributes.
2014-08-21 22:36:18 +02:00
Yorick Peterse
0d41693bfc
Support for using name() with attributes.
2014-08-21 21:05:06 +02:00
Yorick Peterse
acc056eea4
Support for using local-name() on attributes.
2014-08-21 21:03:28 +02:00
Yorick Peterse
1dd6416bea
Basic support for the XPath name() function.
2014-08-21 20:47:20 +02:00
Yorick Peterse
e7019ceb4c
Renamed context_node to function_node.
2014-08-21 19:06:14 +02:00
Yorick Peterse
8cc0db2283
Support for the XPath namespace-uri() function.
2014-08-21 19:02:41 +02:00