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
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
4f03bf19c1
XPath compiler support for "ancestor"
2015-08-19 20:14:21 +02:00
Yorick Peterse
52741a3b78
Added XML::Node#each_ancestor
...
This method can be used to walk through the ancestor tree of a Node.
2015-08-19 20:14:20 +02:00
Yorick Peterse
db39b25546
XPath compiler support for ancestor-or-self
...
This also comes with some changes to the specs as the old behaviour of
the Evaluator was incorrect. The Evaluator would bail after matching a
single node but instead it's meant to continue until it runs out of
parent nodes.
2015-08-19 20:14:20 +02:00
Yorick Peterse
d8fbaf75d8
Ruby generator support for while loops
2015-08-19 20:14:20 +02:00
Yorick Peterse
7fdf8d7460
Rewrote XPath compiler predicate specs
2015-08-19 20:14:20 +02:00
Yorick Peterse
6f6151fd52
Added Ruby generator support for Symbols
2015-08-19 20:14:20 +02:00
Yorick Peterse
cf2405998b
Ruby::Generator support for #[] methods
2015-08-19 20:14:20 +02:00
Yorick Peterse
2c1b4e7cbc
Support for generating "else" statements
2015-08-19 20:14:20 +02:00
Yorick Peterse
ac6c0d806e
Updated XPath variables spec to use the compiler
2015-08-19 20:14:20 +02:00
Yorick Peterse
94f7f85dc3
Added XML::Document#root_node
2015-08-19 20:14:20 +02:00
Yorick Peterse
a7744b7a5c
Use the XPath compiler for XPath/CSS specs
2015-08-19 20:14:20 +02:00
Yorick Peterse
3300a6df49
Added XPath::Compiler.compile_with_cache
2015-08-19 20:14:20 +02:00
Yorick Peterse
6d01adafc7
XPath compiler now actually returns a Proc
2015-08-19 20:14:20 +02:00
Yorick Peterse
6daff674d9
Use "parse" instead of "parse_xml"
2015-08-19 20:14:20 +02:00
Yorick Peterse
337d126264
Added Ruby::Generator class
...
This class will be used to serialize a Ruby AST back to valid Ruby
source code (as a String).
2015-08-19 20:14:20 +02:00
Yorick Peterse
6673f176d8
Added Oga::Ruby::Node
...
This class will be used for building Ruby ASTs that will be generated
based on XPath expressions.
2015-08-19 20:14:20 +02:00
Yorick Peterse
08c965bfbc
Basic specs for the XPath compiler
2015-08-19 20:14:19 +02:00
Daniel Fockler
496811a23f
Fixes #127
2015-08-14 16:15:49 -07:00
Jakub Pawlowicz
ed3cbe7975
Fixes #129 - lexing superfluous end tags.
...
Prevents a superfluous end tag of a self-closing HTML tag from
closing its parent element prematurely, for example:
```html
<object><param></param><param></param></object>
```
(note <param> is self closing) being turned into:
```html
<object><param/></object><param/>
```
2015-07-23 13:16:11 +01:00
Jakub Pawlowicz
6fc3ef425b
Fixes #118 - decoding invalid entities.
...
Previous regular expression was too greedy in terms of matching
letters from outside of A-F hex scope, and matching letters when
not in hex mode.
2015-06-30 17:56:26 +02:00
Yorick Peterse
565e3da176
Added encoding comment in elements_spec.rb
...
This ensures that older Ruby versions don't poop their pants when
running these specs.
2015-06-29 21:09:33 +02:00
Yorick Peterse
dde644cd79
Support for Unicode XML/HTML identifiers
...
Technically HTML only allows for ASCII names but restricting that
actually requires more work than just allowing it.
2015-06-29 21:08:01 +02:00
Laurence Lee
139985612b
Lexer test for elements with inline dots.
2015-06-29 20:55:48 +02:00
Yorick Peterse
71960fff87
Added CSS :nth() pseudo class
...
This is a Nokogiri extension (as far as I'm aware) but it's useful
enough to also include in Oga. Selectors such as "foo:nth(2)" are simply
compiled to XPath "descendant::foo[position() = 2]".
Fixes #123
2015-06-29 20:51:38 +02:00
Yorick Peterse
d26b48feb4
CSS parsing support for commas
...
The lexer already had the basic plumbing in place but apparently I
completely forgot to also implement the required bits in the parser.
Fixes #121
2015-06-29 18:59:01 +02:00
Yorick Peterse
3b633ff41c
Relax support for HTML unquoted attribute values
...
This allows for parsing of HTML such as:
<a href=lol("javascript")></a>
Here the "href" attribute would have its value set to:
lol("javascript")
Fixes #119
2015-06-29 16:35:48 +02:00
Tero Tasanen
0b4791b277
Ability to replace a node with another node or string
...
```
element = Oga::XML::Element.new(:name => 'div')
some_node.replace(element)
```
You can also pass a `String` to `replace` and it will be replaced with
a `Oga::XML::Text` node
```
some_node.replace('this will replace the current node with a text node')
```
closes #115
2015-06-17 21:27:50 +03:00
Yorick Peterse
074b53c18c
Fix entity encoding of attribute values
...
This ensures that single and double quotes are also encoded, previously
they would be left as is.
Fixes #113
2015-06-16 22:47:10 +02:00
Yorick Peterse
2c18a51ba9
Support for strict parsing of XML documents
...
Currently this only disabled the automatic insertion of closing tags, in
the future this may also disable other features if deemed worth the
effort.
Fixes #107
2015-06-15 23:53:11 +02:00
Yorick Peterse
fd307a0fcc
Support HTML attributes without starting quotes
...
This allows the lexer to process input such as:
<a href=foo"></a>
For XML input the lexer still expects properly opened/closed attribute
values.
Fixes #109
2015-06-08 06:46:08 +02:00
Yorick Peterse
a76286b973
Support for spaces around attribute equal signs
...
This also takes care of making sure line numbers are incremented
properly.
Fixes #112
2015-06-08 06:34:49 +02:00