= Release History == 2.2.0 / 2011-08-09 Charlie Savage * Update encoding support for Ruby 1.9 so that libxml-ruby returns strings encoded in UTF-8. This change was required since libxml internally stores strings in UTF-8. The exceptions to this rule are the #to_s methods which return UTF-8 by default but can return other encodings if requested. == 2.1.2 / 2011-08-03 Charlie Savage * Fix segmentation fault that could occur when an XPathContext was marked before it was fully initialized (Charlie Savage). * Add mark method to document to mark all nodes currently being accessed by ruby. This make Ruby Enterprise Edition happy (Charlie Savage). == 2.1.1 / 2011-07-31 Charlie Savage * Switch to using def files to control library exports (Charlie Savage). == 2.1.0 / 2011-07-31 Charlie Savage * Ruby 1.9.3 compatability (Charlie Savage). * Added XPath expression <-> Ruby value conversion methods (Jens Wille). * Extracted rxml_xpath_to_value from rxml_xpath_context_find (Jens Wille). * Adapted rxml_xpath_from_value from Gregoire Lejeune's ruby-xslt library, see https://github.com/glejeune/ruby-xslt (Jens Wille). * Allow calling #find on nodes returned from Reader (Charlie Savage). * Change document handling in XPath::Context to address segmentation fault on Ruby Enterprise Edition (Charlie Savage). * Update gemspec file to work directly with bundler thereby allowing git repository to be used as gem (Charlie Savage). * Support gem buld (Charlie Savage). * Simplify memory management of attributes namespaces to fix segmentation faults that occurred when using Ruby 1.9.3 (Charlie Savage). == 2.0.8 / 2011-06-23 Charlie Savage * Add in 2 new HTML Parser constants - NODEFDTD and NOIMPLIED. * Fix compile issue on Ruby 1.9.3 == 2.0.6 / 2011-05-23 Charlie Savage * Fix segfault that sometimes occurred when looking up encodings on 1.9. In some cases the Ruby encoding infrastructure was not properly initialized (nkriege). == 2.0.5 / 2011-05-05 Charlie Savage * Document#validate_dtd would sometimes cause segmentation faults due to an improperly initialized data structure (Charlie Savage) == 2.0.4 / 2011-05-02 Charlie Savage * Fix compile issues on platforms using older versions of libxml2. The problem as using a C14N constants that was added to libxml2 in July 2009 (Charlie Savage). == 2.0.3 / 2011-05-01 Charlie Savage * The biggest change in this release is supporting the use of libxml-ruby in native background Ruby threads. Previously, the use of libxml-ruby in background threads in Ruby 1.9.x and higher would often cause segmentation faults. This has now been fixed (Charlie Savage). * Update Reader#expand so that returned node correctly remembers its encoding in Ruby 1.9.x (zerebubuth). * Add check to verify a node has not been deleted. This can happen when a ruby variable holds a reference to a child node that gets freed when its parent gets freed. Previously when this happened a segmentation fault would occur, now an exception is raised (Charlie Savage, fixes RubyForge #26839. * Do not unlink nodes before internal validations have run - avoids segmentation faults caused by freeing a node twice (Charlie Savage). * Add support for Document#canonicalization (Victor Lin). * Fix memory leak in Reader#lookup_namespace (Charlie Savage). * Fix memory leak in Reader#[] (Nathan Kriege). * Fix usage of @io instance variable (Jeffrey Taylor) * Removed old sax error handling code that has been fixed in newer versions of libxml (Charlie Savage). * Code cleanup - remove unused variables and commented out code (Charlie Savage) * Minor text changes and documentation fixes (Charlie Savage). * Fix documentation error (fixes RubyForge #26888). * Update documentation for Document#validation* methods (fixes RubyForge #24833). * Update documentation and test (fixes Ruby Forge Issue #28770). * Updated documentation in README (Anurag Priyam): 1. rake doc does not work; use rake rdoc. 2. gem mislav-hanna does not exist; use hanna. 3. rake rdoc 'depends' on hanna; no need of RDOCOPTS 4. Point to the github issue tracker instead of Ruby Forge 5. Point to the github (gh-pages) site for docs * Add tc_error to test suite (Charlie Savage). * Add sax test (Stanislav O.Pogrebnyak). == 2.0.2 / 2011-04-17 Charlie Savage * Added binaries for windows (Charlie Savage). * Update Ruby 1.9 encoding handling to support libxml versions older than version 2.6.26 which was released on June 6, 2006 (Charlie Savage). * Add publish_with_docs rake task - combines publishing the website and docs (Anurag Priyam). * Correctly copy the documentation directory (Anurag Priyam) * Use relative link for rdoc so the links are correct on both rubyforge and github (Anurag Priyam). * Update Rakefile to use Hanna RDco template (Charlie Savage). * Update dates on license file (Charlie Savage). * Add api to allow setting of attribute namespaces. Fixes issue #10 (Charlie Savage). * Remove old hack to call the on_error method. This hack isn't needed anymore since a better workaround was put in place in the parser context. Fixes This fixes issue #12 (Charlie Savage). * Remove references to passing blocks to validation functions. The blocks are no longer called since the bindings use libxml's structured error handling. See issue #6 (Charlie Savage). * Fix up comment in Document and Node. See issue #8 (Charlie Savage). * Update website text (Charlie Savage). == 2.0.0 / 2011-04-16 Charlie Savage * Ruby 1.9.2 support. The biggest addition is encoding support. Strings returned by the libxml bindings are now set to the encoding of the underlying xml document (Charlie Savage). * Rubinius compatability. Removed unnecessary use of RHASH_TBL (Aman Gupta) * Added .gemspec file (Dudley Flanders). * Updated Windows checks to take into account mingw32 (Yaohan Chen). * Fix memory leak in Reader#Expand (Szymon Nowak). * Fix memory leaks in Reader#read_string, Reader#read_inner_xml and Reader#read_outer_xml (Sean Geoghegan). * Node#space_preserve= was backwards (Dudley Flanders) * Fixed typo in readme, added rdoc extension (Loren Sands-Ramshaw). * Switched to Rake Compiler (Charlie Savage). * Use xmlMalloc() memory for ctxt->sax structure. Sometimes the ctxt->sax pointer may not be zeroed in rxml_sax_parser_parse(), for example when exception is raised in one of callbacks. This lets xmlFreeParserCtxt() clean this up (Alexey I. Froloff). * Added a rake task to publish the website to github. Moved the jekyll website to web directory (Anurag Priyam). * Modernize project metadata and layout (7rans) == 1.1.3 / 2009-03-18 Charlie Savage * Improve performance 10 to 20% by turning on libxml2's dictionary feature that allows parsers to reuse previously parsed strings. * Fix XML::Node#remove! to work correctly with libxml's dictionary feature. * Correctly set up parser context options. * Simplify DOM modification code (Node#next=, Node#prev=, Node#sibling=) and update documentation. * Deprecated Node#add_child and Node#child=, use Node#<< instead * Fix documentation for Node#<< * Added Document#import to enable moving nodes from one document to another document. == 1.1.2 / 2009-03-12 Charlie Savage * Added XML::Node#inner_xml helper method. * Fix segmentation that could occur when calling the mark function on a previously freed node. == 1.1.1 / 2009-03-10 Charlie Savage * Fix - Only include extra html parser context methods for versions of libxml older than 2.6.27. == 1.1.0 / 2009-03-09 Charlie Savage * Fix bug caused by the mark function being called on partially initialized attributes. * Revert back to libxml2's internal memory manager. == 1.0.0 / 2009-03-05 Charlie Savage * OS X (Charlie Savage). Update bindings to support the default installed version of libxml2 (2.6.16) on OS X 10.5 and the latest version available via MacPorts. == 0.9.9 / 2009-03-05 Charlie Savage * Ruby 1.9.1 support (Charlie Savage). libxml-ruby now compiles and runs on either 1.8.6 and 1.9.1. With 1.8.6 all tests should pass while on 1.9.1 all but for encoding tests pass. The port to Ruby 1.9.1 revealed two memory allocation bugs (one with dtds, one with nodes) which are now fixed. * Better OS X support (Joe Khoobyar). The default version of libxml2 on OS X 10.5 is fairly old, resulting in this link error: NSLinkModule() error dyld: Symbol not found: _htmlNewParserCtxt This can be fixed by using MacPorts to get a newer version of libxml2. To make use of MacPorts, the build script has been updated to use xml2-config. This can be fine-tuned using the new --with-xml2-config / --without-xml2-config options to extconf.rb (default is --without-xml2-config to match existing behavior). * Greatly reduced memory usage (Joe Khoobyar). See http://rubyforge.org/pipermail/libxml-devel/2009-February/001375.html. * Add Document#xhtml? and document#node_type methods (Joe Khoobyar) * Add XPath::Object#last (Joe Khoobyar) * Provide finer control over CDATA nodes on a parser by parser basis (Joe Khoobyar). * Bug fix - Namespaces were incorrectly merged with attributes in the new sax2 handler (Charlie Savage). * Bug fix - Support iterating over nodes and attributes even with blocks that call remove! (Charlie Savage) * Bug fix - If reader.node is NULL, return nil instead of crashing (Charlie Savage) * Bug fix - Dtd's owned by documents were freed twice in some circumstances (Joe Khoobyar). * Bug fix - Fix output escaping on attributes nodes (Joe Khoobyar). * Bug fix - Make sure IO objects are not garbage collected when used as parser sources (Charlie Savage). == 0.9.8 / 2009-1-24 Charlie Savage * Refactored XML::Parser, XML::HTMLParser, XML::SaxParser and XML::Reader to have consistent APIs. All the parsers now take a context object in their constructors, allowing fine grained control over the parsers for advanced use cases. These API changes are backwards compatible except for XML::Reader, which now takes an optional hash table as a second parameter in its various constructors versus an optional boolean value. * Updated all APIs to use the encoding constants defined in XML::Encoding versus string values. This API change is not backwards compatible. * Added support for attribute declarations in DTD's via the new XML::AttrDecl class (Len Lattanzi) * Support libxml's content escaping capabilities for text nodes by wrapping libxml's "xmlStringText" and "xmlStringTextNoenc" (Joe Khoobyar). * Updated XML::Reader#read API to return true if a node was read, false if node was not read and raises an exception on an error. Previously #read returned 1 if a node was read, 0 if a node was not read and -1 for an error. This change is not backwards compatible, but provides a more natural interface for Ruby by allowing code like this: while reader.read # do stuff end * Changed XML::Error exception objects to return copies of nodes that cause parse errors instead of the original node. This prevents segmentation faults when the error is reraised. * Added XML::Reader#node method. * Fixed compile errors on OS X which uses an older version of libxml. * Fixed memory leak when performing XPath searches. * Fixed rdocs. * Don't override libxml's default settings for entity substitution and loading external DTDs. This may break some code - you may need to add in a call to XML.default_substitute_entities = true or XML.default_load_external_dtd = true. == 0.9.7 / 2008-12-08 Charlie Savage * Added SAX2 support. SAX handlers now define two new callbacks, on_start_element_ns and on_end_element_ns methods. These new callbacks support namespaces, making them superior to the older callbacks on_start_element and on_end_element methods. The old callbacks are still supported, but may be deprecated in the future depending on community feedback. * Added SAX support for libxml's structured error handling. That menas sax handlers now define a new callback, on_error, which takes one parameter, an instance of XML::Error. The older on_parser_error, on_parser_warning and on_parser_fatal_error callbacks are no longer suported so you must port your code. Note that the older callbacks took one string parameter, instead of an XML::Error object. * Experimental work-around for libxml error handling bug - see http://mail.gnome.org/archives/xml/2008-December/msg00014.html for more information. * Fix compilation bugs on Solaris. * Fix Rdoc compilation bug. == 0.9.6 / 2008-12-08 Charlie Savage * Refactored namespace handling. The existing, and inconsistent, namespace methods defined on XML::Node have been deprecated. They have been replaced by a the new XML::Namespaces class. Use this class to inspect a node's namespace, its default namespace, its namespace definitions and which namespaces are in scope. It can be accessed via the the XML::Node#namespaces method. * Rationalized XML::Document#save, XML::Document#to_s and XML::Node#to_s to take an optional hash table of parameters that control how output is generated. Supported parameters include setting indentation on or off, the indentation level and the output encoding. This is an API change and may break existing calls to XML::Document#save. However, the previous API was broken - setting the encoding resulted in an error so its unlikely anyone is using it. * Rationalized XML::Document#debug, XML::Node#debug, XML::XPath::XPathObject#Debug. * Deprecated a number of duplicate dump* and debug_* methods in XML::Document and XML::Node. * Additional Ruby 1.9.1 compatability fixes. * Cleaned up header file guards. == 0.9.5 / 2008-11-29 Charlie Savage * Ruby 1.9.1 preview release compatability (Felipe Contreras) * Update Node#remove! to return the removed node and to set its document to nil. This allows the node to be either moved to another document, another part of the same document or to be freed on the next garbage collection once its references have gone out of scope. * Fix bug where XPathExpression#compile mistakenly overwrote RegExp#compile. * Update Node to use standard ruby allocators and initializers. * Update HTML parser to be more forgiving of invalid documents. * Update include paths for Darwin Ports on OS X. * Updated C code base to use BSD/Allman style == 0.9.4 / 2008-11-24 Charlie Savage * Update HTML parser so that it can read files, strings and io streams. * Update HTML parser to support user specified encodings. * Additional C code cleanup. == 0.9.3 / 2008-11-22 Charlie Savage * Fixed segmentation fault caused by documents being freed before xpath results that referenced the document (take 2). * Allowed sax parser to use io stream * Combined encoding and input classes * Cleaned up C code - removed remaining legacy structures, added static to most methods, changed C namespace from ruby_xml to rxml == 0.9.2 / 2008-11-19 Charlie Savage * Add support for compiled XPath expressions (donated by Pavel Valodzka) * Fixes for compiling on OS X 10.5.4 and 10.5.5 == 0.9.1 / 2008-11-18 Charlie Savage * Expose LibXML's encoding support via a new Encoding object. * Revamp error handling to be much easier to use. Errors are now wrapped by the new XML::Error class and are thrown as exceptions when it is appropriate. * Fixed segmentation fault caused by documents being freed before xpath results that referenced the document. * Add Node#register_default_namespace to simplify default namespace handling. * Significantly improve documentation * A number of bug fixes and patches. == 0.9.0 / 2008-11-18 Charlie Savage * Version 0.9.0 was removed due to packaging errors. == 0.8.3 / 2008-07-21 Charlie Savage * Missed several files in last release == 0.8.2 / 2008-07-21 Charlie Savage * To use LibXML you can either require 'xml' or require 'libxml'. The differences is that require 'xml' mixes the LibXML module into the global namespace, thereby allowing you to write code such as document = XML::Document.new. Note that this is different from 0.8.0 and 0.8.1 and may require updating your code. * Support RelaxNG validation (thanks to Morus Walter) * Support passing IO objects to XmlReaders (thanks to Tom Hughes) * Fix segmentation fault caused by adding an attribute to a CDATA node * Moved node checking functions from C to Ruby * Improved Windows support - libxml-ruby should now work out of the box. * Improved Windows support - turned on libxml's zlib and iconv support. == 0.8.1 / 2008-07-09 Charlie Savage * Reimplmented Node#each_attr for backwards compatability * Moved node type test to Ruby. == 0.8.0 / 2008-07-09 Charlie Savage * Fixed bug in returning attributes from XPath results * Fixed DOM traversal methods * Changed Node#children to return an array of nodes * Fixed bug in returning attributes from XPath results * Refactored XPath support, providing more user hooks in the XPath::Context class * Added Node#properties for backwards compatibility * Updated setup.rb * Added more tests * Updated rdocs and README file * Moved libxml into LibXML namespace == 0.7.0 / 2008-07-09 Charlie Savage * Added new attributes class to provide a more natural way of working with attributes * Fixed XML::Attr to better support namespaces * Added documentation on how to use namespaces with XPath * Removed allocation of extraneous structures used to wrap nodes, namespaces and attributes * Cleaned up tests and added new test suite * Updated rdocs and README file * Cleaned out most of the bug list == 0.6.0 / 2008-07-01 Charlie Savage * Fixed memory allocation errors in Windows. On Windows, it is essential that the same library that allocates memory must free it. Thus ALLOC calls must be matched to ruby_xfree calls, which they were not. In addition, in one case Ruby was allocating memory to be freed by libxml. On Windows, that's a segmentation fault. On Linux it might fly, but still seems like a bad idea. * Fixed segmentation fault in xml reader expand (same xml tree freed twice) * Applied a number of patches from Tom Bagby, including fixes for xpath segmentation faults and fixes for various memory leaks * Cleaned up a number of compiler warnings * Renamed libxml_so.so to libxml_ruby.so (same for xslt). That wasn't actually my original intention, but um, it kind of sort of happened. It should not be noticeable from an end-user perspective. * Added rake files for building with MingW * Added rake files for packing gems. Note that I did this outside the existing rake tasks because I didn't see how they were actually building the gems. * Cleaned up the tests and added a few more based on bug reports from the Tracker and mailing list. * Cleaned out the patch queue and went through about 1/2 the bug list === 2007-11-16 "Dan Janowski" * Merged Dan's MEM2 branch to trunk. == 0.5.3 / === 2007-11-16 "Dan Janowski" * Merged Dan's MEM2 branch to trunk. == 0.5.2 / 2007-10-10 === 2007-10-10 "Dan Janowski" * (Dan, fill in the major points of the changes you made up to here -thanks) === 2007-01-14 "Laurent Sansonetti" * Added some preliminary RDoc comments for XML::Reader. === 2006-12-05 "Laurent Sansonetti" * Added XML::Reader, a set of bindings to the xmlTextReader API. == 0.3.8.4 / 2006-12-02 === 2006-04-15 "Ross Bamform" * Implemented SAX parser callback handling. === 2006-04-12 "Ross Bamford" * Integrated and tested community patches. * Defined XML::Node (hash) equality in terms of XML representation. === 2006-04-12 "Tim Yamin" * Fixed XML::Node#content inoperable bug (plasmaroo) [patch] * Fixed memory leak in same === 2006-04-12 "Mark Van Holstyn" * Added XML::Node::Set#first (mvette13) [patch] * Added XML::Node::Set#empty? * Fixed XML::Node::Set#to_a * Added XML::Node#find_first * Added XML::Node#remove! === 2006-03-27 "Ross Bamford" * Integrated contributed XML::Parser.register_error_handler patch (rosco) === 2006-02-27 "Ross Bamford" * Fixed all multiple symbol definitions for -fno-common. * Removed OSX -fno-common workaround. == 0.3.6 / 2006-02-23 === 2006-02-21 "Ross Bamford" * Patched extconf.rb with OSX -fno-common workaround * Added gem and packaging support to Rakefile * Moved version update to Rakefile * Removed legacy project utility scripts === 2005-02-19 "Ross Bamford" * Fixed doublefree bug in ruby_xml_attr. * Fixed small leak in parser === 2005-12-18 "Ross Bamford" * Updated for GCC 4.0 (community patches) * Fixed default validation bug * Refactored project, removed outdated files, cleaned up tests. * Added RDoc documentation across .c files. * Fixed up a few strings. === 2004-04-04 "Mangler Jurgen" * ruby_xml_node.cz: fixed ruby_xml_node_property_set. The ill-behaviour was, that there was added a second attribute of the same name, when you were setting the value of an already existing attribute. === 2004-03-17 "Lukas Svoboda" * ruby_xml_node.c: ruby_xml_node_to_s now returns XML subtree dump. === 2004-02-27 "Martin Povolny" * ruby_xml_node.c: added XML::Node.copy, this makes possible building of xml documents from nodes taken from other xml documents without making ruby SIGSEGV (see tests/copy_bug.rb). === 2004-02-26 "Martin Povolny" * ruby_xml_dtd.c, ruby_xml_dtd.h, ruby_xml_schema.c, ruby_xml_schema.h: more work on validation, now you can actually validate document using dtd or xml schema, also solved warning and error propagation (see tests/{dtd|schema}-test.rb). === 2003-12-30 "Martin Povolny" * ruby_xml_dtd.c, ruby_xml_dtd.h, ruby_xml_schema.c, ruby_xml_schema.h: prelimitary support for dtd and schema validation === 2003-09-15 "Martin Povolny" * ruby_xml_input_cbg.c, libxml.c: added class InputCallbacks to make possible registering custom input callbacks handlers (xmlRegisterInputCallbacks) written in ruby === 2003-08-01 "Martin Povolny" * ruby_xml_document.c: corrected argument handling in ruby_xml_document_find * ruby_xml_node.c: corrected argument handling in ruby_xml_node_find