RELEASE NOTES

2.1.2:

1. Fixed the case where remove() caused an error when no items were found
   to remove (issue #63). Thanks marktheunissen for the bug report and fix.

2. New XML extensions to deal with adding namespaced elements (#64). Thanks to
   theshadow for contributing an entire extension, and to farinspace for
   detailed experiments with QP and XML namespaces.

3. The adjacent CSS selector has been modified to ignore text elements. This
   seems to be inline with the spec, but I am not 100% sure. Thanks to
   fiveminuteargument for the patch.

2.1.1:

1. The xhtml() and writeXHTML() methods now correctly escape JS/CSS and also correctly
   fold some tags into unaries will keeping other empty tags. See issues #10, #47. 
   Thanks to Alex Lawrence for his input.

2. The method document() has been added. Thanks to Alex Lawrence for suggesting this 
   addition.

3. The fetch_rss.php example created broken HREFs in some cases. Thanks to yaph for
   the patch.

4. The xpath() method now supports setting default namespaces. Thanks to Xavier Prud'homme
   for a patch.

5. The remove() method was fixed (issue #55) to now correctly return a QueryPath with 
   just the removed nodes, while not altering the base QueryPath object. Thanks to MarcusX
   for finding and reporting the problem.

6. Added childrenText() convenience method. (Safe -- no changes to existing functions.)
   Thanks to Xavatar for suggestion and proofing initial code.

7. Fixed bad character stripping in htmlqp() (Issue #58, #52) so that meaningful whitespace
   is no longer stripped prior to parsing. Thanks to NortherRaven for detailed report
   and help testing and debugging.

8. Fixed broken :nth-of-type pseudo-class (Issue #57). Thanks to NorthernRaven for the 
   detailed report and help debugging.
   
9. Fixed broken an+b rule handling in the special case '-n+b'. Thanks to NorthernRaven for
   reporting and helping out.
   
10. Xinclude support has been added via the xinclude() method on QueryPath. Thanks to Crell
   for the suggestion and to sdboyer for help (Issue #50).

11. QueryPath now implements Countable, which means you can do `count(qp($xml, 'div'))`. The
   size() function has been marked deprecated.

12. is() now takes both DOMNodes and Traversables (including QueryPath) as an argument. See
   issue #53.
   
13. The dirty_html.php example (contributed by Emily Brand, thanks!) is now fixed. Thanks to
   MartyIX for tracking down the issue (#59).

2.1.0:
Big Changes:

1. There is now an `htmlqp()` function that parses crufty HTML in a far
more reliable way than `qp()`. Use this instead of any variant of 
the older `@qp()` setup.

2. The API has been brought into alignment with jQuery 1.4. See 
API-2.1.0 for details.

3. This release was driven substantially by eabrand's GSOC 2010 
contributions. Thanks, Emily!

4. There are now Phar and PEAR packages available. Got to 
http://pear.querypath.org for PEAR packages.

5. The minimal QP distribution is no longer minified, as it reportedly
causes XDebug to crash.

7. Data URs are now supported. QueryPath can now embed images directly
into HTML and XML this way.

8. Documentation is now in Doxygen instead of PhpDocumentor. Thanks
to Matt Farina and Kevin O'Brien for their input.
