Yorick Peterse
97e59fe449
Use the Namespace class for namespaces vs Strings.
2014-08-07 20:03:26 +02:00
Yorick Peterse
f653203220
Tests for the Namespace class.
2014-08-07 20:02:56 +02:00
Yorick Peterse
8e8ea64206
Fixed serializing of elements to XML.
2014-08-06 00:04:42 +02:00
Yorick Peterse
d7df908649
Trimmed XML inspect values.
2014-08-05 23:57:12 +02:00
Yorick Peterse
26d4bdc5b1
Support for the XPath "self" axis.
2014-08-05 21:10:12 +02:00
Yorick Peterse
669ad25000
Corrected following-sibling spec description.
2014-08-05 19:28:47 +02:00
Yorick Peterse
8a9b26fa73
Basic support for the preceding-sibling xpath axis
2014-08-05 19:28:26 +02:00
Yorick Peterse
e34a1ed481
Corrected specs for the "parent" xpath axis.
2014-08-05 19:26:01 +02:00
Yorick Peterse
fc1d9776f3
Basic support for the XPath "preceding" axis.
2014-08-05 10:16:37 +02:00
Yorick Peterse
375f3d7870
Basic support for the XPath "parent" axis.
...
The usage of `parent::node()` is not yet supported.
2014-08-05 09:34:57 +02:00
Yorick Peterse
a1f80b4995
Support for the "following-sibling" axis.
...
This also comes with some small cleanups regarding
XPath::Evaluator#node_matches?. This change removes the need to, every time,
also use can_match_node?() to prevent NoMethodError errors from popping up.
2014-08-04 21:51:51 +02:00
Yorick Peterse
57fcbbd0fc
Allow Document#each_node to skip child nodes.
...
Child nodes can be skipped by throwing :skip_children.
2014-08-04 10:00:32 +02:00
Yorick Peterse
ef1ad5406a
Don't yield indexes in Document#each_node.
...
These indexes won't be used so there's no point in yielding them.
2014-08-04 09:08:39 +02:00
Yorick Peterse
4dc85df4e7
Corrected the XPath "following" axis specs.
2014-08-03 22:14:44 +02:00
Yorick Peterse
7fab231992
Unique spec node names for Document#each_node.
...
This makes it a little bit easier to see if the order is actually correct.
2014-08-01 22:09:08 +02:00
Yorick Peterse
8899542971
Better specs for Document#each_node.
2014-08-01 19:00:47 +02:00
Yorick Peterse
52a4375278
Prepare setup for *actual* following support.
...
The previous commit was nonsense as I didn't understand XPath's "following" axis
properly. This commit introduces proper tests and a note for future me so that I
can implement it properly.
2014-07-30 00:16:44 +02:00
Yorick Peterse
9a97d936e3
Support for the XPath "following" axis.
2014-07-29 23:09:16 +02:00
Yorick Peterse
023e7c6583
Spec for absolute XPath paths from elements.
2014-07-29 09:29:56 +02:00
Yorick Peterse
28f77b6d9b
Corrected XPath attribute axis specs.
2014-07-28 00:43:52 +02:00
Yorick Peterse
23de57a3a0
Parse bare XPath node tests as child axes.
...
When parsing a bare node test such as "A" this is now parsed as following:
(axis "child" (test nil "A"))
Instead of this:
(test nil "A")
According to the XPath specification both are identical and this simplifies some
of the code in the XPath evaluator.
2014-07-28 00:34:26 +02:00
Yorick Peterse
766b35d9ce
Specs for descendant-or-self.
2014-07-25 21:23:52 +02:00
Yorick Peterse
6e2be78546
Rewrote context names of some XPath specs.
2014-07-25 00:49:13 +02:00
Yorick Peterse
cdf48979d5
Re-organized XPath axis evaluation specs.
2014-07-24 21:42:05 +02:00
Yorick Peterse
dd37b028a0
Support for the XPath descendant axis.
2014-07-24 09:49:05 +02:00
Yorick Peterse
a0ecba6321
Support for the XPath child axis.
2014-07-22 21:25:02 +02:00
Yorick Peterse
ec08b41737
Specs for various XPath::Evaluator helper methods.
2014-07-22 21:04:09 +02:00
Yorick Peterse
1f9d2ede95
Skip node matching for incompatible nodes.
2014-07-22 20:45:15 +02:00
Yorick Peterse
4142504101
Revert "Lex XPath axes without a node test."
...
Upon further investigation this change turned out to be useless. Nokogiri/libxml
does not allow the use of long axes without tests, instead it ends up
lexing/parsing such a value as a simple node test.
This reverts commit f699b0d097
.
2014-07-22 15:53:00 +02:00
Yorick Peterse
c43c38fab9
Emit node() calls for certain short axes.
...
An axes such as "." is the same as "self::node()". To simplify things on
parser/evaluator level we'll emit the corresponding tokens for a "node()"
function call for these axes.
2014-07-22 15:50:39 +02:00
Yorick Peterse
f699b0d097
Lex XPath axes without a node test.
2014-07-20 07:57:45 +02:00
Yorick Peterse
488000438b
Support for querying attributes using XPath.
2014-07-20 07:47:01 +02:00
Yorick Peterse
d5569ead0b
Use XML::Attribute for element attributes.
...
Instead of using a raw Hash Oga now uses the XML::Attribute class for storing
information about element attributes.
Attributes are stored as an Array of XML::Attribute instances. This allows the
attributes to be more easily modified. If they were stored as a Hash you'd not
only have to update the attributes themselves but also the Hash that contains
them.
While using an Array has a slight runtime cost in most cases the amount of
attributes is small enough that this doesn't really pose a problem. If webscale
performance is desired at some point in the future Oga could most likely cache
the lookup of an attribute. This however is something for the future.
2014-07-20 07:29:37 +02:00
Yorick Peterse
ad4d7a4744
Rewrote an attribute spec.
...
This way the spec doesn't depend on the attributes object being a Hash.
2014-07-19 21:07:11 +02:00
Yorick Peterse
ce86785da6
Added the XML::Attribute class.
...
This class will replace the use of raw Hash/String values for attributes in
upcoming commits.
2014-07-16 10:08:11 +02:00
Yorick Peterse
e0544959ee
Specs for the ancestor-or-self axis.
2014-07-15 09:37:47 +02:00
Yorick Peterse
9a8f53bb49
Use a shared example in the axes evaluation specs.
2014-07-15 09:35:13 +02:00
Yorick Peterse
580856dcf7
Cleaned up XPath specs using a shared example.
2014-07-15 09:34:11 +02:00
Yorick Peterse
30bbd2378e
Basic specs for the "ancestor" axis.
2014-07-14 00:11:03 +02:00
Yorick Peterse
56982dd543
Fail early when processing (test) nodes.
...
If a certain segment yields no nodes the on_path() method should not process any
following segments.
2014-07-12 00:22:18 +02:00
Yorick Peterse
be4f4ad744
Trimmed the XPath AST even further.
...
The excessive use of (path) nodes has been dropped and all parsing conflicts
have been dealt with.
2014-07-12 00:13:25 +02:00
Yorick Peterse
c89fb571db
Fixed typo in the XPath evaluator's wildcard spec.
2014-07-10 10:02:21 +02:00
Yorick Peterse
a61540cfc5
XPath specs for wildcard names + namespaces.
2014-07-09 23:55:09 +02:00
Yorick Peterse
8fbc582547
XPath evaluation for name/namespace wildcards.
2014-07-09 22:09:20 +02:00
Yorick Peterse
ed45058983
Basic support for evaluating XPath wildcards.
2014-07-09 20:06:31 +02:00
Yorick Peterse
f660b11e47
Parsing of closing XML nodes with namespaces.
2014-07-09 19:54:45 +02:00
Yorick Peterse
9c661e1e60
Added XML::NodeSet#+ and XML::NodeSet#to_a
2014-07-08 23:25:09 +02:00
Yorick Peterse
54f0355ea9
Basic specs for XPath::Evaluator.
...
These currently only cover very simple XPath expressions.
2014-07-08 09:40:06 +02:00
Yorick Peterse
8b381ac970
Added Node#remove.
...
This method can be used to remove individual nodes without first having to
retrieve the NodeSet they are stored in.
2014-07-04 10:26:41 +02:00
Yorick Peterse
e334e50ca6
Added Node#previous_element and Node#next_element.
...
These methods can be used similar to #previous and #next expect that they only
return Element instances opposed to all Node instances.
2014-07-04 10:18:18 +02:00