This is an historic file listing changes from the old GNU JAXP project.
GNU JAXP is 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-22  Chris Burdess  <dog@gnu.org>

	* Makefile.am: Generate META-INF/services factory configuration files.

2004-12-17  Mark Wielaard  <mark@klomp.org>

	* css,html2: Updated APIs to final versions of W3C specifications
	(DOM Level 2).

2004-12-15  Mark Wielaard  <mark@klomp.org>

	* GnomeNodeIterator.java: Renamed to DomNodeIterator.java.

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

	* org/xml/sax: Updated version of SAX API to sax2r3 final.

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

	* README,INSTALL,AUTHORS: Updated documentation.

2004-12-03  Andrew Overholt  <overholt@redhat.com>

	* autogen.sh: New file.

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

	* Makefile.am: Removed redundant 'sources' and 'classes' makefile
	variables. Added -W-no-long-long to libxmlj compilation flags.

2004-11-26  Andrew Overholt  <overholt@redhat.com>

	* Makefile.am: Update for gcj.
	* configure.ac: Likewise.
	* Makefile.in: Update generated.
	* aclocal.m4: Likewise.
	* configure: Likewise.
	* config/config.guess: Likewise.
	* config/config.sub: Likewise.
	* config/ltmain.sh: Likewise.

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

	* Makefile.am: Fixes to permit gcj compilation.

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

	* parsers, transform, dom, sax, stream: API rewritten from
	scratch to satisfy copyright assignment.

2004-10-13  Arnaud Vandyck  <avdyk@gnu.org>
	
	Reported by John Kristian <jk2004@engineer.com>:
	* manifest.mf: added Implementation Version field.
	
2004-10-06  Chris Burdess  <dog@gnu.org>

	* Makefile.am: Make invocation of javadoc gjdoc-compatible.

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

	* all: Replaced GPL exception with new exception text.

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

	* all: Reassigned David Brownell's copyright to FSF.

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

	* (dom): Updated to DOM Level 3 Core and L&S interfaces.
	* GnomeDocumentBuilder.java: Fixed stream retrieval bug.

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

	* Makefile.am, acinclude.m4: Added gcjh detection. Makefile will now
	rebuild out of date JNI headers and gnujaxp.jar.

2004-04-22  Arnaud Vandyck  <avdyk@ressource-toi.org>

	* source: sources directory has been moved to source directory,
	src has been deleted. Sorry for the inconvenience.

2004-04-20  Arnaud Vandyck  <avdyk@ressource-toi.org>

	Reported by Maarten Coene <MacBelgium@toughguy.net>:
	* src/gnu/xml/aelfred2/JAXPFactory.java (getFeature): throws a
	NullPointerException if you check for a feature that hasn't been
	set at the factory level.

2004-04-19  Arnaud Vandyck  <avdyk@ressource-toi.org>

	* src/xmlj_io.h, src/xmlj_io.c, src/xmlj_error.h,
	src/xmlj_error.c, src/libxsltj.c,
	src/gnu/xml/libxmlj/transform/URIResolverProxy.java,
	src/gnu/xml/libxmlj/transform/TransformerImpl.java,
	src/gnu/xml/libxmlj/transform/TransformerFactoryImpl.java,
	src/gnu/xml/libxmlj/transform/TransformTest.java,
	src/gnu/xml/libxmlj/transform/TemplatesImpl.java,
	src/gnu/xml/libxmlj/transform/SourceWrapper.java,
	src/gnu/xml/libxmlj/transform/SourceLocatorImpl.java,
	src/gnu/xml/libxmlj/transform/LibxsltStylesheet.java,
	src/gnu/xml/libxmlj/transform/LibxmlDocument.java,
	src/gnu/xml/libxmlj/transform/JavaContext.java,
	src/gnu/xml/libxmlj/transform/IOToolkit.java,
	src/gnu/xml/libxmlj/transform/ErrorListenerProxy.java,
	src/gnu/xml/libxmlj/transform/DefaultURIResolverImpl.java,
	src/gnu/xml/libxmlj/transform/DefaultErrorListenerImpl.java:
	changed the copyright holder to FSF and changed the license to
	GPL+linking exception, many thanks to Julian Scheid who wrote the
	code and accepted to donate his code to the FSF and change the
	license to GPL + linking exception.

	* README: updated (added the libxmlj README comments)

	* AUTHORS: added Julian.

	* INSTALL: updated to match the current scheme (new dependency,
	new build system)

2004-04-15  Arnaud Vandyck  <avdyk@ressource-toi.org>

	* src/gnu/xml/aelfred2/SAXDriver.java (SAXDriver): removed the
	comparison choice because an org.xml.sax.SAXNotSupportedException
	must be caught, so it'll slow the benefit of the interned strings!

	* src/gnu/xml/pipeline/WellFormednessFilter.java (startDTD)
	(notationDecl, unparsedEntityDecl): reverted the '==' comparison
	between String's because they are internaled and there is no way
	to choose if the comparison must use '==' or 'equals'

	* src/gnu/xml/pipeline/ValidationConsumer.java: reverted the '=='
	comparison between String's because they are internaled and there
	is no way to choose if the comparison must use '==' or 'equals'

	* src/gnu/xml/pipeline/DomConsumer.java:
	(populateAttributes): using equals because I'm not sure "" is
	interned?

	* src/gnu/xml/aelfred2/XmlParser.java (parseAttribute)
	(parseAttDef, readAttType, parseDefault)
	(setInternalEntity, pushURL): if string-interning use the '=='
	comparison, else, use 'equals'

	* src/gnu/xml/aelfred2/SAXDriver.java (attribute, startElement)
	(getType): if string-interning use the '==' comparison, else, use
	'equals'

2004-04-14  Arnaud Vandyck  <avdyk@ressource-toi.org>

	* src/gnu/xml/aelfred2/SAXDriver.java (getFeature):
	http://xml.org/sax/features/string-interning can now be set to
	false so comparison if perform using equals (if true, comparison
	is performed with '==').

	* src/gnu/xml/util/XCat.java (startElement): reverted the '=='
	comparison between String's because they are internaled and there
	is no way to choose if the comparison must use '==' or 'equals'

	* src/javax/xml/transform/sax/SAXResult.java, SAXSource.java,
	SAXTransformerFactory.java, TemplatesHandler.java,
	TransformerHandler.java,
	src/javax/xml/transform/stream/StreamResult.java,
	StreamSource.java, src/javax/xml/transform/dom/DOMLocator.java,
	DOMResult.java, DOMSource.java,
	src/javax/xml/parsers/ClassStuff.java, DocumentBuilder.java,
	DocumentBuilderFactory.java, FactoryConfigurationError.java,
	ParserConfigurationException.java, SAXParser.java,
	SAXParserFactory.java, src/javax/xml/transform/ClassStuff.java,
	ErrorListener.java, OutputKeys.java, Result.java, Source.java,
	Templates.java, Transformer.java,
	TransformerConfigurationException.java, TransformerException.java,
	TransformerFactory.java,
	TransformerFactoryConfigurationError.java,
	src/gnu/xml/libxmlj/transform/DefaultErrorListenerImpl.java,
	DefaultURIResolverImpl.java, ErrorListenerProxy.java,
	IOToolkit.java, JavaContext.java, LibxmlDocument.java,
	SourceLocatorImpl.java, SourceWrapper.java, TemplatesImpl.java,
	TransformTest.java, TransformerImpl.java,
	TransformerFactoryImpl.java, URIResolverProxy.java: removed the id
	cvs tag to ease integration in other cvs repositories

2004-04-08  Arnaud Vandyck  <avdyk@ressource-toi.org>

	* NEWS: initial commit

	* INSTALL: initial commit

	* src: sources directory has been moved to src directory

	* configure.ac, Makefile.am: now build jaxp and libxmlj together

	* Makefile.aj, automakejar, configure.in: removed, no more used.
	
2004-02-05  Arnaud Vandyck  <avdyk@users.sourceforge.net>

	* ChangeLog.libxmlj, source/*.c, source/*h,
	source/gnu/xml/libxmlj/transform/*.*: imported from libxmlj

	* ChangeLog.gnujaxp: added to have some history of the project

