This is an historic file listing changes from the old GNU JAXP and libxmlj
projects.  Both are now part of GNU Classpath.  New changes to these files
are listed in the main ChangeLog file or documented in the external
subdirectories for the w3c dom and sax sources.

2004-12-30  Chris Burdess <dog@gnu.org>

	* GnomeDocument.java,GnomeXPathNSResolver: Fixed XPathNSResolver
	implementation.

2004-11-26  Chris Burdess <dog@gnu.org>

	* xmlj_util.c: Check for exception in xmljNewString.

2004-11-17  Chris Burdess <dog@gnu.org>

	* dom: DOM Level 3 Core conformance testing.

2004-11-12  Chris Burdess <dog@gnu.org>

	* GnomeTransformerFactory.java: Implemented getAssociatedStylesheet.

2004-11-01  Chris Burdess <dog@gnu.org>

	* xmlj_sax.c: Fixed segfault with external entities in transform.

2004-10-06  Chris Burdess <dog@gnu.org>

	* RawData.java, RawData32.java, RawData64.java: Added copyright.

2004-10-25  Chris Burdess <dog@gnu.org>

	* xmlj_transform.c: Experimental code to load external entities
	(xsl:import, xsl:include, and document()) from Java URL.
	* configure.ac: Minimum version of libxslt is 1.1.11.

2004-10-08  Chris Burdess <dog@gnu.org>

	* xmlj_util.c: String caching only by setting macro.
	* acinclude.m4,configure.ac,Makefile.am: automake 1.8 patch by
	    Michael Koch; fixes to compile in subdirectory.

2004-10-06  Chris Burdess <dog@gnu.org>

	* xmlj_util.c,xmlj_error.c: Call fflush after fprintf.

2004-08-10  Chris Burdess <dog@gnu.org>

	* transform: Fixed imports.

2004-07-30  Chris Burdess <dog@gnu.org>

	* transform: Added support for DOMSource and DOMResult transforms
	    to/from GnomeDocument nodes.

2004-07-27  Chris Burdess <dog@gnu.org>

	* GnomeElement: getAttribute(NS) returns empty strings instead of
	    null.
	* sax: Cached java.lang.String class.

2004-07-21  Chris Burdess <dog@gnu.org>

	* GnomeTransformerFactory.java: getFeature supports stream features.
	* dom: Added traversal function.

2004-07-12  Chris Burdess <dog@gnu.org>

	* dom: Entities and notations NamedNodeMaps.

2004-07-06  Chris Burdess <dog@gnu.org>

	* xpath: Permit wildcards in getElementsByTagName[NS].

2004-07-04  Chris Burdess <dog@gnu.org>

	* dom: Skeleton DOMConfiguration implementation.

2004-07-03  Chris Burdess <dog@gnu.org>

	* dom: Corrected GnomeElement attribute methods and isEqualNode.

2004-07-01  Chris Burdess <dog@gnu.org>

	* dom: Corrected implementation of getElementsByTagName.

2004-06-29  Chris Burdess <dog@gnu.org>

	* dom: Added implementation of DOMImplementationSource.

2004-06-28  Chris Burdess <dog@gnu.org>

	* dom: Fixed name matching.

2004-06-26  Chris Burdess <dog@gnu.org>

	* dom: Added GnomeTypeInfo.

2004-06-25  Chris Burdess <dog@gnu.org>

	* xmlj_sax.c: Revert to calling ignorableWhitespace.

2004-06-23  Chris Burdess <dog@gnu.org>

	* all: Use RawData for native pointers.
	* xmlj_sax.c: Fixed entity resolution.
	* xmlj_io.c: Fixed race condition closing input stream context.

2004-06-03  Chris Burdess <dog@gnu.org>

	* all: Use longs for native pointers.
	* dom: Added dom.xpath interfaces.

2004-06-02  Chris Burdess <dog@gnu.org>

	* GnomeNode.java et al, xmlj_dom.c: Implementation of some DOM Level 3
	    methods.

2004-06-01  Chris Burdess <dog@gnu.org>

	* GnomeNode.java et al: Applied Dalibor's #3080 patch for missing
	    imports.

2004-05-27  Chris Burdess <dog@gnu.org>

	* GnomeXMLReader.java, GnomeDocumentBuilder.java, JavaContext.java:
	    Correct handling of zero-length documents.

2004-05-24  Chris Burdess <dog@gnu.org>

	* all: Refactoring for Gnome* naming scheme. All modules now use
	    common parsing framework.

2004-05-11  Chris Burdess <dog@gnu.org>

	* GnomeXMLReader.java,xmlj_sax.x,xmlj_io.c: Provide selective
	callbacks, based on the registered callback listeners.

2004-05-04  Chris Burdess <dog@gnu.org>

	* xmlj_sax.c: Fixed document locators.

2004-05-02  Chris Burdess <dog@gnu.org>

	* xmlj_sax.c: Implement DeclHandler and LexicalHandler callbacks.
	* GnomeXMLReader.java: Fixed feature/property handling.

2004-04-29  Chris Burdess <dog@gnu.org>

 	* xmlj_[dom,io].c: Use Java streams for DOM input.

2004-04-28  Chris Burdess <dog@gnu.org>

	* xmlj_node.c et al: Implemented node cache (task #3289).

2004-04-27  Chris Burdess <dog@gnu.org>

	* all: Added SAX and DOM libxmlj implementation.
	* Makefile.am: Moved JNI sources and headers to jni subdirectory.
	* acinclude.m4: Fixed compatibility handling of libxml2 version. 

2003-03-07  Julian Scheid <jscheid@sektor37.de>

	* Makefile.am: Fixed build inconsistency.
	* all: Added caching, fixed memory leaks.

2003-02-10  Julian Scheid <jscheid@sektor37.de>

	* all: First development release
