Fri Jul 10 16:11:34 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a regression in entity parsing when using the reader
	  introduced because we were not reusing _private on entities parsing
	  context

Thu Jul  9 10:21:00 CEST 2009 Daniel Veillard <daniel@veillard.com>

	Aleksey Sanin support for c14n 1.1
	* c14n.c include/libxml/c14n.h: adds support for C14N 1.1,
	  new flags at the API level
	* runtest.c Makefile.am testC14N.c xmllint.c: add support in CLI
	  tools and test binaries
	* result/c14n/1-1-without-comments/* test/c14n/1-1-without-comments/*:
	  add a new batch of tests

Thu Jul  9 08:52:35 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* config.h.in: update of libtool seems to have modified it
	* python/libxml2class.txt: python update modified the order
	  of classes apparently

Thu Jul  9 08:43:06 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* tree.c: avoid calling xmlAddID with NULL values
	* parser.c: add a few xmlInitParser in some entry points

Fri Jun 19 19:51:08 CEST 2009 Rob Richards <rrichards@cdatazone.org>

	* parser.c: use options from current parser context when creating 
	  a parser context within xmlParseCtxtExternalEntity
	* xmlwriter.c: fix error message when unable to create output file

Thu Jun  4 11:17:23 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* c14n.c debugXML.c doc/examples/io2.c parser.c schematron.c
	  valid.c xmlschemas.c xmlwriter.c xpath.c: use %s to printf string
	  patch by Christian Persch, fixes #581612

Thu Jun  4 11:06:07 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* parser.c threads.c: change the threading initialization sequence
	  as suggested by Igor Novoseltsev to avoid crash if xmlInitParser()
	  is called from a thread which is not the main one, should fix
	  #584605

Fri May 15 17:54:48 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: make sure we keep line numbers fixes #580705
	  based Aaron Patterson patch

Tue May 12 09:13:58 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: a broken HTML table attributes initialization,
	  fixes #581803, by Roland Steiner <rolandsteiner@google.com>

Tue May 12 08:54:20 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* libxml2.doap: adding RDF dope file.

Tue May 12 08:42:52 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* configure.in: adapt the extra version detection code to git

Wed Apr 29 16:09:38 CEST 2009 Rob Richards <rrichards@cdatazone.org>

	* parser.c: do not set error code in xmlNsWarn

Wed Apr 15 11:18:24 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h include/libxml/xmlwriter.h
	  include/libxml/relaxng.h include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in include/libxml/valid.h
	  include/libxml/xmlschemas.h include/libxml/xmlerror.h: change
	  ATTRIBUTE_PRINTF into LIBXML_ATTR_FORMAT to avoid macro name
	  collisions with other packages and headers as reported by
	  Belgabor and Mike Hommey

Thu Apr  2 13:57:15 CEST 2009 Daniel Veillard <daniel@veillard.com>

	* error.c: fix structured error handling problems #564217

Thu Mar 26 19:08:08 CET 2009 Rob Richards <rrichards@cdatazone.org>

	* parser.c: use options from current parser context when creating 
	  an entity parser context

Wed Mar 25 11:40:34 CET 2009 Daniel Veillard <daniel@veillard.com>

	* doc/*: updated SVN URL for GNOME as pointed by Vincent Lefevre
	  and regenerated docs

Wed Mar 25 11:21:26 CET 2009 Daniel Veillard <daniel@veillard.com>

	* parser.c: hide the nbParse* variables used for debugging
	  as pointed by Mike Hommey

Wed Mar 25 10:50:05 CET 2009 Daniel Veillard <daniel@veillard.com>

	* include/wsockcompat.h win32/Makefile.bcb xpath.c: fixes for
	  Borland/CodeGear/Embarcadero compilers by Eric Zurcher

Wed Mar 25 10:43:07 CET 2009 Daniel Veillard <daniel@veillard.com>

	* xpath.c: xmlXPathRegisterNs should not allow enpty prefixes

Mon Mar 23 20:27:15 CET 2009 Daniel Veillard <daniel@veillard.com>

	* tree.c: add a missing check in xmlAddSibling, patch by Kris Breuker
	* xmlIO.c: avoid xmlAllocOutputBuffer using XML_BUFFER_EXACT which
	  leads to performances problems especially on Windows.

Tue Mar  3 14:30.28 HKT 2009 William Brack <wbrack@mmm.com.hk>

	* trio.h: changed include of config.h to be surrounded by
	  quotation marks #570806

Sat Feb 21 10:20:34 CET 2009 Daniel Veillard <daniel@veillard.com>

	* threads.c parser.c: more warnings about xmlCleanupThreads and
	  xmlCleanupParser to avoid troubles like #571409

Fri Feb 20 09:40:04 CET 2009 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: cleanups and error reports when xmlTextWriterVSprintf
	  fails, by Jinmei Tatuya

Fri Feb 20 09:18:56 CET 2009 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: remove a couple of leaks on errors reported by
	  Jinmei Tatuya

Sun Jan 18 22:37:59 CET 2009 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/xml.html doc/*: preparing 0.7.3 release
	* include/libxml/parserInternals.h SAX2.c: fix a typo in a name

Sun Jan 18 21:48:28 CET 2009 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h include/libxml/xmlwriter.h
	  include/libxml/relaxng.h include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in include/libxml/valid.h
	  include/libxml/xmlschemas.h include/libxml/xmlerror.h:
	  port patch from Marcus Meissner to add gcc checking for
	  printf like functions parameters, should fix #65068
	* doc/apibuild.py doc/*: modified the script accordingly
	  and regenerated
	* xpath.c xmlmemory.c threads.c: fix a few warnings

Sun Jan 18 20:40:42 CET 2009 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlwin32version.h.in: windows header should
	  get the same define

Sun Jan 18 18:22:33 CET 2009 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlversion.h.in include/libxml/xmlmemory.h:
	  apply patch from Marcus Meissner to add gcc attribute alloc_size
	  should fix #552505
	* doc/apibuild.py doc/* testapi.c: regenerate the API
	* include/libxml/parserInternals.h: fix a comment problem raised
	  by apibuild.py

Sun Jan 18 16:39:01 CET 2009 Daniel Veillard <daniel@veillard.com>

	* threads.c: also remove pthread key when stopping thread
	  support, patch based on Alex Ott one should fix #564723

Sun Jan 18 15:55:18 CET 2009 Daniel Veillard <daniel@veillard.com>

	* threads.c: patch from Daniel Zimmermann fixing a memory leak
	  in an edge case, solves #562230

Sun Jan 18 15:06:05 CET 2009 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parserInternals.h SAX2.c: add a new define
	  XML_MAX_TEXT_LENGTH limiting the maximum size of a single text
	  node, the defaultis 10MB and can be removed with the HUGE
	  parsing option

Mon Jan 05 18:28:41 CET 2009 Rob Richards <rrichards@cdatazone.org>

	* include/libxml/parser.h parser.c: add XML_PARSE_OLDSAX parser 
	  option to enable pre 2.7 SAX behavior.

Wed Dec 31 23:11:37 CET 2008 Rob Richards <rrichards@cdatazone.org>

	* tree.c: set doc on last child tree in xmlAddChildList for 
	  bug #546772. Fix problem adding an attribute via with xmlAddChild 
	  reported by Kris Breuker.

Sun Dec 27 14:16:13 CET 2008 Rob Richards <rrichards@cdatazone.org>

	* xmlwriter.c: fix indenting in xmlTextWriterFullEndElement for 
	  bug# 554353.

Thu Nov 27 16:24:52 CET 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h tree.c python/generator.py: adds
	  element traversal support
	* valid.c: avoid a warning
	* doc/*: regenerated

Mon Nov 17 16:56:18 CET 2008 Daniel Veillard <daniel@veillard.com>

	* SAX2.c parser.c: fix for CVE-2008-4226, a memory overflow
	  when building gigantic text nodes, and a bit of cleanup
	  to better handled out of memory problem in that code.
	* tree.c: fix for CVE-2008-4225, lack of testing leads to
	  a busy loop test assuming one have enough core memory.

Thu Nov  6 14:34:35 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: Matthias Kaehlcke reported a build problem when
	  not compiling HTML support in.

Fri Oct 17 15:24:08 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/Makefile.am: patch from Adrian Bunk which
	  adds --disable-rebuild-docs to avoid rebuilding them

Fri Oct  3 09:43:45 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* NEWS: preparing the release of 2.7.2
	* dict.c: fix the Solaris portability issue
	* parser.c: additional cleanup on #554660 fix
	* test/ent13 result/ent13* result/noent/ent13*: added the
	  example in the regression test suite.
	* HTMLparser.c: handle leading BOM in htmlParseElement()

Thu Oct  2 22:53:39 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a nasty bug introduced when cleaning up
	  entities processing in 2.7.x , fixes #554660

Thu Sep 25 18:04:20 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fix an HTML parsing error on large data sections
	  reported by Mike Day
	* test/HTML/utf8bug.html result/HTML/utf8bug.html.err
	  result/HTML/utf8bug.html.sax result/HTML/utf8bug.html: add the
	  reproducer to the test suite

Thu Sep 25 17:35:57 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* runxmlconf.c: fix compilation if XPath is not included

Thu Sep 25 16:54:04 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: patch from Riccardo Scussat fixing custom error
	  handlers problems.

Thu Sep 25 16:30:11 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlsave.h xmlsave.c: new options to serialize
	  as XML/HTML/XHTML and restore old entry point behaviours

Mon Sep  1 16:49:05 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/news.html configure.in python/setup.py NEWS:
	  prepare release of 2.7.1

Mon Sep  1 15:35:13 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* schematron.c xpath.c: applied a couple of patches from Martin
	  avoiding some leaks, fixinq QName checks in XPath, XPath debugging
	  and schematron code cleanups.
	* python/tests/Makefile.am python/tests/xpathleak.py: add the
	  specific regression tests, just tweak it to avoid output by default

Mon Sep  1 15:02:05 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* trionan.c: Borland C fix from Moritz Both
	* testapi.c: regenerate, workaround a problem for buffer testing
	* xmlIO.c HTMLtree.c: new internal entry point to hide even better
	  xmlAllocOutputBufferInternal
	* tree.c: harden the code around buffer allocation schemes
	* parser.c: restore the warning when namespace names are not absolute
	  URIs
	* runxmlconf.c: continue regression tests if we get the expected
	  number of errors
	* Makefile.am: run the python tests on make check
	* xmlsave.c: handle the HTML documents and trees
	* python/libxml.c: convert python serialization to the xmlSave APIs
	  and avoid some horrible hacks

Sat Aug 30 16:58:40 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* configure.in, doc/*: preparing 2.7.0 release
	* tree.c: remove some testing traces
	* parser.c xmlIO.c xmlschemas.c: remove some warnings

Sat Aug 30 14:50:16 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h tree.c: make a new kind of buffer where
	  shrinking and adding in head can avoid reallocation or full
	  buffer memmoves
	* encoding.c xmlIO.c: use the new kind of buffers for output
	  buffers

Sat Aug 30 10:18:13 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* doc/* testapi.c: regenerated

Fri Aug 29 21:53:12 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* doc/examples/reader3.c: patch from  Robert Schwebel , allows to
	  compile the example if configured without output support fixes
	  #545582
	* Makefile.am: add testrecurse to the make check tests
	* HTMLparser.c: if the parser got a encoding argument it should be
	  used over what the meta specifies, patch fixing #536346

Fri Aug 29 14:41:38 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: a couple more fixes
	* nanohttp.c nanoftp.c: patch from Andreas Färber to compile on Haiku
	  fixes #527880
	* doc/examples/*: regenerated

Thu Aug 28 17:31:46 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: completely different fix for
	  the recursion detection based on entity density, big cleanups
	  in the entity parsing code too
	* result/*.sax*: the parser should not ask for used defined versions
	  of the predefined entities
	* testrecurse.c: automatic test for entity recursion checks
	* Makefile.am: added testrecurse
	* test/recurse/lol* test/recurse/good*: a first set of tests for
	  the recursion

Wed Aug 27 21:55:34 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlerror.h parser.c: a bit of cleanup and
	  added checks based on the regression tests of the xmlconf suite

Wed Aug 27 19:22:35 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* uri.c: bug in parsing RFC 3986 uris with port numbers

Wed Aug 27 17:30:48 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* configure.in Makefile.am: add an --with-coverage configure option
	  and a 'make cov' target based on gcc profiling and the lcov
	  tool. Currently at 68.9% coverage out of 'make check' and 
	  runsuite executions.
	* xmlreader.c: remove warnings due to C++ comments

Wed Aug 27 15:00:54 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parserInternals.h parser.c: cleanup entity
	  pushing error handling based on a patch from Ashwin

Wed Aug 27 13:41:26 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* threads.c: fix a small initialization problem raised by Ashwin
	* testapi.c gentest.py: increase testing especially for document
	  with an internal subset, and entities
	* tree.c: fix a deallocation issue when unlinking entities from
	  a document.
	* valid.c: fix a missing entry point test not found previously.
	* doc/*: regenerated the APIs, docs etc.

Tue Aug 26 15:02:58 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h parser.c xmllint.c: strengthen some
	  of the internal parser limits, add an XML_PARSE_HUGE option
	  to bypass them all. More internal parser limits will still need
	  to be added.

Tue Aug 26 09:42:08 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: add the testchar to 'make check'
	* xmlschemas.c: Volker Grabsch pointed out a typo
	* xmlregexp.c: production [19] from XML Schemas regexps were a
	  mistake removed in version REC-xmlschema-2-20041028, Volker Grabsch
	  provided a patch to remove it
	* test/schemas/regexp-char-ref_0.xml test/schemas/regexp-char-ref_0.xsd
	  test/schemas/regexp-char-ref_1.xsd result/schemas/regexp-char-ref_0_0
	  result/schemas/regexp-char-ref_1_0: Volker Grabsch also provided
	  regression tests for this

Tue Aug 26 09:25:39 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h xinclude.c xmllint.c: patch based on
	  Wieant Nielander contribution to add the option of not doing
	  URI base fixup in XInclude

Mon Aug 25 16:52:53 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied patch from Aswin to fix tree skipping
	* include/libxml/entities.h entities.c: fixed a comment and
	  added a new xmlNewEntity() entry point
	* runtest.c: be less verbose
	* tree.c: space and tabs cleanups

Mon Aug 25 10:56:30 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/entities.h entities.c SAX2.c parser.c: rework
	  the patch to avoid some ABI issue with people allocating
	  entities structure directly

Wed Aug 20 19:02:01 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h include/libxml/entities.h entities.c
	  parserInternals.c parser.c: fix for CVE-2008-3281

Sun Aug 10 17:06:13 CEST 2008 Rob Richards <rrichards@ctindustries.net>

	* dict.c: fix non GNUC builds.

Fri Aug  8 14:13:06 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* makefile.am: adding a check-valgrind target

Fri Aug  8 14:01:59 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* Makefile.am testdict.c: add the new test in 'make check' and
	  update it to check subdictionaries processing.

Fri Aug  8 12:07:20 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* testdict.c: added a program to regression test the dictionary code
	* dict.c: improve the lookup efficiency by caching the key.

Thu Aug  7 18:30:55 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* dict.c: chased and found a couple of nasty issues

Thu Aug  7 15:51:31 CEST 2008 Sven Herzberg <sven@imendio.com>

	Bug 546629 – runtests doesn't pass on my mac
	Reviewed by William M. Brack.

	* runtest.c: use libpthread on Mac OS X as well

Wed Aug  6 12:24:33 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* uri.c: allow [ and ] in fragment identifiers, 3986 disallow them
	  but it's widely used for XPointer, and would break DocBook
	  processing among others

Wed Aug  6 11:32:21 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* dict.c: change the big key algorithm to work properly with QName
	  too, fix a bug with dict size and sub dictionaries

Mon Aug  4 17:27:27 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* uri.c include/libxml/uri.h: rewrite the URI parser to update to
	  rfc3986 (from 2396)
	* test/errors/webdav.xml result/errors/webdav.xml*: removed the
	  error test, 'DAV:' is a correct URI under 3986
	* Makefile.am: small cleanup in make check

Thu Jul 31 21:49:45 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* runxmlconf.c: more progresses against the official regression tests
	* runsuite.c: small cleanup for non-leak reports
	* include/libxml/tree.h: parsing flags and other properties are
	  now added to the document node, this is generally useful and
	  allow to make Name and NmToken validations based on the parser
	  flags, more specifically the 5th edition of XML or not
	* HTMLparser.c tree.c: small side effects for the previous changes
	* parser.c SAX2.c valid.c: the bulk of the changes are here,
	  the parser and validation behaviour can be affected, parsing
	  flags need to be copied, lot of changes. Also fixing various
	  validation problems in the regression tests.

Thu Jul 31 10:15:53 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* runxmlconf.c: added a skipped list, insert rmt-ns10-035
	* Makefile.am: improve 'make check'
	* include/libxml/xmlerror.h parser.c: clean up namespace errors
	  checking and reporting, errors when a document is labelled
	  as UTF-16 while it is parsed as UTF-8 and no encoding was given
	  explicitly.
	* result/errors/webdav.xml.*: some warnings are no recategorized
	  as Namespace errors

Wed Jul 30 14:55:54 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlmemory.h xmlmemory.c: add xmlMemDisplayLast to
	  help debug incremental memory leaks, and some cleanups
	* runxmlconf.c: use that new call and avoid ever touching the
	  system catalog in the regression tests

Wed Jul 30 14:33:33 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: an XML-1.0 document can't load
	  an 1.1 entity
	* runxmlconf.c: when using entities make sure we load them

Tue Jul 29 18:43:07 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a bug not detecting cross entity comments probably
	  when comment parsing got optimized.
	* Makefile.am: add make check
	* runxmlconf.c: fix the log file name

Tue Jul 29 18:09:26 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* runxmlconf.c Makefile.am: add a C program to run the W3C test
	  suite, work in progress
	* xmllint.c: add a new option --oldxml10 to use the old parser
	* parser.c: fix the XML_PARSE_OLD10 processing of the new option
	  and a bug in version parsing

Tue Jul 29 11:12:40 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xpath.c: space and tabs cleanup

Tue Jul 29 10:59:36 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h include/libxml/xmlerror.h parser.c:
	  implement XML-1.0 5th edition, add parser option XML_PARSE_OLD10
	  to stick to old behaviour
	* testapi.c gentest.py: modified slightly and regenerated
	* Makefile.am: add testchar

Thu Jul 24 16:57:20 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* Makefile.am testchar.c Makefile.tests README.tests: add a
	  new regression test program for testing character ranges and
	  UTF8 encoding/decoding

Wed Jul 23 15:32:39 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fix the build root

Wed Jul 16 22:28:48 PDT 2008 William Brack <wbrack@mmm.com.hk>

	* pattern.c: fix problem with xmlStreamPop when pattern includes
	  a "." element (see discussion on libxslt list)

Mon Jul  7 15:49:59 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fix line number on text nodes, problem raised by Ralf Junker

Sun Jun 29 17:04:28 CEST 2008 Rob Richards <rrichards@ctindustries.net>
	* xmlschemas.c: fix crash with invalid whitespace facet

Wed Jun 11 10:13:02 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/FAQ.html: add a section in the FAQ about
	  multithread and xmlCleanupParser

Tue Jun 10 16:52:17 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* catalog.c: apply a couple of fixes based on a Coverity report
	  forwarded by Derrick Price.
	* VxWorks/README VxWorks/Makefile VxWorks/build.sh: instructions
	  Makefile, and shell script to build on VxWorks 6.4+ provided by
	  Jim Wert.

Tue Jun  3 18:07:13 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/setup.py: apply patch from Martin fixing
	  python whitespaces
	* NEWS: following previous commit rebuilt now in UTF-8

Mon Jun  2 17:39:42 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* ChangeLog: patch from Hans de Goede to switch the file to UTF-8
	* doc/news.xsl: switch to generate the NEWS file in UTF-8 instead of
	  ISO-8859-1

Mon May 12 15:12:44 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: avoid a regexp crash, should fix #523738

Mon May 12 14:56:06 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c runtest.c testapi.c include/libxml/xmlreader.h
	  python/types.c python/libxml_wrap.h python/libxml.c: fx compilation
	  when configured without the reader should fix #513110
	* doc/*: regenerated

Sat May  3 14:33:29 CEST 2008 Rob Richards <rrichards@ctindustries.net>

	* dict.c: check for stdint.h and define types when using MSVC

Mon Apr 28 20:06:12 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: applied patch from Ashwin to avoid a potential
	  double-free

Thu Apr 24 13:56:53 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied patch from Ashwin fixing a number of realloc problems
	* HTMLparser.c: improve handling for misplaced html/head/body

Tue Apr 22 10:27:17 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* dict.c: improvement on the hashing of the dictionary, with visible
	  speed up as the number of strings in the hash increases, work from
	  Stefan Behnel

Fri Apr 11 14:44:00 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlschemas.h xmlschemas.c: added new function
	  xmlSchemaValidCtxtGetParserCtxt based on Holger Kaelberer patch
	* doc/apibuild.py doc/*: regenerated the doc, chased why the new
	  function didn't got any documentation, added more checking in the
	  generator
	* include/libxml/relaxng.h include/libxml/schematron.h
	  include/libxml/xmlschemas.h include/libxml/c14n.h
	  include/libxml/xmlregexp.h include/libxml/globals.h
	  include/libxml/xmlreader.h threads.c xmlschemas.c: various changes
	  and cleanups following the new reports


Thu Apr 10 10:07:00 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: extend the cleanup rule
	* xmlschemas.c: space cleanup

Wed Apr  9 19:43:25 CEST 2008 Rob Richards <rrichards@ctindustries.net>

	* include/wsockcompat.h: support older win32 platforms when building
	  with newer versions of VS

Tue Apr  8 16:56:07 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release of 2.6.32

Tue Apr  8 10:19:01 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix a bug introduced when fixing #438208 and reported by
	  Ashwin
	* python/generator.py: fix an infinite loop bug

Mon Apr  7 14:44:51 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fix a link to XmlNodeType doc reported by Martijn Arts
	* docs/*: rebuilt

Fri Apr  4 18:09:50 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: improve the *Recover* functions documentation

Thu Apr  3 14:57:15 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Mark Rowe fixing BOM or encoding detection
	  in external parsed entities, should fix #440415

Thu Apr  3 13:16:01 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix some problems with the *EatName functions when
	  running out of memory raised by Eric Schrock , should fix #438208

Thu Apr  3 12:41:29 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: horror around the definition of the lexical
	  values for decimal and derived types, fixing to reject empty 
	  values, should fix #503268

Thu Apr  3 11:44:57 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* encoding.c: buffer may not be  large enough to convert to
	  UCS4, patch from Christian Fruth , fixes #504015

Thu Apr  3 11:02:02 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: apparently it's okay to forget the semicolon after
	  entity refs in HTML, fixing char refs parsing accordingly based on
	  T. Manske patch, this should fix #517653

Thu Apr  3 09:30:29 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* error.c: avoid a scary realloc() loop should fix #520383

Thu Apr  3 08:22:52 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: more realloc problems pointed out by Ashwin

Thu Apr  3 07:40:13 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am: applied patch from Mike Hommey fixing distclean,
	  fixes #520387

Thu Apr  3 06:52:32 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xpath.h: small doc improvement for xmlXPathContext
	  from Jack Jansen, fixes #524759
	* doc/newapi.xsl doc/*: fixed a problem and regenerated the docs

Tue Apr  1 09:59:22 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* xpath.c: two patches from Alvaro Herrera to avoid problem when
	  running out of memory in XPath evaluations.

Mon Mar 31 11:23:19 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: lot of out of memory handling fixes from Ashwin
	* elfgcchack.h doc/elfgcchack.xsl: work around a problem with xmlDllMain
	* include/libxml/threads.h: indenting cleanups

Mon Mar 31 10:25:37 CEST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c docs/*: trying to clarify even more the xmlCleanupParser()
	  use and the memory documentation

Wed Mar 26 18:39:58 CET 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: changes based on  Alex Khesin patch where xmlParseCharRef
	  seems to not be checked correctly, fixes #520198

Wed Mar 26 15:03:49 CET 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Ashwin to avoid a problem of attribute
	  redefinition in the DTD. Remove a warning too.

Wed Mar 26 14:38:31 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fix a problem in externalSubsetSplit with a patch
	  from Ashwin

Tue Mar 25 17:48:02 CET 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix various attribute normalisation problems reported
	  by Ashwin
	* result/c14n/without-comments/example-4
	  result/c14n/with-comments/example-4: this impacted the result of
	  two c14n tests :-\
	* test/att9 test/att10 test/att11 result//att9* result//att10*
	  result//att11*: added 3 specific regression tests coming from the
	  XML spec revision and from Ashwin

Tue Mar 25 14:20:49 CET 2008 Daniel Veillard <daniel@veillard.com>

	* uri.c: fix saving for file:///X:/ URI embedding Windows file paths
	  should fix #524253 

Mon Mar 24 21:42:33 CET 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a problem reported by Ashwin for system parameter
	  entities referenced from entities in external subset, add a
	  specific loading routine.
	* test/valid/dtds/external.ent test/valid/dtds/external2.ent
	  test/valid/t11.xml result/valid/t11.xml*: added the test to
	  the regression suite

Mon Mar 24 15:04:54 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fix an XML Schemas crash raised by Stefan Behnel
	  when testing with W3C test suite

Mon Mar 24 12:12:00 CET 2008 Daniel Veillard <daniel@veillard.com>

	* threads.c: check some allocation with Ashwin patch

Wed Mar 19 16:41:52 CET 2008 Daniel Veillard <daniel@veillard.com>

	* vms/build_libxml.com: update from Tycho Hilhorst, should fix #523378

Tue Mar 18 09:23:05 CET 2008 Daniel Veillard <daniel@veillard.com>

	* threads.c: check some malloc returns with Ashwin patch, add
	  error messages and reindent the module.

Fri Mar 14 15:28:43 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: patch from Ashwin removing duplicate tests

Fri Mar 14 13:44:29 CET 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/schematron.h include/libxml/xmlerror.h schematron.c:
	  applied patch from Tobias Minich to allow plugin schematron error
	  reporting in the normal error system, should fix #513998

Fri Mar 14 11:52:09 CET 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c xinclude.c: patch from Vasily Chekalkin fixes memory
	  leaks, should fix 512647

Thu Mar 13 08:17:58 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: found a nasty bug in regexp automata build,
	  reported by Ashwin and Bjorn Reese

Wed Mar 12 18:56:22 CET 2008 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: patch from Arnold Hendriks improving parsing of
	  html within html bogus data, still not a complete fix though

Wed Mar 12 10:22:01 CET 2008 Daniel Veillard <daniel@veillard.com>

	* python/types.c: fix a memory error when using namespace nodes
	  returned from XPath queries, should fix #521699
	* python/tests/Makefile.am python/tests/xpathns.py: add a specific
	  regression test for it

Mon Mar 10 16:25:32 CET 2008 Rob Richards <rrichards@ctindustries.net>

	* include/win32config.h: add ICONV_CONST define for win32 build
	  to satisfy encoding.c change in rev 3693

Fri Mar  7 17:45:27 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c parser.c: fix handling of empty CDATA nodes as 
	  reported and discussed around #514181 and associated patches
	* test/emptycdata.xml result/emptycdata.xml* 
	  result/noent/emptycdata.xml: added a specific test in the
	  regression suite.

Thu Mar  6 15:23:10 CET 2008 Daniel Veillard <daniel@veillard.com>

	* encoding.c: poblem with encoding detection for UTF-16 reported by
	  Ashwin and found by Bill
	* test/valid/dtds/utf16b.ent test/valid/dtds/utf16l.ent
	  test/valid/UTF16Entity.xml result/valid/UTF16Entity.xml*: added
	  the example to the regression tests

Tue Mar  4 14:16:38 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: patch from Alex Khesin fixing CDATA output after
	  a text node.
	* parser.c: fixed the comment for xmlParserCleanup
	* globals.c: fixed indentation

Mon Feb 25 16:42:19 CET 2008 Daniel Veillard <daniel@veillard.com>

	* testModule.c: patch from Florent Guiliani to fix build on
	  SCO OpenServer

Thu Feb 21 22:46:08 CET 2008 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: made one of the changes suggested by Brian Krahmer
	* testRegexp.c: allow to pass '--' on the command line to allow
	  regexps starting with the character '-'

Tue Feb 19 08:49:32 CET 2008 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/tests/Makefile.am: applied cleanup
	  patches for cross compilation and MinGW from Roumen Petrov

Sat Feb 16 11:06:54 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix output bug reported by Petr Pajas and analyzed by
	  Bill

Fri Feb 15 09:32:11 CET 2008 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlerror.h tree.c: patch from Julien Charbon
	  to simplify the processing of xmlSetProp()

Fri Feb 15 08:45:32 CET 2008 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in encoding.c: patch from Roumen Petrov
	  to detect if iconv() needs a const for the second parameter

Fri Feb 15 08:41:31 CET 2008 Daniel Veillard <daniel@veillard.com>

	* macos/src/XMLTestPrefix2.h win32/Makefile.msvc: EOL cleanups
	  from Florent Guiliani

Wed Feb 13 10:56:38 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Alfred Mickautsch to flush the
	  output at the end of document.

Fri Feb  8 11:57:03 CET 2008 Daniel Veillard <daniel@veillard.com>

	* doc/examples/examples.xml: regenerated, it was truncated.

Fri Feb  8 11:47:18 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c: apply simple patch from Carlo Bramini to avoid
	  compilation problems with Mingw32

Fri Feb  8 11:33:15 CET 2008 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: apply patch from Andrew Tosh to fix behaviour
	  when '.' is used in a posCharGroup
	* test/schemas/poschargrp0_0.* result/schemas/poschargrp0_0_0*:
	  added the test to the regression suite

Fri Feb  8 10:54:09 CET 2008 Daniel Veillard <daniel@veillard.com>

	* dict.c: applied patch from Florent Guilian to remove an
	  useless mutex in the xmlDict structure.

Wed Feb  6 17:00:20 CET 2008 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: another leak reported by Ashwin
	* xinclude.c: fixed the behaviour when XIncluding a fragment
	  of the current document, patch from Chris Ryan

Wed Feb  6 12:10:08 HKT 2008 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: added space for port number (when not 80) in
	  xmlNanoHTTPMethodRedir, plus a few more comments. Should
	  fix #514521.

Tue Feb  5 09:41:46 CET 2008 Daniel Veillard <daniel@veillard.com>

	* schemas.c: apply fix suggested by Ashwin correcting a cut-n-paste
	  error about the SAX callback in cdataBlockSplit when streaming
	  XSD validation 

Tue Feb  5 09:36:46 CET 2008 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied a patch based on Petr Sumbera one to avoid a 
	  problem with paths starting with //

Mon Feb  4 17:48:30 CET 2008 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/xmlmem.html: added a small section on returning
	  memory to the kernel by compacting the heap provided by Wolfram Sang

Fri Jan 25 20:01:42 CET 2007 Rob Richards <rrichards@ctindustries.net>

	* include/win32config.h win32/Makefile.msvc: fix build under VS 2008.
	  patch by David Wimsey

Thu Jan 24 15:37:04 CET 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a memory leak in internal subset parsing with
	  a fix from Ashwin
	* test/errors/content1.xml result/errors/content1.xml*:
	  add test to regressions

Fri Jan 11 09:00:09 CET 2008 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: preparing release of 2.6.31

Fri Jan 11 08:58:49 CET 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: avoid a warning on 64bits introduced earlier
	* parserInternals.c: make more checking on the UTF-8 input

Fri Jan 11 15:37:05 CST 2008 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: avoid stopping parsing when encountering
	  out of range characters in an HTML file, report and 
	  continue processing instead, should fix #472696

Fri Jan 11 15:13:35 CST 2008 Daniel Veillard <daniel@veillard.com>

	* check-relaxng-test-suite2.py check-relaxng-test-suite.py
	  Makefile.am python/tests/Makefile.am python/Makefile.am
	  check-xsddata-test-suite.py: patches from John Carr to
	  start cleaning up 'make diskcheck' problems c.f. #506228

Fri Jan 11 14:48:40 CST 2008 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: apply fix from Stefan Kost to avoid a crash
	  in xmllint, fixes 504284

Fri Jan 11 14:39:03 CST 2008 Daniel Veillard <daniel@veillard.com>

	* xml2-config.in: apply patch from Fred Crozat to avoid
	  outputting -L/usr/lib from xml2-config, fixes #497012

Fri Jan 11 14:18:09 CST 2008 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fix definition for <embed> to avoid error
	  when saving back, patch from Stefan Behnel fixing 495213

Fri Jan 11 14:06:09 CST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Christian Schmidt fixing a 
	  column counter update problem, fixes #472696

Fri Jan 11 13:22:14 CST 2008 Daniel Veillard <daniel@veillard.com>

	* parser.c: handle a erroneous parsing of attributes in 
	  case said attribute has been redeclared in the DTD with a
	  different type
	* hash.c: fix the hash scanner to not crash if a first element
	  from the hash list is been removed in the callback

Wed Jan  9 10:15:50 CST 2008 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: fix indentation in xmlTextWriterFullEndElement,
	  as raised by Felipe Pena, should fix #508156

Tue Dec  6 11:07:42 CET 2007 Rob Richards <rrichards@ctindustries.net>

	* pattern.c: fix crash from double free of name for bug #501760

Fri Nov 23 11:47:48 CET 2007 Daniel Veillard <daniel@veillard.com>

	* threads.c: remove unused variable in __xmlGlobalInitMutexLock
	  reported by Hannes Eder

Mon Nov 19 18:39:26 CET 2007 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: remove a cut-and-paste copy error

Fri Nov 16 11:55:36 CET 2007 Rob Richards <rrichards@ctindustries.net>

	* globals.c threads.c include/libxml/threads.h: 
	  __xmlGlobalInitMutexDestroy() will free global_init_lock on Win32.
	  Patch from Marc-Antoine Ruel.

Tue Nov 13 21:26:27 CET 2007 Rob Richards <rrichards@ctindustries.net>

	* schematron.c: fix crash/leaks from xmlSchematronParse due to improper
	  schema document ownership for bug #495215

Tue Oct 30 21:24:55 CET 2007 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: xmlFree(NULL) should not crash in debug mode
	  should fix #491651

Tue Oct 16 13:58:41 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* testURI.c: add a debug option printing all the fields within
	  the parsed URI structure

Wed Oct 10 10:25:52 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: fix to avoid a crash when dumping an attribute from
	  an XHTML document, patch contributed to fix #485298

Tue Aug 28 19:32:28 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: another nasty regexp case fixed.
	* test/regexp/ranges2 result/regexp/ranges2: added to regression
	  suite

Fri Aug 24 10:58:58 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: Enhanced to include port number (if not == 80) on the
	  "Header:" URL (bug #469681).
	* xmlregexp.c: Fixed a typo causing a warning message.

Thu Aug 23 22:48:20 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: fix an open() call with creation without 3rd argument
	  hopefully that interface is never used.

Thu Aug 23 17:00:49 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: preparing release of 2.6.30

Thu Aug 23 20:58:28 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed xmlXPathCompOpEvalPositionalPredicate problem
	  with object caching (bug #469410)

Thu Aug 23 11:28:38 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c test/schemas/*455953* result/schemas/bug455953*:
	  applied patch from Frank Gross fixing Schemas IDC import bug
	  #455953 and also add the test to the regression suite

Wed Aug 22 18:29:42 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: try to fix for the nth time the automata generation
	  in case of complex ranges. I suppose that time it is actually okay

Tue Aug 14 15:51:05 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* parser.c: aligned xmlSAXUserParseMemory() to match 
	  xmlSAXUserParseFile() logic based on Ashwin post, and ifdef
	  cleanup

Tue Aug 14 11:42:27 CEST 2007 Rob Richards <rrichards@ctindustries.net>

	* xmlIO.c: fixed windows path determination (patch from
	  Roland Schwarz, bug #462877)
	* win32/Makefile.mingw win32/configure.js: fixed mingw build
	  (patch from Roland Schwarz, bug #462877)

Wed Aug  1 09:50:12 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a parser bug where invalid char in comment may
	  not be detected, reported by Ashwin Sinha
	* test/errors/comment1.xml result/errors/comment1.xml*: added
	  the example to the regression suite

Thu Jul 26 13:42:26 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: fixed problem reported on bug #460415

Thu Jul 19 18:10:58 PDT 2007 William Brack <wbrack@mmm.com.hk>

	* uri.c: applied patch from from Patrik Fimml.  Fixes bug #458268.

Wed Jul 18 11:05:08 PDT 2007 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: applied patch from bug #454608 from Patrik Fimml.
	  Fixes bug #454608.

Wed Jul 11 19:57:59 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch for xsi:nil from Frank Gross, this
	  should fix bug #358125

Wed Jul  4 17:44:20 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: patch from Dodji Seketeli to avoid a leak on repeated
	  uses of xmlTextWriterStartDocument()

Tue Jun 26 13:30:50 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fix a crash on solaris when a printf %s with a NULL
	  argument occurs, should fix #450936

Wed Jun 13 13:33:38 PDT 2007 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem in previous fix to xmlXPathNodeSetSort

Tue Jun 12 18:17:28 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* doc/* configure.in NEWS: release of libxml2 2.6.29
	* valid.c: patch from Dagfinn I. Mannsåker for idness of name
	  in HTML, c.f. bug #305885.

Tue Jun 12 17:14:08 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixing bug #319964, parsing of HTML attribute really
	  should not have namespace processing.

Tue Jun 12 16:42:14 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the push mode when a big comment occurs before
	  an internal subset, should close bug #438835
	* test/comment6.xml result//comment6.xml*: added a special
	  test in the regression suite

Tue Jun 12 15:41:09 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix bug #414846 where invalid characters in attributes
	  would sometimes not be detected.
	* test/errors/attr4.xml result/errors/attr4.xml*: added a specific
	  test case to the regression tests

Tue Jun 12 14:23:24 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am: apply patch from Ryan Hill to cope with changes
	  in GNU tar, should fix #396751

Tue Jun 12 12:03:36 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* python/types.c: try to allow compilation on old python version
	  should fix #398125

Tue Jun 12 11:48:15 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: htmlNodeDumpFormatOutput didn't handle XML_ATTRIBUTE_NODe
	  fixes bug #438390

Tue Jun 12 11:37:55 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: workaround misgenerated file: URIs c.f. #437385

Tue Jun 12 11:22:47 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #407436 a crash in a specific case of
	  Relax-NG validation

Tue Jun 12 11:12:50 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed bug #383687, some case of recursion on next
	  were not caught in the catalog code.

Tue Jun 12 10:37:42 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed bug #381877, avoid reading over the end
	  of stream when generating an UTF-8 encoding error.

Tue Jun 12 10:16:48 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #366161, trivially added the check in
	  xmlCtxtReset()

Fri Jun  8 21:48:21 CEST 2007 Rob Richards <rrichards@ctindustries.net>

	* win32/configure.js win32/Makefile.msvc: add --vcmanifest flag (yes/no) 
	  for VC8 build support to embed manifest within files. Under MS VC, build 
	  libxml2_a_dll.lib by default (LIBXML_STATIC_FOR_DLL flag).

Fri Jun  8 21:37:46 CEST 2007 Rob Richards <rrichards@ctindustries.net>

	* threads.c include/libxml/threads.h: use specified calling convention 
	  for xmlDllMain. Old SDKs (VC6) only support InterlockedCompareExchange.
	  add xmlDllMain to header for win32 when building for static dll

Fri Jun  8 10:51:28 CEST 2007 Rob Richards <rrichards@ctindustries.net>

	* xmlwriter.c: fixed problem with namespace declaration being 
	  written more than once per element start tag

Wed Jun  6 10:18:28 PDT 2007 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with xmlXPathNodeSetSort;
	  fixed problem with xmlXPathNodeTrailingSorted (both bug#413451)

Wed May 30 22:05:08 PDT 2007 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with string value for PI node
	  (bug #442275)

Mon May 28 16:14:50 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* uri.c: fix bug reported by François Delyon

Tue May 22 08:59:48 PDT 2007 William Brack <wbrack@mmm.com.hk>

	* encoding.c: Fixed typo in xmlCharEncFirstLine pointed out
	  by Mark Rowe (bug #440159)
	* include/libxml/xmlversion.h.in: Added check for definition of
	  _POSIX_C_SOURCE to avoid warnings on Apple OS/X (patch from
	  Wendy Doyle and Mark Rowe, bug #346675)
	* schematron.c, testapi.c, tree.c, xmlIO.c, xmlsave.c: minor
	  changes to fix compilation warnings - no change to logic.

Tue May 15 22:18:08 PDT 2007 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: small enhancement to last fix, pointed out
	  by Alex Cornejo

Tue May 15 12:38:38 PDT 2007 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: fixed problem on gzip streams (bug #438045)
	* xpath.c: fixed minor spot of redundant code - no logic change.

Fri May 11 22:45:18 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* xpath.c: enhanced the coding for xmlXPathCastNumberToString
	  in order to produce the required number of significant digits
	  (bug #437179)

Thu May 10 01:52:42 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* list.c: applied patch to fix xmlListAppend() from 
	  Georges-André SILBER
	* valid.c: also fix the place where it was called.

Wed May  2 18:47:33 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* parser.c: tried to fix an error problem on entity content failure
	  reported by Michael Day

Wed May  2 18:23:35 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* configure.in: typo patch from Bjorn Reese

Wed May  2 18:12:58 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from Michael Day to add support for
	  <embed>

Thu Apr 26 10:58:50 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Jean-Daniel Dupas pointed a couple of problems
	  in htmlCreateDocParserCtxt.

Thu Apr 26 10:36:26 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* uri.c include/libxml/uri.h: patch from Richard Jones to save
	  the query part in raw form.
	* libxml2-python-api.xml: also added accessor for the python bindings

Wed Apr 25 15:57:32 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am doc/examples/Makefile.am Makefile.am: applied
	  patch from Richard Jones to for the silent flag on valgrind
	  when doing "make valgrind"
	* xmlregexp.c: raise a regexp error when '\' is misused to escape
	  a standard character.

Tue Apr 24 20:15:14 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* tree.c: Richard Jones reported xmlBufferAdd (buf, "", -1), fixing it

Tue Apr 24 10:59:28 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* uri.c: fix xmlURIUnescapeString comments which was confusing

Wed Apr 18 09:52:25 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* include/win32config.h libxml.h: new patch from Andreas Stricke to
	  better integrate support for Windows CE

Tue Apr 17 16:50:12 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* doc/* configure.in NEWS: release of libxml2 2.6.28

Tue Apr 17 14:47:42 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* catalog.c libxml.h win32/wince/wincecompat.h win32/wince/wincecompat.c
	  xmlIO.c nanohttp.c nanoftp.c trio.c triostr.c triostr.h: applied 
	  patch from Andreas Stricke to ease the compilation on Windows CE

Tue Apr 17 14:34:45 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmllint.c catalog.c: "xmllint unusable on win32" so applied
	  a libxml2 patch from Christian Ehrlicher

Mon Apr 16 09:05:01 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: change the way script/style are parsed to
	  not try to detect comments, reported by Mike Day
	* result/HTML/doc3.*: affects the result of that test

Wed Apr 11 22:38:18 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: small enhancement for quantifier range with
	  min occurs of 0; fixes bug 425542.
	
Fri Mar 30 14:41:57 CEST 2007 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied change from Michael Day to avoid a problem when
	  compiled without zlib support.

Wed Mar 21 17:58:13 CET 2007 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xpath.h: applied documentation patch from James Dennett

Wed Mar 21 21:20:48 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: fixed problem with 0x2d in Char Range (bug #420596)
	* test/regexp/bug420596, result/regexp/bug420596: added regression
	  test for this

Wed Mar 21 14:23:08 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: fixed memory access error on parsing of meta data
	  which had errors (bug #382206).  Also cleaned up a few warnings
	  by adding some additional DECL macros.

Tue Mar 20 09:58:13 CET 2007  Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied patch from Björn Wiberg to try to fix again
	  the silly __ss_family problem on various AIXes, should fix #420184

Wed Mar 14 20:30:38 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* configure.in: corrected small error in last commit
	* xmlreader.c: corrected small typo in last commit

Wed Mar 14 19:35:28 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: fixed problem with referenced attribute groups
	  (bug #417621)
	* configure.in: re-ordered some includes for types.h / socket.h
	  (bug #416001)

Fri Mar  9 17:54:40 CET 2007 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied patch from Julien Reichel cleaning up mode
	  and state internal flags mixups

Wed Mar  7 16:18:18 HKT 2007 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed xmlXPathCmpNodes for incorrect result on certain
	  cases when comparing identical nodes (bug #415567) with patch
	  from Oleg Paraschenko

Fri Feb 16 09:13:38 PST 2007 William Brack <wbrack@mmm.com.hk>

	* python/libxml.py: fixed tab problem with patch from
	  Andreas Hanke (bug #408626)

Thu Feb 15 12:43:28 PST 2007 William Brack <wbrack@mmm.com.hk>

	* doc/xml.html: Changed all references to libxml2 CVS over to
	  the corresponding SVN.  A few other spelling/grammar/links
	  also changed.
	* doc/libxml2-api.xml, doc/*.html: Regenerated all docs.

Tue Feb 13 18:15:58 PST 2007 William Brack <wbrack@mmm.com.hk>

	* xpath.c: Fixed memory bug with invalid function reported by
	  Francois Delyon on mailing list

Mon Feb 12 16:40:48 PST 2007 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem with invalid char encountered
	  during text include (reported on xslt mailing list)

Mon Feb 12 18:30:01 CET 2007 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: small cleanup to avoid packaging .svn
	* libxml.h threads.c parser.c: applied patch to avoid a problem
	  in concurrent threaded initialization fix from Ted Phelps

Thu Feb 08 15:35:18 PST 2007 William Brack <wbrack@mmm.com.hk>

	* parser.c: added a GROW when parsing complex comments (bug #405666)
	* gentest.py, testapi.c: added a hack to prevent destruction of any
	  param with 'destroy' in it's description (i.e. param destroyed by
	  the routine under test, so shouldn't be destroyed by testapi)
	* xmlreader.c: added freeing of 'input' param even on error
	  (fixes leak detected by testapi)

Wed Jan 31 10:25:38 PST 2007 William Brack <wbrack@mmm.com.hk>

	* testAutomata.c, testRegexp.c, testThreads.c, testThreadsWin32.c,
	  xmlwriter.c: repositioned #include for libxml.h to avoid
	  compilation error on some architectures (bug #398277)
	* fixed screwed-up ChangeLog (deleted some duplicate entries)

Fri Jan 26 00:05:18 PST 2007 William Brack <wbrack@mmm.com.hk>

	* implemented patch from Stéphane Bidoul for uri.c (bug #389767)

Thu Jan 25 11:15:08 PST 2007 William Brack <wbrack@mmm.com.hk>

	* xpath.c: added checks for alloc fail on calls to
	  xmlXPathNewContext (libxslt bug #400242)

Thu Jan 11 15:38:08 PST 2007 William Brack <wbrack@mmm.com.hk>

	* Re-generated the documentation (API chunks 27-29 were missing)
	  (also causes changes to testapi.c, elfgcchack.h and
	  win32/libxml2.def.src)

Tue Jan  9 22:24:26 CET 2007 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fix a memory leak in the python string handling
	  when SAX event are passed back to the python handlers

Thu Jan  4 18:27:49 CET 2007 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fix xmlTextReaderSetup() description
	* test/relaxng/empty1.rng test/relaxng/comps_0.xml
	  test/relaxng/empty1_0.xml test/relaxng/comps.rng
	  test/relaxng/empty0.rng test/relaxng/empty0_0.xml
	  test/relaxng/empty1_1.xml: tests which were apparently 
	  never committed to CVS

Wed Jan  3 16:05:21 PST 2007 Aleksey Sanin <aleksey@aleksey.com>

	* xmlreader.c include/libxml/xmlreader.h win32/libxml2.def.src:
	expose xmlTextReaderSetup() function

Wed Jan  3 16:14:13 CET 2007 Daniel Veillard <daniel@veillard.com>

	* configure.in: adapt the extra versioning code to SVN

Thu Dec 14 16:52:34 CET 2006 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.py: apparently id() sometimes
	  generate negative values and %X outputs -XXXX :-(

Mon Dec  4 10:30:25 CET 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/tree.h: patch from Michael Day on standalone
	  and XML declaration detection, and associated documentation change

Mon Dec  4 10:27:01 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: another XInclude user data propagation patch from
	  Michael Day

Thu Nov 23 17:22:03 CET 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from Steven Rainwater to fix 
	  UTF8ToHtml behaviour on code points which are not mappable to
	  predefined HTML entities, fixes #377544

Thu Nov 23 17:11:23 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a bug where the principal node type of an axis
	  wasn't tested on name check, fixes bug #377432

Wed Nov  8 10:19:27 CET 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: change htmlCtxtReset() following Michael Day bug
	  report and suggestion.

Mon Nov  6 09:56:41 CET 2006 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied patch from Igor for path conversion on Windows

Thu Nov  2 11:29:17 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: another small change on the algorithm for the
	  elimination of epsilon transitions, should help on #362989 too

Wed Nov  1 16:33:10 CET 2006 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied documentation patches from Markus Keim
	* xmlregexp.c: fixed one bug and added a couple of optimisations
	  while working on bug #362989

Fri Oct 27 14:54:07 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied a reworked version of Usamah Malik patch
	  to avoid growing the parser stack in some autoclose cases, should
	  fix #361221

Thu Oct 26 10:54:40 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xpath.c: William spotted an obvious bug

Wed Oct 25 18:04:50 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in testapi.c doc//*: preparing release of
	  libxml2-2.6.27
	* include/libxml/tree.h: fix a small problem with preproc flags

Fri Oct 20 14:55:47 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix comment for xmlDocSetRootElement c.f. #351981
	* xmllint.c: order XPath elements when using --shell

Tue Oct 17 23:23:26 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: applied fix from Christopher Boumenot for bug
	  #362714 on regexps missing ']'

Tue Oct 17 22:32:42 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: applied patch from Marius Konitzer to avoid
	  leaking in xmlNewInputFromFile() in case of HTTP redirection

Tue Oct 17 22:19:02 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fix one problem found in htmlCtxtUseOptions()
	  and pointed in #340591

Tue Oct 17 22:04:31 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed the 2 stupid bugs affecting htmlReadDoc() and
	  htmlReadIO() this should fix #340322

Tue Oct 17 21:39:23 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied patch from Olaf Walkowiak which should fix #334104

Tue Oct 17 18:12:34 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixing HTML minimized attribute values to be generated
	  internally if not present, fixes bug #332124
	* result/HTML/doc2.htm.sax result/HTML/doc3.htm.sax 
	  result/HTML/wired.html.sax: this affects the SAX event stream for
	  a few test cases

Tue Oct 17 17:56:31 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixing HTML entities in attributes parsing bug #362552
	* result/HTML/entities2.html* test/HTML/entities2.html: added to
	  the regression suite

Tue Oct 17 01:21:37 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: started to switch xmllint to use xmlSaveDoc to test
	  #342556
	* xmlsave.c: fixed #342556 easy and a whole set of problems with
	  encodings, BOM and xmlSaveDoc()

Mon Oct 16 15:14:53 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fix #348252 if the document clains to be in a
	  different encoding in the meta tag and it's obviously wrong,
	  don't screw up the end of the content.

Mon Oct 16 11:32:09 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fix a chunking and script bug #347708

Mon Oct 16 09:51:05 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: remove a warning
	* encoding.c: check with uppercase for AIX iconv() should fix #352644
	* doc/examples/Makefile.am: partially handle one bug report

Sun Oct 15 22:31:42 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix the patch for unreproductable #343000 but
	  also fix a line/column keeping error
	* result/errors/attr1.xml.err result/errors/attr2.xml.err
	  result/errors/name.xml.err result/errors/name2.xml.err 
	  result/schemas/anyAttr-processContents-err1_0_0.err 
	  result/schemas/bug312957_1_0.err: affected lines in error output
	  of the regression tests

Sat Oct 14 10:46:46 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixing bug #344390 with xmlReconciliateNs

Sat Oct 14 00:31:49 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added --html --memory to test htmlReadMemory to 
	  test #321632
	* HTMLparser.c: added various initialization calls which may help 
	  #321632 but not conclusive
	* testapi.c tree.c include/libxml/tree.h: fixed compilation with
	  --with-minimum --with-sax1 and --with-minimum --with-schemas
	  fixing #326442

Fri Oct 13 18:30:55 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fix a Relax-NG bug related to element content processing,
	  fixes bug #302836
	* test/relaxng/302836.rng test/relaxng/302836_0.xml
	  result/relaxng/302836*: added to regression tests

Fri Oct 13 14:42:44 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a problem in xmlSplitQName resulting in bug #334669

Fri Oct 13 12:27:22 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed xmlIOParseDTD handling of @input in error case,
	  Should fix #335085
	* testapi.c: reset the http_proxy env variable to not waste time
	  on regression tests

Thu Oct 12 23:07:43 CEST 2006 Rob Richards <rrichards@ctindustries.net>

	* xmlIO.c: fix Windows compile - missing xmlWrapOpen.

Thu Oct 12 18:21:18 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the heuristic used when trying to detect mixed-content
	  elememts if the parser wants to treat ignorable whitespaces 
	  in a non-standard way, should fix bug #300263

Thu Oct 12 14:52:38 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a first arg error in SAX callback pointed out by
	  Mike Hommey, and another one still hanging around. Should fix #342737

Wed Oct 11 23:11:58 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlversion.h.in: fix comment on versions
	* xmlmemory.c: do not spend too much time digging in dumped memory

Wed Oct 11 18:40:00 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed a weird error where validity context would not
	  show up if warnings were disabled pointed out by Bob Stayton
	* xmlIO.c doc/generator.py: cleanup and fix to regenerate the docs
	* doc//* testapi.c: rebuilt the docs

Wed Oct 11 14:32:00 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* libxml-2.0.pc.in: applied patch from Mikhail Zabaluev to separate
	  library flags for shared and static builds, fixes #344594. If this
	  bites you, use xml2-config.

Wed Oct 11 11:27:37 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: remove the build path recorded in the python
	  shared module as Peter Breitenlohner pointed out, should fix #346022

Wed Oct 11 11:14:51 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Mikhail Zabaluev fixing the conditions
	  of unescaping from URL to filepath, should fix #344588.

Wed Oct 11 10:24:58 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* configure.in xstc/Makefile.am: applied patch from Peter Breitenlohner
	  for wget detection and fix of a Python path problem, should fix
	  #340993

Tue Oct 10 22:02:29 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* include/libxml/entities.h entities.c SAX2.c parser.c: trying to
	  fix entities behaviour when using SAX, had to extend entities 
	  content and hack on the entities processing code, but that should
	  fix the long standing bug #159219

Tue Oct 10 14:36:18 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* uri.c include/libxml/uri.h: add a new function xmlPathToUri()
	  to provide a clean conversion when setting up a base
	* SAX2.c tree.c: use said function when setting up doc->URL
	  or using the xmlSetBase function. Should fix #346261

Tue Oct 10 11:05:59 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied a portability patch from Emelyanov Alexey

Tue Oct 10 10:52:01 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied and slightly modified a patch from Michael Day to 
	  keep _private in the parser context when parsing external entities

Tue Oct 10 10:33:43 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py python/types.c: applied patch from Ross Reedstrom,
	  Brian West and Stefan Anca to add XPointer support to the Python bindings

Fri Sep 29 11:13:59 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: fixed a comment
	* xinclude.c include/libxml/xinclude.h: applied a patch from Michael Day
	  to add a new function providing the _private field for the generated
	  parser contexts xmlXIncludeProcessFlagsData()

Thu Sep 21 10:36:11 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Michael Day doing some refactoring
	  for the catalog entity loaders.

Thu Sep 21 08:53:06 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c include/libxml/HTMLparser.h: exports htmlNewParserCtxt()
	  as Michael Day pointed out this is needed to use htmlCtxtRead*()

Tue Sep 19 14:42:59 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Ben Darnell on #321545, I could not
	  reproduce the problem but 1/ this is safe 2/ it's better to be safe.

Sat Sep 16 16:02:23 CEST 2006 Rob Richards <rrichards@ctindustries.net>

	* tree.c: xmlTextConcat works with comments and PI nodes (bug #355962).
	* parser.c: fix resulting tree corruption when using XML namespace 
	  with existing doc in xmlParseBalancedChunkMemoryRecover.

Fri Sep  1 11:52:55 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: another patch from Emelyanov Alexey to clean up a few things
	  in the previous patch.

Wed Aug 30 15:10:09 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Roland Schwingel to fix the problem
	  with file names in UTF-8 on Windows, and compat on older win9x 
	  versions.

Tue Aug 22 16:51:22 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed a bug #203125 in Red hat bugzilla, crashing PHP4
	  on validation errors, the heuristic to guess is a vctxt user
	  pointer is the parsing context was insufficient.

Mon Aug 21 10:40:10 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* doc/xmlcatalog.1 doc/xmlcatalog_man.xml doc/xmllint.1 doc/xmllint.xml:
	  applied patch to man pages from Daniel Leidert and regenerated

Thu Aug 17 00:48:31 CEST 2006 Rob Richards <rrichards@ctindustries.net>

	* xmlwriter.c: Add a document to the xmlwriter structure and 
	  pass document when writing attribute content for encoding support.

Wed Aug 16 01:15:12 CEST 2006 Rob Richards <rrichards@ctindustries.net>

	* HTMLtree.c xmlsave.c: Add linefeeds to error messages allowing 
	  for consistent handling.

Tue Aug 15 15:02:18 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Applied the proposed fix for the documentation
	  of xmlXPathCastToString(); see bug #346202.

Tue Aug 15 14:49:18 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: While investigating bug #350247, I noticed
	  that xmlSchemaIDCMatcher structs are massively recreated
	  although only a maximum of 3 structs is used at the same
	  time; added a cache for those structures to the
	  validation context.

Sat Aug 12 16:12:53 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Marton Illes to fix an allocation
	  bug in xmlSchemaXPathEvaluate should close #351032

Mon Aug  7 13:08:46 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Bertrand Fritsch to fix a bug in
	  xmlSchemaClearValidCtxt

Fri Aug  4 14:50:41 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: fixed the conversion of long parameters

Thu Jul 13 15:03:11 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlsave.c: Removed the automatic generation of CDATA sections
	  for the content of the "script" and "style" elements when
	  serializing XHTML. The issue was reported by Vincent Lefevre,
	  bug #345147.
	* result/xhtml1 result/noent/xhtml1: Adjusted regression test
	  results due to the serialization change described above.

Thu Jul 13 08:32:21 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* configure.in parser.c xmllint.c include/libxml/parser.h
	  include/libxml/xmlversion.h.in: applied patch from Andrew W. Nosenko
	  to expose if zlib support was compiled in, in the header, in the
	  feature API and in the xmllint --version output.

Thu Jul 13 08:24:14 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: refactor to use normal warnings for entities problem
	  and not straight SAX callbacks.

Wed Jul 12 17:13:03 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed bug #347316, reported by David Belius:
	  The simple type, which was the content type definition
	  of a complex type, which in turn was the base type of a
	  extending complex type, was missed to be set on this
	  extending complex type in the derivation machinery.

Mon Jul  3 13:36:43 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Changed xmlXPathCollectAndTest() to use
	  xmlXPathNodeSetAddNs() when adding a ns-node in case of
	  NODE_TEST_TYPE (the ns-node was previously added plainly
	  to the list). Since for NODE_TEST_ALL and NODE_TEST_NAME
	  this specialized ns-addition function was already used,
	  I assume it was missed to be used with NODE_TEST_TYPE.

Mon Jul  3 10:57:33 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied const'ification of strings patch from
	  Matthias Clasen

Thu Jun 29 13:51:12 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* threads.c: patch from Andrew W. Nosenko, xmlFreeRMutex forgot to
	  destroy the condition associated to the mutex.

Thu Jun 29 12:48:00 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Fixed a double-free in xmlXPathCompOpEvalToBoolean(),
	  revealed by a Libxslt regression test.

Thu Jun 29 12:28:07 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Enhanced xmlXPathCompOpEvalToBoolean() to be also
	  usable outside predicate evaluation; the intention is to
	  use it via xmlXPathCompiledEvalToBoolean() for XSLT tests,
	  like in <xsl:if test="/foo">.
	  
Wed Jun 28 19:11:16 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Fix a memory leak which occurred when using
	  xmlXPathCompiledEvalToBoolean().

Mon Jun 26 17:24:28 UTC 2006 William Brack <wbrack@mmm.com.hk>

	* python/libxml.c, python/libxml.py, python/tests/compareNodes.py,
	  python/tests/Makefile.am:
	  Added code submitted by Andreas Pakulat to provide node
	  equality, inequality and hash functions, plus a single
	  test program to check the functions (bugs 345779 + 345961).

Mon Jun 26 18:38:51 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Added xmlXPathCompiledEvalToBoolean() to the API and
	  adjusted/added xmlXPathRunEval(), xmlXPathRunStreamEval(),
	  xmlXPathCompOpEvalToBoolean(), xmlXPathNodeCollectAndTest()
	  to be aware of a boolean result request. The new function
	  is now used to evaluate predicates.

Mon Jun 26 16:22:50 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Fixed an bug in xmlXPathCompExprAdd(): the newly
	  introduced field @rewriteType on xmlXPathStepOp was not
	  initialized to zero here; this could lead to the activation
	  of the axis rewrite code in xmlXPathNodeCollectAndTest() when
	  @rewriteType is randomly set to the value 1. A test
	  (hardcoding the initial value to 1) revealed that the
	  resulting incorrect behaviour is similar to the behaviour
	  as described by Arnold Hendriks on the mailing list; so I
	  hope that will fix the issue.	  

Fri Jun 23 18:26:08 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Fixed an error in xmlXPathEvalExpr(), which
	  was introduced with the addition of the d-o-s rewrite
	  and made xpath.c unable to compile if XPATH_STREAMING
	  was not defined (reported by Kupriyanov Anatolij -
	  #345752). Fixed the check for d-o-s rewrite
	  to work on the correct XPath string, which is ctxt->base
	  and not comp->expr in this case.

Mon Jun 19 12:23:41 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Added optimization for positional predicates
	  (only short-hand form "[n]"), which have a preceding
	  predicate: "/foo[descendant::bar][3]".

Sun Jun 18 20:59:02 EDT 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: try to fix the crash raised by the parser in
	  recover mode as pointed by Ryan Phillips

Sun Jun 18 18:44:56 EDT 2006 Daniel Veillard <daniel@veillard.com>

	* python/types.c: patch from Nic Ferrier to provide a better type
	  mapping from XPath to python

Sun Jun 18 18:35:50 EDT 2006 Daniel Veillard <daniel@veillard.com>

	* runtest.c: applied patch from Boz for VMS and reporting
	  Schemas errors.

Sun Jun 18 18:22:25 EDT 2006 Daniel Veillard <daniel@veillard.com>

	* testapi.c: applied patch from Felipe Contreras when compiling
	  with --with-minimum

Fri Jun 16 21:37:44 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c include/libxml/tree.h: Fixed a bug in
	  xmlDOMWrapAdoptNode(); the tree traversal stopped if the
	  very first given node had an attribute node :-( This was due
	  to a missed check in the traversal mechanism.
	  Expanded the xmlDOMWrapCtxt: it now holds the namespace map
	  used in xmlDOMWrapAdoptNode() and xmlDOMWrapCloneNode() for
	  reusal; so the map-items don't need to be created for every
	  cloning/adoption. Added a callback function to it for
	  retrieval of xmlNsPtr to be set on node->ns; this is needed
	  for my custom handling of ns-references in my DOM wrapper.
	  Substituted code which created the XML namespace decl on
	  the doc for a call to xmlTreeEnsureXMLDecl(). Removed
	  those nasty "warnings" from the docs of the clone/adopt
	  functions; they work fine on my side.
	  
Mon Jun 12 13:23:11 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/pattern/namespaces: Adjusted the result of a
	  regression test, since the fix of xmlGetNodePath() revealed a
	  bug in this test result.

Mon Jun 12 13:06:03 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Got rid of a compiler warning in xmlGetNodePath().

Mon Jun 12 12:54:25 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Fixed xmlGetNodePath() to generate the node test "*"
	  for elements in the default namespace, rather than generating
	  an unprefixed named node test and losing the namespace
	  information.

Fri Jun  9 21:45:02 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/parser.h: Clarified in the docs that the tree
	  must not  be tried to be modified if using the parser flag
	  XML_PARSE_COMPACT as suggested by Stefan Behnel
	  (#344390).

Tue Jun  6 17:50:43 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* configure.ini NEWS doc//* libxml.spec.in : preparing release of 2.6.26

Tue Jun  6 17:25:23 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Fixed self-invented a segfault in xmlXPathCtxtCompile(),
	  when the expression was not valid and @comp was NULL and I
	  tried to do the d-o-s rewrite.

Tue Jun  6 15:19:57 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* configure.ini NEWS doc//* libxml.spec.in : preparing release of 2.6.25

Tue Jun  6 11:28:15 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Enabled the compound traversal again; I added a
	  check to use this only if the have an expression starting
	  with the document node; so in the case of "//foo", we
	  already know at compilation-time, that there will be only
	  1 initial context node. Added the rewrite also to
	  xmlXPathEvalExpr().

Tue Jun  6 10:23:10 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fix bug #343968, include='text' can't lead to a 
	  recursion.

Fri Jun  2 22:47:08 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Disabled the compound traversal for the release;
	  I need first to assure that this is done only if we have
	  1 initial node.

Wed May 31 13:53:41 PST 2006 Aleksey Sanin <aleksey@aleksey.com>
      
	* xpath.c: fixed memory leak in xpath error reporting

Wed May 31 15:30:16 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* libxml.h triodef.h: applied patch from Olli Savia for LynxOS

Wed May 31 14:33:00 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c include/libxml/xpath.h runsuite.c:
	  Changed the name of the recently added public function
	  xmlXPathContextSetObjectCache() to
	  xmlXPathContextSetCache(); so a more generic one, in
	  case we decide to cache more things than only XPath
	  objects.

Tue May 30 21:36:16 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Optimized xmlXPathNodeCollectAndTest() and
	  xmlXPathNodeCollectAndTestNth() to evaluate a compound
	  traversal of 2 axes when we have a "//foo" expression.
	  This is done with a rewrite of the XPath AST in
	  xmlXPathRewriteDOSExpression(); I added an additional field
	  to xmlXPathStepOp for this (but the field's name should be
	  changed). The mechanism: the embracing descendant-or-self
	  axis traversal (also optimized to return only nodes which
	  can hold elements), will produce context nodes for the
	  inner traversal of the child axis. This way we avoid a full
	  node-collecting traversal of the descendant-or-self axis.
	  Some tests indicate that this can reduce execution time of
	  "//foo" to 50%. Together with the XPath object cache this
	  all significantly speeds up libxslt.

Tue May 30 11:38:47 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: A warning will now be reported in the value of
	  the XSD attribute 'schemaLocation' does not consist of tuples
	  (namespace-name, document-URI). A warning will be reported
	  if a schema document could not be found at the specified
	  location (via 'schemaLocation' or
	  'noNamespaceSchemaLocation').
	* include/libxml/xmlerror.h: Added XML_SCHEMAV_MISC to
	  xmlParserErrors.

Tue May 30 11:21:34 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Enhanced xmlXPathNodeCollectAndTest() to avoid
	  recreation (if possible) of the node-set which is used to
	  collect the nodes in the current axis for the current context
	  node. Especially for "//foo" this will decrease dramatically
	  the number of created node-sets, since for each node in the
	  result node-set of the evaluation of descendant-or-self::node()
	  a new temporary node-set was created. Added node iterator
	  xmlXPathNextChildElement() as a tiny optimization for
	  child::foo.

Mon May 29 18:06:17 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c include/libxml/xpath.h: Added an XPath object cache.
	  It sits on an xmlXPathContext and need to be explicitly
	  activated (or deactivated again) with
	  xmlXPathContextSetObjectCache(). The cache consists of 5
	  lists for node-set, string, number, boolean and misc XPath
	  objects. Internally the xpath.c module will use object-
	  deposition and -acquisition functions which will try to reuse
	  as many XPath objects as possible, and fallback to normal
	  free/create behaviour if no cache is available or if the cache
	  is full.
	* runsuite.c: Adjusted to deactivate the cache for XML Schema
	  tests if a cache-creation is turned on by default for the whole
	  library, e.g. for testing purposes of the cache. It is
	  deactivated here in order to avoid confusion of the memory leak
	  detection in runsuite.c.

Wed May 24 10:54:25 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Removed a memcpy if xmlXPathNodeSetMerge(); it
	  seems we really need to walk the whole list, since those
	  nasty namespace nodes need to be added with
	  xmlXPathNodeSetDupNs(); thus a pure memcpy is not possible.
	  A flag on the node-set indicating if namespace nodes are in
	  the set would help here; this is the 3rd flag which would
	  be useful with node-sets. The current flags I have in mind:
	  1) Is a node-set already sorted?
	     This would allow for rebust and optimizable sorting
	     behaviour.
	  2) Of what type are the nodes in the set (or of mixed type)?
	     This would allow for faster merging of node-sets.
	  3) Are namespace nodes in the set?
	     This would allow to skip all the namespace node specific
	     special handling. Faster node-set merging if the first
	     set is empty; just memcpy the set.

Mon May 22 17:14:00 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Optimization of count(): eliminated sorting
	  (see bug #165547). Optimization of XPATH_OP_FILTER if the
	  predicate is a [1] (disable with XP_OPTIMIZED_FILTER_FIRST if
	  it produces trouble). Tiny opt in xmlXPathNodeSetMerge().
	  
Mon May 22 13:33:12 CEST 2006 Rob Richards <rrichards@ctindustries.net>

	* tree.c: Revert behavior change in xmlSetProp to handle attributes
	  with colons in name and no namespace.

Fri May 19 21:56:43 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Substituted all remaining calls to xmlXPathCmpNodes()
	  for xmlXPathCmpNodesExt(). Tiny further enhancement of
	  xmlXPathCmpNodesExt(). Added additional checks in various code
	  parts to avoid calling sorting or merging functions if the
	  node-set(s) don't need them; i.e., if they are empty or contain
	  just one node.

Fri May 19 13:16:58 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Optimized the comparison for non-element nodes
	  in xmlXPathCmpNodesExt(); the comparison is used for sorting
	  of node-sets. This enhancement is related to bug #165547.
	  There are other places where the old comparison function
	  xmlXPathCmpNodes() is still called, but I currently don't
	  know exactly what those calls are for; thus if they can be
	  substituted (if it makes sense) for the new function.

Tue May 16 16:55:13 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xpath.c: Applied patch from Rob Richards, fixing a potential
	  memory leak in xmlXPathTryStreamCompile(), when a list of
	  namespaces was assigned to the XPath compilation context;
	  here a new namespace list was created and passed to
	  xmlPatterncompile(); but this list was not freed afterwards.
	  Additionally we avoid now in xmlXPathTryStreamCompile() to
	  compile the expression, if it has a colon - indicating
	  prefixed name tests - and no namespace list was given. The
	  streaming XPath mechanism needs a namespace list at
	  compilation time (unlike normal XPath, where we can bind
	  namespace names to prefixes at execution time).
	* pattern.c: Enhanced to use a string dict for local-names,
	  ns-prefixes and namespace-names.
	  Fixed xmlStreamPushInternal() not to use string-pointer
	  comparison if a dict is available; this won't work, since
	  one does not know it the given strings originate from the
	  same dict - and they normally don't do, since e.g.
	  namespaces are hold on xmlNs->href. I think this would be
	  worth an investigation: if we can add a @doc field to xmlNs
	  and put the @href in to a additionan namespace dict hold
	  in xmlDoc. Daniel will surely not like this idea :-) But
	  evaluation of tons of elements/attributes in namespaces
	  with xmlStrEqual() isn't the way we should go forever.
	  
Thu May 11 18:03:49 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed bug #341337, reported by David Grohmann.
	  The code expected a node (xmlNodePtr) on the info for a
	  non-existent default attribute, which clearly cannot be
	  expected, since the attribute does not exist. I can only
	  guess that this sneaked trying to eliminate the query
	  for the owner-element, which is unavoidable actually.
	  Note that creation of default attributes won't have an
	  effect if validating via SAX/XMLReader; i.e., the processor
	  won't fire additional start-attribute events (I'm not even
	  sure if Libxml2 has such a SAX-event; I think it hands them
	  all over in the start-element event).

Tue May  9 21:47:58 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed bug #341150, reported by Michael Romer.
	  In xmlSchemaBuildContentModelForSubstGroup(),
	  xmlAutomataNewOnceTrans2() was incorrectly used instead of
	  xmlAutomataNewTransition2() to mimic a xs:choice for
	  substitution-groups.
	* test/schemas/subst-group-1_1.xsd
	  test/schemas/subst-group-1_0.xml
	  result/schemas/subst-group-1_0_1
	  result/schemas/subst-group-1_0_1.err: Added regression test
	  supplied by Michael Romer for bug #341150.

Sat May  6 11:05:24 HKT 2006 William M. Brack <wbrack@mmm.com.hk>

	* relaxng.c: Fixed compilation error with patch supplied by
	  Graham Bennett.

Thu May  4 19:14:03 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: We'll raise an internal error and stop
	  validation now when an entity is found in the instance
	  document, since we don't support automatic entity
	  substitution by the schema processor (yet?) -
	  see bug #340316, reported by Nick Wellnhofer.

Wed May  3 15:16:00 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied another Python detection patch from Joseph Sacco
	* libxml.spec.in: cleanup the changelog section, asciifies the spec file
	  too

Tue May  2 22:34:54 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix a mix of code and declarations showing up on Windows
	  patch from Kjartan Maraas, fixing #340404

Tue May  2 14:24:40 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fixing bug #340398 xmlCharEncOutFunc writing to
	  input buffer

Fri Apr 28 18:29:22 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc//*: preparing 2.6.24 release, fixed Python
	  paths at the last moment
	* relaxng.c testapi.c tree.c: fix some comments

Thu Apr 27 10:15:45 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Roland Schwingel to allow UTF-8
	  file paths on Windows

Thu Apr 27 10:10:58 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: patch from Jason Viers for line breaks after EndPI

Tue Apr 25 22:22:58 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix compilation without tree

Tue Apr 25 18:17:37 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied patch from Gary Coady to really make sure
	  xmllint --nonet would not reach the network, should fix #337483.

Tue Apr 25 14:52:15 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied patch from Joseph Sacco changing slightly
	  the python detection scheme should fix bug #338526

Mon Apr 24 10:50:19 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix the error message for invalid code point in content
	  c.f. bug #339311

Wed Apr 19 13:16:23 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c test/schemas/restriction-enum-1*
	  result/schemas/restriction-enum-1*: Fixed incorrect
	  validation of restricted enumerations. Added related
	  regression tests.

Thu Apr 13 09:47:25 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixing a deallocation problem in xmlSchemaAddSchemaDoc()
	  in case of errors, should fix bug #338303

Thu Apr 13 09:31:45 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixing a deallocation problem in xmlRelaxNGParse() 
	  in case of errors, should fix bug #338306

Thu Apr  6 10:22:17 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* doc/xmlcatalog.1 doc/xmlcatalog_man.xml doc/xmllint.1 doc/xmllint.xml:
	  applied man page improvements from Daniel Leidert

Mon Mar 27 11:44:07 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: removed unused code or variables, from Stefan Kost
	  fixing #336163 and #336164

Mon Mar 27 11:38:21 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Stefan Kost fixing #336160

Mon Mar 27 11:23:39 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* chvalid.c genChRanges.py genUnicode.py xmlunicode.c
	  include/libxml/chvalid.h include/libxml/xmlunicode.h: applied
	  patches from Aivars Kalvans to make unicode tables const, fixes
	  bug #336096, this also updates to Unicode 4.01 final with a couple
	  of character ranges fixes.

Mon Mar 27 00:51:40 CEST 2006 Daniel Veillard <daniel@veillard.com>

	* chvalid.c genChRanges.py include/libxml/chvalid.h: fixed bug
	  #335603 and resync'ed genChRanges.py to the expected output.

Wed Mar 22 00:14:34 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: applied patch from Youri Golovanov fixing bug
	  #316338 and adding a couple of optimizations in the regexp
	  compilation engine.
	* test/regexp/bug316338 result/regexp/bug316338: added regression
	  tests based on the examples provided in the bug report.

Fri Mar 10 08:40:55 EST 2006 Daniel Veillard <daniel@veillard.com>

	* c14n.c encoding.c xmlschemas.c xpath.c xpointer.c: fix a few
	  warning raised by gcc-4.1 and latest changes

Fri Mar 10 01:34:42 CET 2006 Daniel Veillard <daniel@veillard.com>

	* runtest.c schematron.c testAutomata.c tree.c valid.c xinclude.c
	  xmlcatalog.c xmlreader.c xmlregexp.c xpath.c: end of first
	  pass on coverity reports.

Thu Mar  9 19:36:14 CET 2006 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemas.c xmlschemastypes.c: more cleanups based
	  on coverity reports.
	
Thu Mar  9 17:47:40 CET 2006 Daniel Veillard <daniel@veillard.com>

	* SAX2.c catalog.c encoding.c entities.c example/gjobread.c
	  python/libxml.c: more cleanups based on coverity reports.

Thu Mar  9 15:12:19 CET 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c parserInternals.c pattern.c uri.c: a bunch
	  of small cleanups based on coverity reports.

Thu Mar  9 09:42:10 CET 2006 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb: added schematron as pointed out by Eric Zurcher

Tue Mar  7 09:50:09 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xml2-config.in: fix Red Hat bug #184170

Mon Mar  6 14:21:08 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Simplified usage of the internal xmlNsMap. Added a
	  "strict" lookup for namespaces based on a prefix. Fixed a
	  namespace processing issue in the clone-node function, which
	  occurred if a @ctxt argument was given.
	  
Fri Mar  3 17:44:10 CET 2006 Rob Richards <rrichards@ctindustries.net>

	* valid.c: fix HTML attribute ID checking for input element.
	  Maintain current attribute "name" behavior for now.

Thu Mar  2 18:59:50 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Bundled lookup of attr-nodes and retrieving their
	  values into the functions xmlGetPropNodeInternal() and
	  xmlGetPropNodeValueInternal(). Changed relevant code
	  to use those functions.

Mon Feb 27 20:42:04 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xpath.c: workaround HP-UX compiler bug by Rick Jones

Mon Feb 27 10:57:05 CET 2006 Daniel Veillard <daniel@veillard.com>

	* python/libxml2.py: remove a tab, as pointed out on IRC

Sat Feb 25 18:12:10 CET 2006 Rob Richards <rrichards@ctindustries.net>

	* tree.c: Fix the add sibling functions when passing attributes.
	  Modify testing for ID in xmlSetProp.
	  No longer remove IDness when unlinking or replacing an attribute.

Fri Feb 24 21:20:33 CET 2006 Daniel Veillard <daniel@veillard.com>

	* catalog.c: Martin Cole pointed out a bug in xmlCatalogAdd()
	  if /etc/xml/catalog doesn't exist.

Thu Feb 23 23:06:18 CET 2006 Daniel Veillard <daniel@veillard.com>

	* doc//*: updated the Ruby bindings links, and regenerated the
	  docs.

Thu Feb 23 09:12:27 CET 2006 Daniel Veillard <daniel@veillard.com>

	* catalog.c: improve catalog debugging message patch from Rick Jones

Wed Feb 22 16:09:10 CET 2006 Daniel Veillard <daniel@veillard.com>

	* python/types.c: Nic Ferrier found debug statement left in the
	  XPath conversion code

Tue Feb 21 20:23:14 CET 2006 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.xml: small man page improvements from
	  Daniel Leidert

Mon Feb 20 15:45:19 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a side-effect of the previous XSI bugfix:
	  The constructor needs a bucket to be assigned during component
	  fixup.

Mon Feb 20 14:32:36 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlschemastypes.c: Fixed xs:boolean to reject
	  the empty string (reported by Bas Driessen on the mailing-list).
	  Fixed schema XSI-acquisition and construction: the schemata
	  (xmlSchema) didn't get the targetNamespace in some cases, thus	  
	  the component resolution mechanism failed to work. The XSI
	  stuff needs to be tested more intensively; think about how
	  to test this for regression.

Mon Feb 20 09:57:41 CET 2006 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.xml: more man page improvements from
	  Daniel Leidert

Sun Feb 19 22:31:33 CET 2006 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.xml: man page improvements from Daniel
	  Leidert, c.f. #331290

Sun Feb 19 17:54:04 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: fix an error report when using --path and --valid
	  closes bug #331290

Sun Feb 19 16:20:43 CET 2006 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: trying to fix #331062, this is again a problem
	  around interleave, there is no good fix unless reimplementing
	  but this works around some cases and allow to validate in that
	  case.

Wed Feb 15 11:55:22 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Fixed bug #328896 reported by Liron. The path
	  for text- and CDATA-section-nodes was computed incorrectly
	  in xmlGetNodePath().

Sun Feb 12 20:12:22 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: bug fixes for #327167 as well as some cleanups
	  and more thorough tests on atoms comparisons.

Thu Feb  9 10:07:20 CET 2006 Daniel Veillard <daniel@veillard.com>

	* include/wsockcompat.h: patch from Eric Zurcher to compile with
	  Borland C++ 6

Sun Feb  5 04:03:59 CET 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: bill pointed out a missing block in xmlParseComment
	  trying to fill with a normal processing of the given character.

Sun Feb  5 03:41:39 CET 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the comment streaming bug raised by Graham Bennett
	* test/badcomment.xml result//badcomment.xml*: added to the regression
	  suite.

Fri Feb  3 17:36:41 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/tree.h: Added the xmlDOMWrapCloneNode() to
	  the header file.

Fri Feb  3 17:29:22 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Added an initial version of xmlDOMWrapCloneNode() to
	  the API. It will be used to reflect DOM's Node.cloneNode and
	  Document.importNode methods.
	  The pros: 1) non-recursive, 2) optimized ns-lookup
	  (mostly pointer comparison), 3) user defined ns-lookup,
	  4) save ns-processing. The function is in an unfinished
	  and experimental state and should be only used to test it.

Fri Feb  3 10:42:48 CET 2006 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied patch from Rob Richards fixing the URI regressions
	  tests on Windows which seems to indicate bad escaping.

Thu Feb  2 13:11:26 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Fixed some bugs xmlDOMWrapReconcileNamespaces() wrt
	  the previous addition of the removal of redundant ns-decls.

Wed Feb  1 17:32:25 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Enhanced xmlDOMWrapReconcileNamespaces() to remove
	  redundant ns-decls if the option XML_DOM_RECONNS_REMOVEREDUND
	  was given. Note that I haven't moved this option to the
	  header file yet; so just call this function with an @option
	  of 1 to test the behaviour.	  

Wed Feb  1 12:21:08 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tapi.c win32/Makefile.*: Added changed as proposed on
	  the mailing list by venkat naidu in order to compile
	  testapi.c on windows.

Thu Jan 19 09:57:28 CET 2006 Daniel Veillard <daniel@veillard.com>

	* configure.in xml2-config.in: trying to fix windows/configure
	  issues reported by Tim Van Holder

Wed Jan 18 18:21:15 CET 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c libxml.h parser.c: try to fix xmlParseInNodeContext
	  when operating on an HTML document.

Mon Jan  9 17:27:15 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* relaxng.c include/libxml/relaxng.h: Added
	  xmlRelaxNGSetParserStructuredErrors() to the API.

Mon Jan  9 15:33:16 CET 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: reverted first patches for #319279 which led to #326295
	  and fixed the problem in xmlParseChunk() instead
	* test/ent11 result//ent11*: added test for #326295 to the regression
	  suite

Thu Jan  5 16:25:06 CET 2006 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in libxml.spec.in testapi.c doc/*: updated the news
	  regenerated the docs, preparing for release of 2.6.23
	* pattern.c xmlschemas.c: fixed some comments
	
Thu Jan  5 15:48:27 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/XPath/docs/nodes test/XPath/tests/nodespat
	  result/XPath/tests/nodespat: Added regression tests for
	  the latest XPath/pattern fixes.

Thu Jan  5 15:43:38 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Another fix to handle "foo//.": "foo" was not
	  included in the resulting node-set.

Thu Jan  5 13:22:29 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c xpath.c include/libxml/pattern.h:
	  Fixed bug #322928, reported by Erich Schubert: The bug was
	  in pattern.c, which is used for a tiny subset of xpath
	  expression which can be evaluated in an optimized way.
	  The doc-node was never considered when evaluating "//"
	  expressions. Additionally, we fixed resolution
	  to nodes of any type in pattern.c; i.e. a "//." didn't work
	  yet, as it did select only element-nodes. Due to this
	  issue the pushing of nodes in xpath.c needed to be adjusted
	  as well.

Wed Jan  4 18:07:47 CET 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: tiny refactoring patch from Bjorn Reese

Wed Jan  4 15:00:51 CET 2006 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fix bug #324432 with <xml:foo/>
	* test/ns7 result/ns7*: added to the regression tests

Wed Jan  4 10:53:56 CET 2006 Daniel Veillard <daniel@veillard.com>

	* include/wsockcompat.h: applied patch from Mark Junker, fixing a 
	  MinGW compilation problem, should close bug #324943

Tue Jan  3 11:49:54 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed last dependency on the obsolete enum
	  xmlSchemaValidError.

Mon Jan  2 11:20:00 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h xmlschemas.c: compilation
	  and doc build fixes from Michael Day

Wed Dec 28 22:12:34 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: bug in xmlRegExecPushString2() pointed out by 
	  Sreeni Nair.

Tue Dec 20 16:55:31 CET 2005 Rob Richards <rrichards@ctindustries.net>

	* tree.c: fix bug #322136 in xmlNodeBufGetContent when entity ref is 
	  a child of an element (fix by Oleksandr Kononenko).
	* HTMLtree.c include/libxml/HTMLtree.h: Add htmlDocDumpMemoryFormat.

Tue Dec 20 11:43:06 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlstring.c: Fixed a segfault during
	  text concatenation when validating a node tree:
	  xmlStrncat was called with a @len of -1; but unlike
	  xmlStrncatNew, it does not calculate the length
	  automatically in such a case (reported by Judy Hay
	  on the mailing list).
	  Updated the descriptions of the involved string
	  functions to note this.

Thu Dec 15 12:11:07 CET 2005 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: applied patch from Gary Coady to accept gzipped
	  http resources.

Wed Dec 14 18:41:26 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* win32/configure.js: Added enable/disable of runtime
	  debugging (LIBXML_DEBUG_RUNTIME).

Wed Dec 14 18:11:50 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/xmlversion.h.in: Fixed to define
	  LIBXML_DEBUG_RUNTIME on the basis of @WITH_RUN_DEBUG@.

Tue Dec 13 12:49:23 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug321475* result/schemas/bug321475*:
	  Added regression test for bug #321475 (reported by
	  Gabor Nagy). Fixing of bug #323510 seemed to have
	  fixed this bug as well.

Mon Dec 12 16:19:16 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug323510* result/schemas/bug323510*:
	  Added regression test for bug #323510.

Mon Dec 12 16:11:13 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Workaround for bug #323510 (reported by
	  Jonathan Filiatrault): substituted the epsilon transition
	  for a labelled transition, in order to avoid a bug in
	  xmlregexp.c which eliminated the epsilon transition and
	  marked the initial state as final.

Mon Dec 12 14:25:46 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: Gary Coady pointed a memory leak in
	  xmlTextReaderReadInnerXml() applied patch fixing #323864

Sat Dec 10 12:08:28 CET 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c configure.in parserInternals.c runsuite.c runtest.c
	  testapi.c xmlschemas.c xmlschemastypes.c xmlstring.c: fixed a number
	  of warnings shown by HP-UX compiler and reported by Rick Jones

Fri Dec  9 18:57:31 CET 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlwriter.c: Insert space between pubid and sysid when both 
	  passed to xmlTextWriterStartDTD and indenting not being used.
	  Remove no longer used Mem callbacks.

Fri Dec  9 11:01:16 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* runsuite.c: Changed to instantly mark instance-tests as
	  failed if the corresponding schema was invalid. This
	  reflects the side of the Python code for the XML Schema test
	  suite. We now get the same number of failed tests on both
	  sides.

Wed Dec  7 14:59:01 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlreader.c include/libxml/xmlreader.h: Added
	  xmlTextReaderSchemaValidateCtxt() to the API.

Wed Dec  7 12:59:56 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a segfault: the instance document was
	  still tried to be validated, if the schema, dynamically
	  acquired using XSI was invalid, thus mangled. The
	  validation will stop (or rather won't validate) now in
	  such a case. The schema parser error code will be set
	  on the validion context now; this is somehow not nice,
	  but it assures that the validation context indicates an
	  error in there was a parser error.

Tue Dec  6 18:57:23 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: small doc patch from Aron Stansvik
	* legacy.c: another doc patch for a deprecated API

Mon Dec  5 16:23:49 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* Makefile.am: Tiny change for 'make tests': raised
	  the number of expected failures for James Clark's
	  XML Schema datatype tests from 10 to 11. The additional
	  reported error was agreed to be correct long time ago,
	  but we missed to adjust the message reported by
	  the testing script.

Fri Dec  2 13:51:14 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/decimal* result/schemas/bug322411*:
	  Added missing regression test results for the latest IDC
	  and xs:decimal bugs.

Wed Nov 30 12:22:23 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/decimal* test/schemas/bug322411*: Added
	  regression tests for the latest IDC and xs:decimal bugs.

Wed Nov 30 11:57:35 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed bubbling of duplicate IDC nodes: the
	  parent's list of duplicates was filled with NULLs instead
	  of the nodes under certain conditions. This lead to a
	  segfault when the list's entries were accessed.

Mon Nov 28 17:28:53 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Fixed parsing of xs:decimal to
	  allow/deny special lexical forms. Fixed the totalDigits
	  for values in the range (x < 1) &&  (x > -1) && (x != 0);
	  E.g "0.123" has now a totalDigits of 3 (was 4 previously).
	  Adjusted the comparison function for decimals due to this
	  change. As a side effect comparison against zeroes was
	  optimized.

Mon Nov 28 13:25:11 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: An assignment to a local variable, which was
	  used to access the IDC node list, was missing after the
	  reallocation of the list (reported by Fabrice GUY
	  bug #322411). Renamed the define ENABLE_IDC_NODE_TABLES
	  to ENABLE_IDC_NODE_TABLES_TEST and *disabled* it, since
	  it is used to force bubbling of IDC node tables even
	  if not necessary; this was intended to be used for test
	  purposes, but I obviously missed to disable it (although
	  it apparently helped finding the bug).

Wed Nov 23 17:34:52 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: In xmlSchemaAssembleByXSI() the return value
	  of xmlSchemaGetMetaAttrInfo() was not assigned to anything;
	  this caused XSI-driven-dynamic schema acquisition to fail
	  with @noNamespaceSchemaLocation (reported by Julien Lamy
	  on the mailing list).

Tue Nov 22 18:31:34 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a bug in xmlSchemaFindRedefCompInGraph()
	  which caused the search for components to stop at the
	  first encountered attribute group component.
	  Fixed error report in xmlSchemaCheckSRCRedefineFirst(): the
	  designation of a not-found component was not reported.

Mon Nov 21 12:23:28 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: Albert Chin found another signed/unsigned problem
	  in the date and time code raised on IRIX 6.5

Fri Nov 18 18:13:38 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlschemas.h:
	  Added xmlSchemaSetParserStructuredErrors() to the API.
	  Fixed channeling of error relevant information to
	  subsequent parser/validation contexts.

Thu Nov 17 14:11:43 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: removed unreachable code pointed out by 
	  Oleksandr Kononenko, fixes bug #321695

Thu Nov 17 08:24:31 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: use ctxt->standalone = -2 to indicate that the
	  XMLDecl was parsed but no standalone attribute was found,
	  suggested by Michael Day to detect if an XMLDecl was found.

Tue Nov 15 09:49:24 CET 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: Hisashi Fujinaka pointed that errors in Schemas tests
	  were not properly reported.

Sun Nov 13 13:42:41 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Geert Jansen to remove xmlBufferClose()
	  which is not needed.

Fri Nov 11 13:48:52 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Changed xmlSchemaFormatIDCKeySequence()
	  to use xmlSchemaGetCanonValueWhtspExt() in order to
	  correctly report values for xs:anySimpleType.
	* test/schemas/idc-keyref-err1*
	  result/schemas/idc-keyref-err1*: Added a test for this change.

Wed Nov  9 13:07:24 EST 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlIO.c xmlwriter.c: function consolidation when writing to xmlBuffer.
	  Return error condition not len if xmlwriter fails writing to buffer.

Wed Nov  9 09:54:54 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c xmlIO.c include/libxml/xmlIO.h include/libxml/xmlsave.h:
	  applied patch from Geert Jansen to implement the save function to 
	  a xmlBuffer, and a bit of cleanup.

Mon Nov  7 14:58:39 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlschemastypes.c: Fixed the type of the
	  totalDigits value to be positiveInteger.
	  Fixed crash in an error report function when we gave it
	  the document node; only element and attribute nodes are
	  processed now (reported by Rob Richards).

Tue Nov  1 16:22:29 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fix bug #319897, problem with counted atoms
	  when the transition itself is counted too
	* result/regexp/hard test/regexp/hard: augmented the regression
	  tests with the problem exposed.

Tue Nov  1 11:54:39 CET 2005 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.mingw include/win32config.h: applied patch from
	  Mark Junker to fix compilation with MinGW

Fri Oct 28 18:36:08 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* libxml.3: tiny fix from Albert Chin
	* runsuite.c runtest.c testapi.c: portability cleanup for arch
	  needing trio for *printf

Fri Oct 28 12:21:39 EDT 2005 Rob Richards <rrichards@ctindustries.net>

	* tree.c: add additional checks to prevent tree corruption. fix problem 
	  copying attribute using xmlDocCopyNode from one document to another.

Fri Oct 28 17:58:13 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in vms/config.vms macos/src/config-mac.h:
	  cleanup from Albert Chin
	* doc/Makefile.am: html/index.sgml doesn't exist anymore

Fri Oct 28 16:53:51 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmlmodule.c: more portability patches from Albert Chin for
	  HP-UX and AIX

Fri Oct 28 10:36:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c configure.in: applied 2 patches from Albert Chin for
	  module portability

Fri Oct 28 10:24:39 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c: fixing a portability problem on some old Unices with
	  patch from Albert Chin

2005-10-27  Aleksey Sanin <aleksey@aleksey.com>

	* c14n.c  result/c14n/exc-without-comments/test-2
	  test/c14n/exc-without-comments/test-2.xml
	  test/c14n/exc-without-comments/test-2.xpath: fixing
	  bug in exc-c14n namespace visibility + test case (bug #319367)

Thu Oct 27 16:10:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: remove warnings to stdout patch from Nic Ferrier

Thu Oct 27 13:54:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlregexp.c include/libxml/valid.h
	  include/libxml/xmlregexp.h: avoid function parameters names 'list'
	  as this seems to give troubles with VC6 and stl as reported by
	  Samuel Diaz Garcia.

Wed Oct 26 10:59:21 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fix a problem in some error case on Solaris
	  when passed a NULL filename, pointed by Albert Chin.

Tue Oct 25 14:34:58 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: script HTML parser error fix, corrects bug #319715
	* result/HTML/53867* test/HTML/53867.html: added test from Michael Day
	  to the regression suite 

Tue Oct 25 14:21:11 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: typo fix from Michael Day

Mon Oct 24 20:16:23 EDT 2005 Rob Richards <rrichards@ctindustries.net>

	* tree.c: fix issue adding non-namespaced attributes in xmlAddChild(), 
	  xmlAddNextSibling() and xmlAddPrevSibling() (bug #319108) - part 1.

Sat Oct 22 10:00:41 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed second spot where CRLF split between chunks
	  could cause trouble (bug #319279)
	* gentest.py, testapi.c: fixed two problems involved with
	  --with-minimum compilation (compilation errors with schematron
	  and formal expressions tests)

Fri Oct 21 10:50:14 EDT 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlsave.c: prevent output of fragment tags when serializing XHTML.

Wed Oct 19 16:53:47 BST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: committing a some fixes and debug done yesterday in
	  the London airport.

Thu Oct 20 12:54:23 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed creation of a temporary parser context
	  during validation when processing xsi:type; this previously
	  added a string to the dict of the schema - to assure thread
	  safety, we don't want to modify a given schema during
	  validation.

Thu Oct 20 17:05:29 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: fixed problem in xmlTextWriterVSprintf caused by
	  misuse of vsnprintf
	* configure.in, config.h.in: added a configuration check for
	  va_copy and added a define for VA_COPY for xmlwriter.c fix
	* parser.c: fixed problem with CRLF split between chunks (bug
	  #319279) (fix provided by Brion Vibber)

Wed Oct 19 18:49:52 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a potential memory leak in
	  xmlSchemaCheckCSelectorXPath() when an internal error occurs.
	  Fixed setting of ctxt->err to the given error code in
	  the parsing error functions.
	* pattern.c: Added internal xmlCompileIDCXPathPath() as a
	  starting point for IDC XPath compilation; this and some other
	  tiny changes fixes issues regarding whitespace in the
	  expressions and IDC selector/field relevant restrictions of
	  the subset of XPath. Fixed a missing blocking of attributes
	  in xmlStreamPushInternal().

Mon Oct 17 15:06:05 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: removed the error message
	* relaxng.c xmlschemas.c: removed 2 instability warnings from function
	  documentation
	* include/libxml/schemasInternals.h: changed warning about API stability
	* xmlregexp.c: trying to improve runtime execution of non-deterministic
	  regexps and automata. Not fully finished but should be way better.

Mon Oct 17 16:12:02 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a memory leak in
	  xmlSchemaContentModelDump(). Added output of local types
	  in xmlSchemaElementDump(). Tiny cosmetical changes to the
	  dump output.

Mon Oct 17 14:29:08 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c pattern.c: Silenced intel compiler warnings (reported
	  by Kjartan Maraas, bug #318517).
	* xmlschemas.c: The above changes in pattern.c revealed an
	  inconsistency wrt IDCs: we now _only_ pop XPath states, if
	  we really pushed them beforehand; this was previously not
	  checked for the case when we discover an element node to be
	  invalid wrt the content model.
	  Fixed segfault in xmlSchemaGetEffectiveValueConstraint().

Fri Oct 14 16:40:18 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/*.err: Adapted regression test results.

Fri Oct 14 16:21:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
	
	* xmlschemas.c: Fixed some identity-constraint issues:
	  Restructured IDC node-tables
	  Allowed IDCs to resolve also to nodes of complex type with
	  simple content.
	  Added check for keyrefs with references to keyrefs.
	  IDC target-nodes were interfering with IDC node-tables,
	  since they used one list of entries only. I separated this
	  one big list into 3 lists: 1 for IDC node-table entries,
	  1 for _duplicates_ of IDC node-table entries and 1 for
	  IDC target-nodes. More code, but cleaner and it works at last.
	  Keyrefs will fail to resolve to duplicate key/unique entries.
	  I thought this was already working this way, but it didn't.
	  The wording of the definition for [node table] in the spec
	  can lead to a scenario, where keyrefs resolve perfectly, even
	  if the relevant key-sequences of the referenced key/unique have
	  duplicates in the subtree. Currently only Saxon 8.5.1 is
	  dissallowing resolution to duplicate entries correctly - we
	  will follow Saxon here.
	  Removed some intel compiler warnings (reported by
	  Kjartan Maraas, bug #318517).
	* pattern.c: Fixed an IDC-XPath problem when resolving to
	  attributes.	  

Mon Oct 14 01:15:14 CEST 2005 Rob Richards <rrichards@ctindustries.net>
	* nanohttp.c include/wsockcompat.h: applied patch from Kolja Nowak 
	  to use getaddrinfo() if supported in Windows build (bug# 317431).

Mon Oct 10 15:33:48 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/*: Adapted regression test results.

Mon Oct 10 15:12:43 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: Initial implementation for
	  redefinitions; this still misses checks for restrictions
	  of the content model of complex types.
	  Fixed default/fixed values for attributes (looks like they
	  did not work in the last  releases).
	  Completed constraints for attribute uses.
	  Separated attribute derivation from attribute constraints.
	  Completed constraints for attribute group definitions.
	  Disallowing <import>s of schemas in no target namespace if the
	  importing schema is a chameleon schema. This contradicts
	  the way Saxon, Xerces-J, XSV and IBM's SQC works, but the
	  W3C XML Schema WG, thinks it is correct to disallow such
	  imports.
	  Added cos-all-limited constraints.
	  Restructured reference resolution to model groups and element
	  declarations.
	  Misc cleanup.

Fri Oct  7 04:34:12 CEST 2005 Rob Richards <rrichards@ctindustries.net>

	* schematron.c xmlregexp.c: remove warnings under Windows.

Wed Sep 28 23:42:14 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Massimo Morara fixing bug #317447
	  about risk of invalid write in xmlStringLenDecodeEntities

Tue Sep 27 11:20:57 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c: Adrian Mouat pointed out redundancies in xmlReportError()

Mon Sep 26 19:18:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: seems a test to avoid duplicate transition is 
	  really needed at all times. Luka Por gave an example hitting
	  this. Changed back the internal API.

Thu Sep 22 13:14:07 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixing leak in xmlTextReaderReadString() #316924

Thu Sep 15 16:12:44 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* uri.c: more fixes to the behaviour of xmlBuildRelativeURI

Thu Sep 15 15:08:21 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: detect combinatory explosion and return with
	  a runtime error in those case, c.f. #316338 though maybe we
	  should not see such an explosion with that specific regexp,
	  more checking needs to be done.

Wed Sep 14 19:52:18 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/schemasInternals.h: Added some comments for the
	  struct fields.

Wed Sep 14 13:24:27 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed problem when xmlBuildRelativeURI was given a
	  blank path (bug 316224)

Mon Sep 12 23:41:40 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc//*: release of 2.6.22 updated doc and
	  rebuild.
	* xmlsave.c include/libxml/xmlsave.h: added XML_SAVE_NO_XHTML
	  xmlSaveOption
	* xmlschemas.c: minor cleanups

Mon Sep 12 21:42:47 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
	
	* test/schemas/import1_0.xsd: And adapting another one.

Mon Sep 12 21:29:35 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/derivation-ok-extension_0_0: Adapted result.

Mon Sep 12 21:20:41 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/allsg_0_3.err result/schemas/allsg_0_4.err
	  result/schemas/changelog093_1_0.err
	  result/schemas/derivation-ok-extension_0_0.err
	  result/schemas/import1_0_0.err
	  result/schemas/derivation-ok-restriction-2-1-1_0_0.err:
	  Adapted regression results.

Mon Sep 12 21:00:53 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: Completion of the schema graph.
	  Centralisation, more robustness of the schema document
	  acquisition story. Centralised and restructured component fixup.
	  Fixed attribute derivation when 'prohibiting' attribute uses.
	  Added warnings: when schema documents cannot be localized
	  during imports; when we get duplicate and pointless attribute
	  prohibitions. Changed error reports for IDCs to report
	  the relevant IDC designation as well (requested by GUY Fabrice).
	  Misc code-cleanup.

Mon Sep 12 16:02:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: applied second patch from David Madore to be less intrusive
	  when handling scripts and style elements in XHTML1 should fix #316041
	* test/xhtml1 result//xhtml1\*: updated the test accordingly

Mon Sep 12 15:09:09 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in doc/devhelp/*: finished the integration with
	  devhelp, completing the index and inserted into the gtk-doc
	  database at "make install" stage

Mon Sep 12 14:14:12 CEST 2005 Rob Richards <rrichards@ctindustries.net>

	* include/libxml/xmlsave.h xmlsave.c: add XML_SAVE_NO_EMPTY save option
	  and use option from xmlSaveCtxtPtr rather than global during output.
	* xmlsave.c: fix some output formatting for meta element under XHTML.

Mon Sep 12 11:12:03 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h parser.c xmllint.c: damn XML_FEATURE_UNICODE
	  clashes with Expat headers rename to XML_WITH_ to fix bug #316053. 
	* doc/Makefile.am: build devhelp before the examples.
	* doc/*: regenerated the API

Mon Sep 12 02:03:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: fix bug #316034, where xmlElemDump() can crash if 
	  given a document pointer instead of an element

Mon Sep 12 01:26:16 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/devhelp/devhelp.xsl: improvements on the html generation,
	  should be complete with navigation, what is left done is glueing

Mon Sep 12 00:03:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml
	  doc/devhelp/*: started work needed to generate devhelp content,
	  not too hard based on the existing format and extractor.

Fri Sep  9 12:56:19 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixes bug #315617 when using push CDATA in some cases.

Thu Sep  8 23:39:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: patch from Stéphane Bidoul to compile without schematron

Wed Sep  7 00:16:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: patch from Oleg Paraschenko to fix xmlDebugDumpNode()
	  when handled a namespace node.

Sun Sep  4 23:36:45 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* NEWS elfgcchack.h testapi.c doc/*: updated the docs and rebuild
	  releasing 2.6.21
	* include/libxml/threads.h threads.c: removed xmlIsThreadsEnabled()
	* threads.c include/libxml/threads.h xmllint.c: added the more
	  generic xmlHasFeature() as suggested by Bjorn Reese, xmllint uses it.

Sun Sep  4 22:45:49 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* configure.in: prepare for release
	* xpath.c: work for #303289, fix a formatting bug for MIN_INT

Sun Sep  4 15:48:57 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: real fix for #314881 and #314759 is was a bit more complex
	  than initially expected as ctxt->error == NULL had behaviour side
	  effects at the compilation level itself.

Sun Sep  4 14:01:00 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xpath.c include/libxml/pattern.h: fixing yet another
	  pattern induced XPath bug #314282
	* relaxng.c: reverted back last change it was seriously broken

Sat Sep  3 16:51:55 CEST 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlsave.c: check for NULL to prevent crash with meta elements

Sat Sep  3 16:26:55 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: structured error reporting problem with Relax-NG
	  should fix #314881 and #314759

Sat Sep  3 15:42:29 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: fixes a portability problem raised by C370 on Z/OS

Sat Sep  3 15:26:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* SAX2.c tree.c valid.c: fixing a number of issues raised by xml:id
	  but more generally related to attributes and ID handling, fixes
	  #314358 among other things

Fri Sep  2 14:26:43 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c parserInternals.c: avoid passing a char[] as snprintf
	  first argument.
	* threads.c include/libxml/threads.h: implemented xmlIsThreadsEnabled()
	  based on Andrew W. Nosenko idea.
	* doc/* elfgcchack.h: regenerated the API

Thu Sep  1 14:44:42 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: the use of AM_PATH_PYTHON is not portable enough
	  reverting back to AM_PATH_PROG

Thu Sep  1 11:42:39 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Applied the last patch from Gary Coady for #304637
	  changing the behaviour when text nodes are found in body
	* result/HTML/*: this changes the output of some tests

Thu Sep  1 11:22:37 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/downloads.html doc/xml.html: adding reference to Bull AIX rpms
	  c.f. #160598

Wed Aug 31 11:39:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xml2-config.in: removed the obsolete --libtool-libs option, c.f.
	  bug #314853

Fri Aug 26 17:33:26 CEST 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlsave.c: move handling of meta element for http-equiv in XHTML docs 
	  to serialization and no longer modify internal tree.

Fri Aug 26 00:51:58 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: the profiling usually don't work, disabled
	* doc/*: rebuilt

Thu Aug 25 23:47:55 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: trying to fix the first part of #310033 by
	  detecting gcc <= 3.2

Thu Aug 25 22:13:37 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c: fixed bug #310033, the URI extraction code given a
	  node is a bit twisted and broke in the last months.

Thu Aug 25 16:18:15 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* debugXML.c result/XPath/xptr/strrange2: uninitialized field and
	  fix on test.

Thu Aug 25 16:03:05 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: change verbosity depending on API
	* result/XPath/tests/* result/XPath/xptr/* result/xmlid/*: get back
	  to previous outputs

Thu Aug 25 15:14:56 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c SAX2.c debugXML.c tree.c valid.c xmlreader.c
	  xmllint.c include/libxml/HTMLparser.h include/libxml/parser.h:
	  added a parser XML_PARSE_COMPACT option to allocate small 
	  text nodes (less than 8 bytes on 32bits, less than 16bytes on 64bits)
	  directly within the node, various changes to cope with this.
	* result/XPath/tests/* result/XPath/xptr/* result/xmlid/*: this 
	  slightly change the output

Thu Aug 25 12:16:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: patch from Andrew W. Nosenko, use se $GCC = 'yes'
	  instead of $CC = 'gcc' because GCC may have a different name

Thu Aug 25 00:18:20 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: changes the way the python binary is found, should
	  also fix bug #308004

Wed Aug 24 16:44:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: found another bug while looking at #309616 on missing
	  entities.
	* result/ent2.sax* result/ent7.sax* result/xml2.sax*: this changed the
	  SAX stream in missing conditions for a few tests

Wed Aug 24 16:19:00 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applied the patch suggested #309565 which can avoid
	  looping in error conditions.

Wed Aug 24 16:04:17 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* SAX2.c tree.c: line numbers are now carried by most nodes, fixing
	  xmlGetLineNo() c.f. bug #309205

Wed Aug 24 14:43:34 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c error.c include/libxml/xmlerror.h: finally converted
	  the encoding module to the common error reporting mechanism
	* doc/* doc/html/libxml-xmlerror.html: rebuilt

Wed Aug 24 11:35:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xpath.c: removed a potentially uninitialized variable error
	* python/generator.py: fixed a deprecation warning
	* python/tests/tstLastError.py: silent the damn test when Okay !

Wed Aug 24 00:11:16 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* SAX2.c globals.c runtest.c testC14N.c testapi.c tree.c
	  include/libxml/SAX2.h include/libxml/xmlregexp.h: fixed compilation
	  when configured --without-sax1 and other cleanups fixes bug #172683
	* doc/* elfgcchack.h: regenerated

Tue Aug 23 20:05:05 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #170489 reported by Jirka Kosek
	* test/valid/objednavka.xml test/valid/dtds/objednavka.dtd
	  result/valid/objednavka*: added the test to the regression suite.

Tue Aug 23 18:04:08 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c include/libxml/HTMLparser.h: added a recovery mode
	  for the HTML parser based on the suggestions of bug #169834 by
	  Paul Loberg

Tue Aug 23 15:38:46 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h testapi.c doc/*: regenerated
	* schematron.c: fixed a compilation problem
	* xmlregexp.c include/libxml/xmlregexp.h: some cleanups and one bug fix
	* result/expr/base: slightly changes the number of Cons.

Mon Aug 22 23:19:50 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h testapi.c doc/*: rescanned code and rebuilt
	* xmlregexp.c: small cleanup
	* include/libxml/schematron.h include/libxml/xmlexports.h
	  include/libxml/xmlversion.h.in: cleanup problems from code scanner

Mon Aug 22 18:00:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied patch from Kuba Nowakowski fixing bug
	  #313982
	* result/schemas/bug313982* test/schemas/bug313982*: also added
	  the test case to the regression suite.

Mon Aug 22 17:50:20 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testRegexp.c: printed the wrong string

Mon Aug 22 16:42:07 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testRegexp.c xmlregexp.c include/libxml/xmlregexp.h: exported
	  xmlExpExpDerive(), added it to the testRegexp command line 
	  tool when providing multiple expressions.

Mon Aug 22 14:57:13 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am result/expr/base test/expr/base: added the first
	  regression test suite set for the new expression support

Mon Aug 22 13:49:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed an uninitialized variable
	* xmlregexp.c include/libxml/xmlregexp.h: extended the API to
	  add the parser, serializer and some debugging
	* include/libxml/xmlversion.h.in: made the new support compiled
	  by default if Schemas is included
	* testRegexp.c: cleanup and integration of the first part of the
	  new code with a special switch
	* xmllint.c: show up Expr in --version if compiled in
	* include/libxml/tree.h: moved the xmlBuffer definition up

Mon Aug 22 12:11:10 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Some preparation for the creation of a graph
	  of imported/included/redefined schemas; this is needed for
	  at least the redefinitions.
	  Centralized the creation of the parser context in one function.

Mon Aug 22 02:19:33 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c include/libxml/xmlregexp.h: pushing the formal expression
	  handling code to have it in CVs from now. Not plugged, and misses 
	  APIs it's not compiled in yet.

Sat Aug 20 23:13:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied another patch from Rob Richards to fix
	  xmlTextReaderGetAttributeNs and xmlTextReaderMoveToAttributeNs

Wed Aug 17 09:06:33 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied patch from Rob Richards to fix 
	  xmlTextReaderGetAttribute behaviour with namespace declarations

Fri Aug 12 14:12:56 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlerror.h:
	  Changed output for keyref-match errors; the target-node will
	  be now reported rather than the scope-node of the keyref
	  definition - allowing easier chasing of instance errors.
	  This was reported by Guy Fabrice to the mailing list.
	  Some initial parsing code for schema redefinitions.
	* result/schemas/bug303566_1_1.err
	  result/schemas/bug312957_1_0.err: Adapted test results due
	  to the keyref changes.

Fri Aug 12 12:17:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* valid.c: applied patch from Derek Poon fixing bug #310692

Wed Aug 10 23:39:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fix for bug #312945 as pointed by Dean Hill, the
	  context type was not always properly initialized. 

Wed Aug 10 18:21:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #307377 about validation of choices in
	  list values.
	* test/relaxng/307377* result/relaxng/307377* Makefile.am runtest.c:
	  added examples to the regression tests, problem is that streaming
	  version gives slightly more information.

Wed Aug 10 15:25:53 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed bug #302302, nasty but the fix is rather simple.

Wed Aug 10 11:59:46 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/any6_1_0*: Added missing test results.

Tue Aug  9 23:37:22 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixed a determinism detection problem exposed by
	  ##other tests committed by Kasimier, also added a small speedup
	  of determinism detection.
	* test/results/any6_2_0* any8_1_0* any7_1_2* any7_2_2*: added 
	  the results to the regression tests now

Tue Aug  9 15:54:09 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/any7_2.xml test/schemas/any6_2.xsd
	  test/schemas/any8_1.xsd test/schemas/any8_0.xml:
	  Added some more tests for element wildcards.

Tue Aug  9 14:22:47 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed #312957 reported by Carol Hunter:
	  streaming XPath states were not popped in every case,
	  thus failed to resolve correctly for subsequent input.
	* test/schemas/bug312957* result/schemas/bug312957*:
	  Added the test submitted by Carol Hunter.

Tue Aug  9 13:07:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: trying to nail down the remaining
	  ##other issues
	* result/schemas/any7* test/schemas/any7: completed the tests
	  and added the results
	* result/schemas/any3_0_0.err result/schemas/any5_0_0.err
	  result/schemas/any5_1_0.err: this slightly changes the output
	  from 3 existing tests

Mon Aug  8 22:33:08 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c xmlschemastypes.c: applied patch from 
	  Marcus Boerger to remove warnings on Windows.

Mon Aug  8 16:43:04 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c include/libxml/xmlsave.h: fixed #145092 by adding 
	  an xmlSaveOption to omit XML declaration

Mon Aug  8 15:44:54 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed bug #310333 with a patch close to the provided
	  patch for HTML UTF-8 serialization
	* result/HTML/script2.html: this changed the output of that test

Mon Aug  8 15:01:51 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixed bug #310264, basically it's about reentrancy
	  of count based transition, when going though the counter must
	  be reset to 0
	* test/schemas/bug310264* result/schemas/bug310264*: added the
	  regression test.

Mon Aug  8 14:40:52 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a memory leak: xmlSchemaFreeAnnot() was
	  only freeing the first annotation in the list.

Mon Aug  8 09:44:34 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied patch from Rob Richards fixing
	  xmlTextReaderGetAttribute

Mon Aug  8 01:41:53 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed an uninitialized memory access spotted by
	  valgrind

Sun Aug  7 12:39:35 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* test/relaxng/docbook_0.xml: get rid of the dependency on a locally
	  installed DTD
	* uri.c include/libxml/uri.h xmlIO.c nanoftp.c nanohttp.c: try to
	  cleanup the Path/URI conversion mess, needed fixing in various 
	  layers and a new API to the uri module which also fixes #306861
	* runtest.c: integrated a regression test specific to check the
	  URI conversions done before calling the I/O handlers.

Sat Aug  6 11:06:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/XSLT.html doc/xml.html: small doc fix for #312647

Tue Aug  2 13:26:42 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: applied patch from Rob Richards to allow
	  disabling modules in win32, fixes #304071

Mon Aug  1 07:18:53 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: applied fix from Jakub Piotr Clapa for
	  xmlAttr.parent(), closing #312181

Sun Jul 31 18:48:55 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c: report improvement
	* test/schematron/zvon* result/schematron/zvon*: more tests

Sun Jul 31 16:02:59 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.msvc win32/configure.js: applied patch from Rob
	  Richards to add schematron to the build on Windows
	* test/schematron/zvon3* result/schematron/zvon3*: second test
	* test/schematron/zvon10* result/schematron/zvon10*: this is the
	  real second test 10 and 2 are swapped.

Sun Jul 31 15:42:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c: more bug fixes, improve the error reporting.
	* test/schematron/zvon2* result/schematron/zvon2*: second test

Sun Jul 31 14:15:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c xmllint.c: fixing the loop bug, fixing schematron
	  text error rendering
	* Makefile.am result/schematron/* test/schematron/zvon1*.sct:
	  started integrating within "make tests"

Sat Jul 30 17:26:58 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* test/schematron/*: a few first tests from Zvon unfortunately
	  with the old syntax

Sat Jul 30 17:08:07 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c xmllint.c include/libxml/schematron.h: committing
	  work done on the plane last week-end

Sat Jul 30 15:16:29 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: allows an extra argument to subset the tests
	* xmlregexp.c: big speedup for validation, basically avoided
	  transition creation explosion when removing epsilon transition
	  
Sat Jul 30 00:00:46 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am globals.c parserInternals.c xmlreader.c xmlunicode.c
	  xmlwriter.c: more cleanups based on sparse reports, added 
	  "make sparse"

Fri Jul 29 12:11:25 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: don't output any message on failed resolver lookups,
	  better done by the python user provided resolver layer.

Fri Jul 29 01:48:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c SAX2.c encoding.c globals.c parser.c relaxng.c
	  runsuite.c runtest.c schematron.c testHTML.c testReader.c
	  testRegexp.c testSAX.c testThreads.c valid.c xinclude.c xmlIO.c
	  xmllint.c xmlmodule.c xmlschemas.c xpath.c xpointer.c: a lot of 
	  small cleanups based on Linus' sparse check output.

Thu Jul 28 21:28:33 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: added schematron.h, oops ...

Thu Jul 28 02:38:21 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Added creation of the content type of
	  xs:anyType. This is needed when trying to extend xs:anyType
	  (although it makes no sense to extend it; IMHO the schema
	  people should have ruled this out). This was reported
	  by Yong Chen to the mailing list.
	* xmlschemas.c: Fixed handling of xs:anyType in
	  xmlSchemaCheckCOSCTExtends() (reported by Young Chen). Tiny
	  adjustment to an error report output.
	* test/schemas/extension2* result/schemas/extension2*:
	  Added a test case provided by Young Chen.

Mon Jul 25 11:41:18 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* uri.c: enhanced xmlBuildRelativeURI to allow the URI and the
	  base to be in "relative" form

Sun Jul 24 10:25:41 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c xmllint.c: started adding schematron to the xmllint
	  tool, the report infrastructure is gonna be fun.

Sat Jul 23 23:23:51 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/any6* test/schemas/any7*: Added regression tests
	  (they fail currently), but did not added results yet.

Sat Jul 23 23:07:05 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed the workaround code in
	  xmlSchemaValidateElemWildcard() for the <any> wildcard
	  with namespace == ##other. Support for such wildcards was
	  implemented by Daniel at the automaton level recently, and
	  the workaround code iterfered with it.

Sat Jul 23 10:55:50 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c include/libxml/pattern.h: changed xmlPatterncompile
	  signature to pass an int and not an enum since it can generate
	  ABI compat troubles.
	* include/libxml/schematron.h schematron.c: adding the new 
	  schematron code, work in progress lots to be left and needing
	  testing
	* include/libxml/xmlversion.h.in include/libxml/xmlwin32version.h.in
	  Makefile.am configure.in: integration of schematron into the
	  build
	* xpath.c include/libxml/xpath.h: adding flags to control compilation
	  options right now just XML_XPATH_CHECKNS.

Sat Jul 23 16:39:35 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed an "internal error" message from
	  xmlSchemaBuildAContentModel() when an empty model group
	  definition is hit.

Sat Jul 23 00:34:07 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Changed xmlCompileStepPattern() and
	  xmlCompileAttributeTest() to handle the "xml" prefix without
	  caring if the XML namespace was supplied by the user.

Fri Jul 22 00:08:43 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed xmlSchemaPSimpleTypeErr(), which did not
	  output the given string arguments correctly.

Thu Jul 21 09:21:00 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* error.c globals.c parser.c runtest.c testHTML.c testSAX.c
	  threads.c valid.c xmllint.c xmlreader.c xmlschemas.c xmlstring.c
	  xmlwriter.c include/libxml/parser.h include/libxml/relaxng.h
	  include/libxml/valid.h include/libxml/xmlIO.h
	  include/libxml/xmlerror.h include/libxml/xmlexports.h
	  include/libxml/xmlschemas.h: applied a patch from Marcus Boerger
	  to fix problems with calling conventions on Windows this should
	  fix #309757

Wed Jul 20 14:45:39 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: an optimization of the char data inner loop,
	  can gain up to 10% in pure SAX2 parsing speed
	* xmlschemas.c: applied patch from Kupriyanov Anatolij fixing
	  a bug in XML Schemas facet comparison #310893

Tue Jul 19 17:27:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: fixed the error reporting for
	  not transitions
	* result/schemas/any5_0_0* result/schemas/any5_0_2*
	  result/schemas/any5_1_0*: fixed output

Tue Jul 19 15:34:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: fixing
	  bug #172215 about foreign namespaces by adding support for
	  negated string transitions. Error messages still need to be
	  improved.
	* test/schemas/any5* result/schemas/any5*: adding regression
	  tests for this.

Tue Jul 19 12:33:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Alexander Pohoyda fixing xmlGetNodePath
	  on namespaced attributes #310417.

Mon Jul 18 23:01:15 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.html doc/xmllint.xml: --nonet was
	  ducplicated

Mon Jul 18 20:49:28 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed xsd:all when used in conjunction with
	  substitution groups
	* test/schemas/allsg_* result/schemas/allsg_*: adding specific
	  regression tests, strangely missing from NIST/Sun/Microsoft
	  testsuites

Sun Jul 17 07:11:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed bug #307508, a bad automata was built but
	  this showed as an indeterminist result

Thu Jul 14 17:53:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: found the last bug raised by NIST tests in
	  comparing base64 strings, result from runsuite:
	  ## NIST test suite for Schemas version NIST2004-01-14
	  Ran 23170 tests (3953 schemata), no errors

Thu Jul 14 14:57:36 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testRegexp.c: fixed where xmlMemoryDump() should be called.
	* xmlregexp.c: fixed handling of {0}, \n, \r and \t, two bugs
	  affecting NIST regression tests

Thu Jul 14 11:30:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied a patch from Gerrit P. Haase to add
	  module support on cygwin

Thu Jul 14 10:56:42 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed a potential buffer overrun error introduced
	  on last commit to htmlParseScript() c.f. #310229

Thu Jul 14 23:48:17 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: Changed the behaviour of xmlXPathEqualNodeSetFloat to
	  return TRUE if a nodeset with a numeric value of NaN is compared
	  for inequality with any numeric value (bug 309914).
	  
Thu Jul 14 01:03:03 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c relaxng.c xmlreader.c xmlschemas.c include/libxml/relaxng.h
	  include/libxml/xmlschemas.h: applied patch from Marcus Boerger
	  to route relaxng and schemas error messages when using the reader
	  through the structured interface if activated.
	* elfgcchack.h doc/* testapi.c: rebuilt since this add  new APIs
	  to test.

Wed Jul 13 18:35:47 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied UTF-8 script parsing bug #310229 fix from
	  Jiri Netolicky 
	* result/HTML/script2.html* test/HTML/script2.html: added the test
	  case from the regression suite

Tue Jul 12 17:08:11 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: fixed bug #310105 with http_proxy environments with
	  patch provided by Peter Breitenlohner

Mon Jul 11 00:28:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am NEWS configure.in doc/*: preparing release 2.6.20 
	* xmllint.c: removed a compilation problem

Sun Jul 10 23:33:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am README README.tests Makefile.tests Makefile.am:
	  preparing to make testsuite releases along with code source releases
	* gentest.py testapi.c: fixed a couple of problem introduced by
	  the new Schemas support for Readers
	* xpath.c: fixed the XPath attribute:: bug #309580, #309864 in a crude
	  but simple way.
	* xmlschemas.c include/libxml/tree.h: fixed a couple of problems
	  raised by the doc builder.
	* doc/*: made rebuild

Sun Jul 10 21:51:16 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed a bug introduced on last commit

Sun Jul 10 21:00:54 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.html doc/xmllint.xml: fixed a typo
	  pointed by Jeroen Ruigrok
	* include/libxml/xmlreader.h include/libxml/xmlschemas.h: increased
	  the APIs for xmlReader schemas validation support
	* xmllint.c xmlreader.c xmlschemas.c: xmlReader schemas validation
	  implementation and testing as xmllint --stream --schema ...

Sun Jul 10 16:11:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlwin32version.h.in: try to avoid conflicts.

Sat Jul  9 19:29:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix for #309761 from Dylan Shell  
	* xmlschemas.c include/libxml/xmlschemas.h: added xmlSchemaSAXPlug
	  and xmlSchemaSAXUnplug generic APIs for SAX Schemas validation.
	* xmllint.c: couple of fixes plus added descriptions for --sax and
	  --sax1

Fri Jul  8 23:35:00 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added c-props-correct constraint to check
	  for equal cardinality of keyref/key.
	* include/libxml/xmlerror.h: Added an error code.

Fri Jul  8 21:56:04 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Fixed evaluation of attributes. Actually only
	  attribute at the first level were evaluated (e.g. "@attr");
	  expression like "foo/@attr" always failed.

Fri Jul  8 20:04:29 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: tiny fix in xmlSchemaValidateStream() if a
	  user-provided SAX handler is given.

Fri Jul  8 19:25:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix some potential leaks in error cases.
	* xmllint.c: added --sax, to allow testing of --schemas --sax and
	  various other combinations.
	* xmlschemas.c: fix a couple of tiny problems in
	  xmlSchemaValidateStream()

Fri Jul  8 18:34:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
	
	* xmlschemas.c: Changed xmlSchemaValidateFile() to use
	  xmlSchemaValidateStream() internally.

Fri Jul  8 17:02:14 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* test/relaxng/docbook_0.xml: added the missing entity to the
	  document internal subset to avoid errors if the DocBook catalogs
	  are not there
	* xmlschemas.c: first cut at implementing xmlSchemaValidateStream()
	  untested yet

Wed Jul  6 15:45:48 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem with free on dupl attribute in
	  dtd (bug309637).
	* test/errors/attr3.xml, result/errors/attr3.*: added
	  regression test for this

Wed Jul  6 13:11:35 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* win32/Makefile.msvc: try again to fix file format for Windows

Wed Jul  6 12:20:13 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* win32/Makefile.msvc: removed spurious ^M
	* runtest.c: added check for option O_BINARY
	* test/schemas/bug309338*, result/schemas/bug309338*: changed
	  sticky tag to 'binary'

Wed Jul  6 10:38:02 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* debugXML.c: excluded content string check for XML_ELEMENT_DECL
	  in xmlCtxtGenericNodeCheck
	* runtest.c: changed "open" calls to include O_BINARY for Windows

Wed Jul  6 17:14:03 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #166777 (and #169838), it was an heuristic
	  in areBlanks which failed.
	* result/winblanks.xml* result/noent/winblanks.xml test/winblanks.xml:
	  added the input file to the regression tests

Wed Jul  6 13:40:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Fixed bug #309338, reported by Kupriyanov
	  Anotolij.
	* test/schemas/bug309338* result/schemas/bug309338*:
	  Added a regression test for the above bug.

Tue Jul  5 16:03:05 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: first steps toward a testsuite dist
	* SAX2.c include/libxml/xmlerror.h: fixed bug #307870

Tue Jul  5 12:38:36 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* runsuite.c runtest.c: Tiny portability adjustment for win.
	* win32/Makefile.*: Added runtest.exe and runsuite.exe to
	  be created.

Mon Jul  4 17:44:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: first stb at unimplemnted detection
	* runtest.c: fixing Windows code

Mon Jul  4 17:19:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: fix on schemas error
	* runtest.c: portability glob() on Windows

Mon Jul  4 16:23:54 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c runtest.c: cleanups, logfile and portability
	* xmllint.c: fixed a memory leak

Mon Jul  4 13:11:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug failing to detect UTF-8 violations in
	  CData in push mode.
	* result/errors/cdata.xml* test/errors/cdata.xml: added the test
	  to the regressions

Mon Jul  4 11:26:57 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added enhancement for #309057 in xmllint shell

Mon Jul  4 00:58:44 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from James Bursa fixing an html parsing
	  bug in push mode
	* result/HTML/repeat.html* test/HTML/repeat.html: added the test to the
	  regression suite

Sun Jul  3 23:42:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testapi.c tree.c: fixing a leak detected by testapi in 
	  xmlDOMWrapAdoptNode, and fixing another side effect in testapi
	  seems to pass tests fine now.
	* include/libxml/parser.h parser.c: xmlStopParser() is no more limited
	  to push mode
	* error.c: remove a warning
	* runtest.c xmllint.c: avoid compilation errors if only some parts
	  of the library are compiled in.

Mon Jul  4 00:39:35 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: fix a problem with previous patch to
	  testapi.c

Sun Jul  3 22:59:28 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c runtest.c tree.c: fixing compilations when
	  disabling parts of the library at configure time.

Sun Jul  3 18:17:58 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fix bug raised by zamez on IRC
	* testapi.c: regenerated, seems to pop-up leaks in new tree functions
	* tree.c: added comments missing.
	* doc/*: regenerated

Sun Jul  3 18:06:55 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testapi.c runsuite.c runtest.c: fixing #307823 and a couple of
	  assorted bugs
	* python/generator.py python/libxml2-python-api.xml: fixed 
	  conditionals in generator too
	* doc/apibuild.py doc/libxml2-api.xml doc/* elfgcchack.h: some
	  cleanups too and rebuilt

Sun Jul  3 16:42:00 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fixed bug #307503 misplaced #ifdef

Sun Jul  3 16:34:47 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: expanded test
	* xmlregexp.c: found and fixed the leak exposed by Microsoft regtests

Sat Jul  2 23:38:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: a bit of progresses on xstc

Sat Jul  2 09:30:13 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: completed the simple checks for Relax-NG suites
	  back to the same 11 errors as in the Python runs.

Thu Jun 30 15:01:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: complete, checking on other platforms is needed
	* README: updated 
	* debugXML.c: fix a bug raised by bill on IRC
	* relaxng.c: fix a leak in weird circumstances
	* runsuite.c Makefile.am: standalone test tool against
	  the regression suites, work in progress

Tue Jun 28 08:30:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: adding URI tests

Mon Jun 27 23:55:56 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: adding xml:id

Mon Jun 27 23:29:36 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: finishing XPath, adding XPointer

Mon Jun 27 17:39:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: adding more coverage, XInclude and starting XPath

Mon Jun 27 17:02:14 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c include/libxml/tree.h: Added allocation/deallocation
	  functions for the DOM-wrapper context.

Mon Jun 27 15:41:30 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Commented the new functions to be experimental.

Mon Jun 27 14:41:14 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c valid.c: working some weird error reporting problem for
	  DTD validation.
	* runtest.c: augmented with DTD validation tests
	* result/VC/OneID*: slight change in validation output.

Mon Jun 27 13:44:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: added most HTML tests

Mon Jun 27 14:06:10 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/namespaces/reconcile/tests.xml
	  test/namespaces/reconcile/tests-to-c.xsl: Added initial tests
	  for some new DOM-wrapper helping functions.

Mon Jun 27 14:01:06 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/xstc-to-python.xsl: Cleanup.
	* xstc/sun-test-def.xml xstc/nist-test-def.xml xstc/ms-test-def.xml:
	  Removed, those are not needed anymore due to the new test suite.

Mon Jun 27 11:39:50 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* result/*.sax2 MAkefile.am: added SAXv2 regression tests apparently
	  missing.
	* runtest.c: added SAX1/SAX2 checks.

Mon Jun 27 12:24:54 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c include/libxml/tree.h: Added
	  xmlDOMWrapReconcileNamespaces(), xmlDOMWrapAdoptNode() and
	  xmlDOMWrapRemoveNode() to the API. These are functions intended
	  to be used with DOM-wrappers.

Mon Jun 27 10:14:57 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: continue to increase the tests

Mon Jun 27 09:21:49 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: continue to increase the tests

Mon Jun 27 01:01:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: continue to increase the tests

Sun Jun 26 20:08:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/valid.h valid.c: avoid name glob in arguments as
	  it matches the glob() routine.
	* runtest.c Makefile.am: first steps toward a C regression test
	  framework.

Sat Jun 25 01:37:22 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* configure.in: fixed a problem with the detection of
	  ss_family for ipV6, as reported on the mailing list by
	  Doug Orleans.

Tue Jun 21 10:44:34 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/empty-value* result/schemas/empty-value*:
	  Added regression tests (from Dhyanesh).

Tue Jun 21 10:35:43 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed NULL values to be validated as empty
	  string values (reported by Dhyanesh to the mailing list).
	  Adjusted text concatenation of mixed content.

Mon Jun 20 18:11:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c valid.c: applied patch from Rob Richards for removal
	  of ID (and xml:id)
	* xmlreader.c: applied patch from James Wert implementing 
	  xmlTextReaderReadInnerXml and xmlTextReaderReadOuterXml

Thu Jun 16 14:38:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed SAX2 validation: grow of internal
	  namespace list, appending of element character content.
	* xstc/xstc.py: Added "--sax" option for SAX2 validation.

Wed Jun 15 15:34:52 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Added missing function descriptions.

Wed Jun 15 15:26:14 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: if sax1 is used and input is a file use the old
	  API xmlParseFile()
	* xmlschemas.c: cleanups
	* doc/* testapi.c elfgcchack.h: rebuilt to add python bindings
	  for the new functions in Schemas.

Wed Jun 15 14:50:48 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlschemas.h: Added
	  xmlSchemaValidateFile() to the public API. This will use
	  SAX2-driven validation.

Wed Jun 15 11:11:38 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/bug306806_1_0 result/schemas/bug306806_1_0.err:
	  Added schema test results (Tom Browder, bug #306806).

Wed Jun 15 11:08:34 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug306806_1.xsd test/schemas/bug306806_0.xml:
	  Added schema tests submitted by Tom Browder (bug #306806).

Tue Jun 14 15:03:22 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* pattern.c: adjusted last change to xmlCompilePathPattern,
	  fixed one compilation warning

Tue Jun 14 21:19:16 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Some changes/fixes to the streaming evaluation.
	* xmlschemas.c: A bit of support for parsing the schema for
	  schema. Fixed attribute derivation when the use is
	  "prohibited" and was "optional". Fixed an attribute construction
	  bug, a left-over from the time, where <complexContent>,
	  <extension>, etc. where created as structs.

Tue Jun 14 12:35:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* libxml-2.0.pc.in: removed a redundant include path

Mon Jun 13 14:58:33 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/Makefile.am: Some more adjustments.

Mon Jun 13 14:35:59 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/Makefile.am: Changed test extraction process, since some
	  boxes don't know about "tar --strip-path".

Mon Jun 13 13:39:43 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a bug exposed by Rob Richards in the mailing-list
	* result//compare0* test//compare0*: added the regression test in
	  the suite as this went unnoticed !

Wed Jun  9 11:07:42 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* pattern.c, xpath.c, include/libxml/pattern.h: Further
	  enhancement for XPath streaming, consolidated with
	  schemas usage of pattern.c.  Added a new enum
	  xmlPatternFlags.
	* doc/*, testapi.c, elfgcchack.h: updated to reflect new
	  enum.
	* test/XPath/tests/mixedpat, test/XPath/docs/mixed,
	  result/XPath/mixedpat: added regression test for problems
	  reported in bug306348

Thu Jun  9 16:51:31 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Changed non-prefixed QNames to be bound to a
	  default namespace if existent.

Thu Jun  9 15:11:38 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Fixed a bug which I invented: hexBinary's string
	  values were not duplicated corrently when creating a computed value
	  in xmlSchemaValAtomicType.

Thu Jun  9 13:20:57 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c result/schemas/include1_0_0.err:
	  Fixed an attribute fixed/default value constraint error.

Thu Jun  9 12:51:23 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/*: Adapted regression test results.

Thu Jun  9 12:22:45 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlschemastypes.c include/libxml/schemasInternals.h
	  include/libxml/xmlschemastypes.h: Changed the validation process
	  to be able to work in streaming mode. Some datatype fixes,
	  especially for list and union types. Due to the changes the
	  error report output has changed in most cases. Initial migration to
	  functions usable by both, the parser and the validator. This should
	  ease a yet-to-come XS construction API in the long term as well.

Thu Jun  9 10:16:11 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Malcolm Rowe to avoid namespace
	  troubles on rollback parsing of elements start #304761
	* test/nsclean.xml result/noent/nsclean.xml result/nsclean.xml*:
	  added it to the regression tests.

Thu Jun  9 00:33:50 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: applied patch from Rob Richards
	  for xml:space and xml:lang handling with SAX2 api.

Wed Jun  8 19:41:38 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* globals.c: applied patch from Morten Welinder, closing bug #306901
	  on compiling subsets of the library

Wed Jun  8 19:11:42 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/Makefile.am xstc.py xstc-to-python.xsl: Adapted the
	  XS tests to use the new release of tests and test-definitions.

2005-06-07  Aleksey Sanin <aleksey@aleksey.com>

	* c14n.c: fix rendering of attributes when parent node
	is not in the node set

2005-06-06  Aleksey Sanin <aleksey@aleksey.com>

	* c14n.c: fixed xml attributes processing bug in exc c14n
	* xmllint.c: added --exc-c14n command line option

Mon Jun  6 06:43:33 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c, pattern.c: Enhanced xmlXPathRunStreamEval, fixed
	  handling of depth/level for cases like union operator
	  (bug #306348 reported by Bob Stayton).  Also enhanced
	  several comments throughout pattern.c.
	* doc/apibuild.py: fixed problem in handling of
	  'signed' declaration.  Rebuilt the docs.
	  
Tue May 31 20:35:27 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: Enhanced handling of xml:base for included
	  elements, fixing bugs 169209 and 302353.

Wed May 25 18:59:53 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed facet errors to be channelled back for
	  union type members; facet-validation will stop now on the
	  first error. Reported by GUY Fabrice to the mailing-list.
	* xmlschemastypes.c: Changed to ignore lengh-related facet
	  validation for QNames and NOTATIONs as proposed by the
	  schema people.
	* test/schemas/union2* result/schemas/union2*: Added
	  regression tests for union types (by GUY Fabrice).

Fri May 20 20:48:08 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: applied patch from Mark Vakoc fixing saving of
	  CDATA with NULL content.

Thu May 12 15:14:26 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Changed the VALID_TZO macro to restrict
	  the timezone to -840 to 840.

Thu May 12 15:05:11 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Applied patch from Steve Nairn (bug #303670)
	  for "signed int" of the date-time timezone field. Silenced
	  a warning.

Wed May 11 20:04:09 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch for replaceNode from Brent Hendricks

Tue May 10 17:27:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed bug #303682 of a leak reported by Malcolm Rowe

Tue May 10 11:50:16 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testapi.c: applied patch from Steve Nairn tof fix the compilation
	  problem exposed in bug #303640

Tue May 10 11:11:26 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug303566_1* result/schemas/bug303566_1_1*:
	  Added regression a test provided by Heiko Oberdiek (bug #303566).

Mon May  9 17:56:58 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Changed the XPath "." to resolve only on the first
	  level for XML Schema IDCs (bug #303566 reported by Heiko Oberdiek).
	  This should not affect pattern-like resolution on every level.

Sun May  8 13:35:39 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: fixed #169630 segfault in xmlMemDisplay

Fri May  6 13:40:03 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: fixing bug #303068 increasing the nanoftp buffer.
	* doc/apibuild.py: fixed __attribute() parsing problem
	* doc/* testapi.c: regenerated the descriptions and docs.

Wed May  4 11:16:00 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in threads.c: on linux/gcc use weak definitions
	  to avoid linking with pthread library on non-threaded environments.
	* xpath.c: applied patch from Mark Vakoc w.r.t. a buggy namespace
	  list allocation.

Fri Apr 29 11:27:37 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* parser.c: Fixed a test for duplicate attributes: Non-prefixed
	  attributes were treated as being bound to the default namespace.

Tue Apr 19 17:51:32 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Fixed date-time related validation
	  (reported by David Crossley, bug #300576).

Tue Apr 19 16:55:40 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlregexp.c: Removed 5 unnecessary
	  dereferences (reported by Andriy, bug #301074).

Tue Apr 19 22:33:18 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: Added some code to avoid integer overflow for
	  ceil, floor and round functions (bug 301162)

Tue Apr 19 13:21:54 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed workaround for bug #172215, since it
	  does more harm in some scenarios. Added some of the
	  "Particle Restriction OK" constraints - not yet enabled.	  

Mon Apr 18 13:02:55 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/changelog093*: Added test results.

Mon Apr 18 12:42:14 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added output of canonical values in
	  identity-constraint error messages.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Added xmlSchemaGetCanonValueWhtsp() to the API.
	  Further enhancement of the canonical value
	  conversion.
	* test/schemas/changelog093_0.*: Added test with an XSD
	  submitted by Randy J. Ray.

Fri Apr 15 09:33:21 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* valid.c: Applied Daniel's fix for memory leak in dtd
	  prefix (bug 300550).
	* xpath.c: minor change to comment only

Thu Apr 14 20:52:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: added the call to the breakpoint routine
	  when a monitored block is reallocated or freed

Wed Apr 13 05:55:51 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: applied patch from Aron Stansvik for bug #172525
	  about HTTP query string parameter being lost

Tue Apr 12 04:03:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: applied patch from Brent Hendricks
	  adding namespace removal at the python level #300209
	* python/tests/Makefile.am python/tests/nsdel.py: added the regression
	  test

Sun Apr 10 09:03:22 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed several places where memory cleanup was not
	  properly done after an error was detected (problem was
	  reported on the mailing list by Pawel Palucha)

Fri Apr  8 21:58:04 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added substitution group constraints; changed
	  the build of the pre-computed substitution groups. Channeled
	  errors during xsi assembling of schemas to the validation
	  context. Fixed a big memory leak, which occurred when using
	  IDCs: the precomputed value of attributes was not freed if
	  the attribute did not resolve to an IDC field (discovered
	  with the help of Randy J. Ray's schema, posted to the
	  xmlschema-dev maling list).

Fri Apr  8 13:22:01 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added "Particle correct 2" to parsing of model groups.
	  Added handling substitution groups inside <choice> and <sequence>;
	  for <all> this is not supported yet. Changed circular checks for
	  model groups definitions. "memberTypes" are processed at different
	  levels now: component resolution first, construction later; this
	  goes hand in hand with a global change to handle component
	  resolution in a distinct phase. Fixed invalid default values for
	  elements to mark the schema as invalid; this just resulted in an
	  error report previously, but the schema was handled as valid.
	  Separated the assignment of the model groups to referencing
	  model group definition references (i.e. particles); this was
	  needed to perform the circularity check for model group definitions.
	  Added "Element Declaration Properties Correct (e-props-correct)"
	  constraints. Separated component resolution for simple/complex
	  types.
	* include/libxml/schemasInternals.h: Added a flag for substitution
	  group heads.	  

Wed Apr  6 23:14:03 CEST 2005 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.*: make install cleanup

Wed Apr  6 22:42:23 CEST 2005 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.mingw: fixed mingw compilation
	* testModule.c: removed mingw warnings

Wed Apr  6 21:59:11 CEST 2005 Igor Zlatkovic <igor@zlatkovic.com>

	* .cvsignore: added Eclipse project files to ignore list

Wed Apr  6 16:08:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed the bug in lang() as raised by Elliotte Rusty Harold
	* result/XPath/tests/langsimple test/XPath/tests/langsimple
	  test/XPath/docs/lang: added a regression test

Tue Apr  5 23:48:35 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied fix from Rob Richards to compile on Windows.

Tue Apr  5 17:02:58 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added "Type Derivation OK (Complex)" constraints
	  and anchored them in the "Element Locally Valid (Element)"
	  constraints. This restricts the type substitution via "xsi:type".

Tue Apr  5 13:10:06 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: patch from Matthew Burgess to improve some schemas
	  facets validation messages.

Sat Apr  2 12:48:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/* configure.in NEWS: preparing release 2.6.19, updated docs and
	  rebuilding.

Sat Apr  2 13:27:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am: integrated fixup-tests.py

Fri Apr  1 19:14:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixed a lack of comment and missing test for
	  a pointer in the API.

Fri Apr  1 17:54:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/fixup-tests.py: A tiny script to fixup some of the schema
	  files used for the tests.

Fri Apr  1 17:33:50 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h
	  result/schemas/src-element2-*.err result/schemas/element-*.err:
	  Committing again, since the CVS server aborted.

Fri Apr  1 15:29:27 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Corrected 'length' facet validation for
	  QNames and notations. Corrected xmlSchemaGetCanonValue: some
	  data types did not return a value if already in normalized
	  form.
	* xmlschemas.c include/libxml/schemasInternals.h:
	  Eliminated creation of structs for <restriction>, <extension>,
	  <simpleContent>, <complexContent>, <list> and <union>: the
	  information is now set directly on the corresponding simple/
	  complex type. Added some more complex type constraints.
	  Added facet derivation constraints. Introduced "particle"
	  components, which seem to be really needed if applying
	  constraints. Corrected/change some of the parsing functions.
	  This is all a bit scary, since a significant change to the code.
	* result/schemas/src-element2-*.err result/schemas/element-*.err:
	  Adapted regression test results.

Fri Apr  1 16:07:59 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/apibuild.py doc/elfgcchack.xsl: revamped the elfgcchack.h 
	  format to cope with gcc4 change of aliasing allowed scopes, had
	  to add extra information to doc/libxml2-api.xml to separate
	  the header from the c module source.
	* *.c: updated all c library files to add a #define bottom_xxx
	  and reimport elfgcchack.h thereafter, and a bit of cleanups.
	* doc//* testapi.c: regenerated when rebuilding the API

Thu Mar 31 17:20:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: fixed bug reported by Petr Pajas, in the absence of
	  encoding UTF-8 should really be assumed. This may break if 
	  the HTTP headers indicates for example ISO-8859-1 since this
	  then becomes a well formedness error.

Thu Mar 31 16:57:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed #172260 redundant assignment.
	* parser.c include/libxml/parser.h: fixed xmlSAXParseDoc() and 
	  xmlParseDoc() signatures #172257.

Thu Mar 31 16:11:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix potential crash if ctxt->sax->ignorableWhitespace
	  is NULL as reported by bug #172255

Thu Mar 31 15:36:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a problem in Relax-NG validation #159968
	* test/relaxng/list.* result/relaxng/list_*: added the test
	  to the regression suite

Thu Mar 31 13:06:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fixed bug #168504

Thu Mar 31 12:22:54 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in nanoftp.c nanohttp.c xmllint.c
	  macos/src/config-mac.h: use XML_SOCKLEN_T instead of SOCKLEN_T
	  since apparently IBM can't avoid breaking common defines #166922

Thu Mar 31 10:41:45 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fix unitinialized variable in not frequently used
	  code bug #172182

Thu Mar 31 00:45:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.py: another patch from Brent
	  Hendricks to add new handlers with the various validity contexts
	* python/tests/Makefile.am python/tests/validDTD.py
	  python/tests/validRNG.py python/tests/validSchemas.py: also 
	  added the regression tests he provided

Wed Mar 30 09:39:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c: applied patch from Brent
	  Hendricks to avoid leak in python bindings when using schemas
	  error handlers.

Tue Mar 29 22:29:28 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixing bug 168196, <a name=""> must be URI escaped too

Sun Mar 27 13:24:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: cleanup of the Prop related functions and xmlNewNodeEatName
	  by Rob Richards

Thu Mar 24 19:01:22 PST 2005 William Brack <wbrack@mmm.com.hk>

	* gentest.py, testapi.c: fixed problem with 'minimal library'
	  compilation (LIBXML_PATTERN_ENABLED not properly checked) reported
	  by Greg Morgan

Thu Mar 24 12:01:30 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed call to a facet error report: the type of
	  the error was wrong, resulting in a segfault (bug #171220, reported
	  by GUY Fabrice).

Mon Mar 21 22:58:37 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed a stupid bug in xmlSchemaValidateAttributes,
	  failing to build a linked list correctly (bug #169898, reported
	  by bing song, hmm...).

Mon Mar 21 21:09:07 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a segfault, which occurred during bubbling
	  of IDC nodes (bug #170779 and #170778, reported by GUY Fabrice):
	  a variable was missed to be reset in a loop. Deactivated bubbling,
	  if not referenced by a keyref.

Sun Mar 20 11:13:02 PST 2005 Aleksey Sanin <aleksey@aleksey.com>
	
	* c14n.c include/libxml/xmlerror.h: special case "DAV:" namespace
	in c14n relative namespaces check and add structured error messages
	to c14n code

Thu Mar 17 12:55:23 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed inheritance of "mixed" content type for
	  short-hand restrictions of "anyType" (reported by Guy Fabrice
	  to the mailing list). Added the namespace conversion (chameleon
	  includes) for the base type reference of <restriction> and
	  <extension>.
	* test/schemas/bug152470_1.xsd: Adapted due to the above change
	  of "mixed" inheritance.

Thu Mar 17 11:03:59 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed a = -> == error pointed by GUY Fabrice

Wed Mar 16 22:53:53 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more debug messages from Matthew Burgess
	* xmlschemastypes.c: xmlSchemaValidateLengthFacet API missing check.

Wed Mar 16 17:37:04 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Aaaannnd putting back the previous changes done
	  by Daniel, which I overwrote with the previous commit.

Wed Mar 16 17:20:25 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Hopefully finished validation against facets to use the normalized
	  value of both, the facets and instance values. Added 
	  xmlSchemaValidateLengthFacetWhtsp(), xmlSchemaValidateFacetWhtsp()
	  and xmlSchemaGetValType() to the schema API.

Wed Mar 16 13:55:31 CET 2005 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: do not package .la files
	* xmllint.c: applied patch from Gerry Murphy for xmllint return code
	* xmlschemastypes.c: fixed a couple of missing tests of parameters
	  at public API entry points.

Tue Mar 15 23:31:14 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlschemastypes.c: a couple of more changes to various
	  decimal-handling routines.  Fixes python some problems
	  turned up by the python tests.
	* Makefile.am: change SchemasPythonTests message to warn
	  that there are 10 'expected' errors (rather than 6) since
	  we now reject a '+' sign on an unsigned.

Tue Mar 15 15:43:27 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c xmlschemastypes.h: In preparation to use
	  normalized values of facets during validation: changed the
	  arguments of some string comparison functions; added a static
	  xmlSchemaValidateFacetInternal() with more arguments to be
	  more flexible. Prepared XML_SCHEMA_FACET_ENUMERATION validation
	  to use the comparison functions. Fixed some assignments in
	  xmlSchemaValAtomicType(): total digit count, lo, mi, hi.

Sun Mar 13 19:32:03 CET 2005 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in testapi.c doc/*: preparing release of 2.6.18
	  updated docs and rebuilt
	* libxml.spec.in: reactivated gcc profiling for gcc >= 4.0.0

Sat Mar 12 19:50:22 CET 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: removed a static buffer in xmlByteConsumed(),
	  as pointed by Ben Maurer, fixes #170086
	* xmlschemas.c: remove a potentially uninitialized pointer warning

Fri Mar 11 23:53:13 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlschemastypes.c: enhanced the parsing of XML_SCHEMAS_DECIMAL
	  and much of the routine xmlSchemaCompareDecimals.  The
	  changes were necessary to fix a problem reported on the
	  mailing list by John Hockaday.

Fri Mar 11 13:22:52 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: The schema parser will stop if components could
	  not be resolved. This is not conforming to the spec but for now
	  will avoid internal errors during type fixup and content model
	  creation. Restructured inclusion/import of schemata: this avoids
	  duplicate, self and circular inclusion. Chameleon includes are
	  still workarounded. Added restriction to disallow references to
	  non-imported namespaces. Corrected parsing of <group>.
	* result/schemas/bug167754_0_0*: Added a missing test result.

Thu Mar 10 16:02:17 CET 2005 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/encoding.html: Enriched encoding.html with more
	  link and foreword warning to avoid problem with ignorant
	  programmers, c.f #169721

Thu Mar 10 15:01:34 CET 2005 Daniel Veillard <daniel@veillard.com>

	* python/tests/Makefile.am python/tests/readernext.py: added
	  a regression test from Rob Richards for the previous bug

Thu Mar 10 13:22:36 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied fix for xmlTextReaderNext() bug from
	  Rob Richards

Thu Mar 10 11:35:57 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c: second patch from Rick Jones, portability fix for
	  HP-UX
	* doc/examples/xpath1.c doc/examples/xpath2.c: first fix from Rick Jones
	  to avoid warnings.

Thu Mar 10 10:20:23 CET 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/hash.h libxml.h libxml.spec.in: some gcc4 portability
	  patches, including a serious aliasing bug exposed in s390 
	  when trying to convert data pointer to code pointer.

Mon Mar  7 18:34:00 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Tiny restructuring of the validation start-up
	  functions. Added cleanup of the validation context at the
	  end of validation. This takes care of the validation context
	  being reused.

Mon Mar  7 12:12:01 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Tiny changes in the comparison functions
	  I forgot to commit last time.

Fri Mar  4 22:51:42 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added IDC validation of anySimpleType attribute
	  values; anyway the IDC key comparison is restricted to
	  anySimpleType <--> string based types. For other types we
	  would possibly need the canonical lexical representation of
	  them; this sounds not performant, since we would need to
	  build such a representation each time we want to compare against
	  anySimpleType. TODO: think about buffering the canonical values
	  somewhere. Fixed error reports for default attributes to work
	  without a node being specified. This all and the enabling of IDC
	  validation fixes bug #165346 (reported by Benoit Gr?goire - could
	  not read his last name correctly from bugzilla).

Fri Mar  4 18:57:44 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Enabled IDC parsing and validation.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h: 
	  Added xmlSchemaCopyValue to the API; this was done due to
	  validation of default attributes against IDCs: since IDC keys
	  consume the precomputed value, one needs a copy.
	* pattern.c: Enabled IDC support; this is currently done
	  via calling xmlPatterncompile with a flag arg of 1.

Wed Mar  2 11:45:18 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/examples/Makefile.am python/tests/Makefile.am
	  xstc/Makefile.am: try to fix a problem with valgrind.
	* python/generator.py python/libxml.c python/tests/Makefile.am
	  python/tests/tstmem.py: applied memory leak fix from Brent Hendricks
	  c.f. bug #165349

Mon Feb 28 11:18:24 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Changed xmlSearchNsByHref to call xmlNsInScope with
	  the prefix instead of the namespace name.
	* test/schemas/annot-err_0.xsd test/schemas/element-err_0.xsd:
	  Adapted invalid values of the "id" attribute, since they are
	  validated now.

Fri Feb 25 08:31:16 CET 2005 Daniel Veillard <daniel@veillard.com>

	* threads.c: new version with fixes from Rob Richards

Thu Feb 24 16:37:51 CET 2005 Daniel Veillard <daniel@veillard.com>

	* threads.c: applied patch from Rich Salz for multithreading on
	  Windows.

Wed Feb 23 15:04:46 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied a patch from Rob Richards fixing a couple
	  of bugs in the writer

Mon Feb 21 21:51:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlsave.c: fixed problem when XMLLINT_INDENT was empty (bug 168033).
	* xpath.c: fixed compilation warning, no change to logic.
	* xmlschemastypes.c: fixed compilation warning, no change to logic.

Mon Feb 21 14:48:27 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Rob Richards to fix a problem with
	  xmlTextWriterStartAttributeNS

Mon Feb 21 11:41:41 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xpath.c: fixed remaining known bugs in the XPath streaming,
	  and switched XPath to use it by default when possible

Sat Feb 19 19:25:14 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: a bit of cleanup
	* elfgcchack.h testapi.c doc/*: rebuilt the API the tests and
	  the documentation as a result.

Fri Feb 18 20:34:03 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: applied patch from
	  Aron Stansvik to add xmlTextReaderByteConsumed()
	* testReader.c: added a test option
	* xmlschemastypes.c: fix a lack of pointer checking in APIs

Fri Feb 18 12:41:10 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug167754_0*: Added the regression test of Frans
	  Englich for bug #167754.

Fri Feb 18 12:31:49 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Started support for IDC resolution to default
	  attributes. If building the content model for <all>: ensured
	  to put element declarations and not the particles into the
	  content model automaton (this was bug #167754, reported by
	  Frans Englich).

Thu Feb 17 22:31:58 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c pattern.h: Some experimental addition for parsing
	  of expressions and streamable validation.
	  Added xmlStreamPushAttr to the API.

Thu Feb 17 19:57:35 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added validation for the attribute "id" in the
	  schemata; doing this needed error report fixes for notations,
	  facets and group. Changed NOTATION validation to work with the
	  declared NOTATIONs in the schema; this does have no impact on
	  the validation via the relaxng module.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Added xmlSchemaNewNOTATIONValue to the API to be able to do
	  the NOTATION validation described above.
	* test/schemas/element-err_0.xsd test/schemas/annot-err_0.xsd:
	  Fixed the values of the "id" attributes, which were not validated
	  previously.  

Thu Feb 17 12:03:46 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed comparison for default/fixed attribute
	  values, if the type was 'xsd:string'. Changed the comparison
	  for IDCs to use the whitespace aware comparison function.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Added xmlSchemaGetCanonValue, xmlSchemaNewStringValue and
	  xmlSchemaCompareValuesWhtsp to the API. Added functions
	  to compare strings with whitespace combinations of "preserve",
	  "replace" and "collapse".

Wed Feb 16 13:24:35 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Further work on IDCs, especially evaluation for
	  attribute nodes.

Wed Feb 16 01:19:27 CET 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fix the comment to describe the real return values
	* pattern.c xpath.c include/libxml/pattern.h: lot of work on
	  the patterns, pluggin in the XPath default evaluation, but
	  disabled right now because it's not yet good enough for XSLT.
	  pattern.h streaming API are likely to be changed to handle
	  relative and absolute paths in the same expression.

Tue Feb 15 15:33:32 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added IDC evaluation for attribute nodes.
	  Made 'nil'ed elements work. Added a specific error message
	  for 'strict' attribute wildcards.
	* include/libxml/xmlerror.h: Added an error code for
	  wildcards.
	* result/schemas/anyAttr-processContents-err1_0_0.err: Adapted.  

Sun Feb 13 16:15:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	This change started out as a simple desire to speed up the
	execution time of testapi.c, which was being delayed by
	nameserver requests for non-existent URL's.  From there it
	just sort of grew, and grew....
	* nanohttp.c, nanoftp.c: changed the processing of URL's
	  to use the uri.c routines instead of custom code.
	* include/libxml/xmlerror.h: added code XML_FTP_URL_SYNTAX
	* uri.c: added accepting ipV6 addresses, in accordance with
	  RFC's 2732 and 2373 (TODO: allow ipV4 within ipV6)
	* gentest.py, testapi.c: fixed a few problems with the
	  testing of the nanoftp and nanohttp routines.
	* include/libxml/xmlversion.h: minor change to fix a
	  warning on the docs generation
	* regenerated the docs

Sat Feb 12 09:07:11 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed xmlXIncludeParseFile to prevent
	  overwriting XML_COMPLETE_ATTRS when setting pctxt->loadsubset
	  (bug 166199)
	* Makefile.am, python/tests/Makefile.am, xstc/Makefile.am: added
	  code to add $(top_builddir)/.libs to LD_LIBRARY_PATH whenever
	  PYTHONPATH is set, to assure new libxml2 routines are used.

Fri Feb 11 22:20:41 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem when no initial "chunk" was
	  given to xmlCreatePushParser (bug 162613)

Fri Feb 11 18:37:22 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* dict.c: fixed compilation warning
	* parser.c: changed xmlWarningMsg so ctxt->errNo is not set
	* xmllint.c: changed to return non-zero status if error
	  on xinclude processing
	* xmlsave.c: minor deletion of a redundant condition statement
	
Wed Feb  9 17:47:40 CET 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch to xmlSetNsProp from Mike Hommey

Sun Feb  6 00:17:57 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmllint.c: fixed implementation for |
	* test/pattern/conj.* result/pattern/conj: added a specific regression
	  test

Sat Feb  5 18:36:56 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: first implementation for | support

Sat Feb  5 14:58:46 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: fixed the namespaces support
	* tree.c: fixed xmlGetNodePath when namespaces are used
	* result/pattern/multiple result/pattern/namespaces
	  test/pattern/multiple.* test/pattern/namespaces.*: added
	  more regression tests

Fri Feb  4 18:26:43 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed one internal function
	* doc/Makefile.am doc/wiki.xsl: applied patch from Joel Reed
	* testapi.c doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated

Fri Feb  4 00:25:43 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: use the walker to test the patterns instead of
	  the normal reader
	* pattern.c xmllint.c: bug fixes in the train including fixing the
	  stupid build break.

Tue Feb  1 18:15:52 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: more bug fixes for the XPath streaming code.

Mon Jan 31 17:59:24 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Integrated the streaming pattern from the
	  pattern module. Fixed some IDC code bugs. Changed
	  fallback for attribute declaration addition to work like for
	  element declarations.	

Mon Jan 31 01:27:22 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmllint.c: bugfixes around the streaming patterns

Sun Jan 30 23:35:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in result/pattern/simple 
	  test/pattern/simple.*: added first test for the patterns
	* pattern.c xmllint.c: a few fixes

Sun Jan 30 19:27:23 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c include/libxml/pattern.h xmllint.c: added a 
	  streaming pattern detector for a subset of XPath, should
	  help Kasimier for identity constraints
	* python/generator.py: applied Stéphane Bidoul patch to find
	  paths without breaking.

Fri Jan 28 18:53:40 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed an untested pointer dereference and a & vs &&

Fri Jan 28 18:37:18 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: implementation of xmlTextReaderReadString by
	  Bjorn Reese

Fri Jan 28 16:51:47 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Corrected an ambiguous symbol-space for
	  local attribute declarations. IFDEFed more IDC code to
	  suppress compiler warnings.

Fri Jan 28 00:57:04 CET 2005 Daniel Veillard <daniel@veillard.com>

	* bakefile/Readme.txt bakefile/Bakefiles.bkgen bakefile/libxml2.bkl:
	  files for the Bakefile generator for Makefiles from Francesco
	  Montorsi
	* win32/configure.js: fixes for Windows compilation with non-default
	  flags by Joel Reed

Thu Jan 27 18:23:50 CET 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed xmlCopyDoc to also copy the doc->URL as pointed
	  by Martijn Faassen

Thu Jan 27 13:39:04 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h:
	  Added an initial skeleton for indentity-constraints. This is all
	  defined out, since not complete, plus it needs support from other
	  modules.
	  Added mechanism to store element information for the
	  ancestor-or-self axis; this is needed for identity-constraints
	  and should be helpful for a future streamable validation.
	* include/libxml/xmlerror.h: Added an error code for
	  identity-constraints.

Wed Jan 26 01:03:37 CET 2005 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: had to fix generation and rebuild.
	* valid.c: the testapi found a bug in the last code of course !

Wed Jan 26 00:43:05 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am testapi.c doc/Makefile.am: fixing the way testapi.c
	  is generated, fixes bug #161386
	* dict.c: fix a comment typo
	* elfgcchack.h doc/*: regenerated

Tue Jan 25 22:39:33 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: found and fixed 2 problems in the internal subset scanning
	  code affecting the push parser (and the reader), fixes #165126
	* test/intsubset2.xml result//intsubset2.xml*: added the test case
	  to the regression tests.

Tue Jan 25 01:20:11 CET 2005 Daniel Veillard <daniel@veillard.com>

	* testdso.c xmlregexp.c: warning patches from Peter Breitenlohner
	* include/libxml/valid.h valid.c parser.c: serious DTD parsing
	  speedups, start to deprecate 3 ElementDef related entry point
	  and replace them with better ones.

Mon Jan 24 00:47:41 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more hash dictionary interning changes

Sun Jan 23 23:54:39 CET 2005 Daniel Veillard <daniel@veillard.com>

	* hash.c include/libxml/hash.h: added xmlHashCreateDict where
	  the hash reuses the dictionary for internal strings
	* entities.c valid.c parser.c: reuse that new API, leads to a decent
	  speedup when parsing for example DocBook documents.

Sun Jan 23 21:14:20 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: small speedup in skipping blanks characters
	* entities.c: interning the entities strings 

Sun Jan 23 18:35:00 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: boosting common comment parsing code, it was really
	  slow.
	* test/comment[3-5].xml result//comment[3-5].xml*: added sprecific
	  regression tests

Sun Jan 23 01:00:09 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: small optimization back.

Sat Jan 22 00:40:31 CET 2005 Daniel Veillard <daniel@veillard.com>

	* dict.c parser.c include/libxml/dict.h: a single lock version
	  mostly avoid the cost penalty of the lock in case of low 
	  parallelism, so applying that version instead.

Fri Jan 21 17:54:06 CET 2005 Daniel Veillard <daniel@veillard.com>

	* dict.c: patch from Gary Coady to fix a race in dict reference
	  counting in multithreaded apps.

Fri Jan 21 16:08:21 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #164556 where non-fatal errors stopped
	  push parsing and xmlreader.
	* Makefile.am: fixup
	* test/errors/webdav.xml result/errors/webdav*: adding regression
	  test for this problem.

Wed Jan 19 17:24:34 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Corrected targetNamespace in
	  xmlSchemaElementDump. Cosmetic changes to the dump output.	

Sun Jan 16 21:00:53 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release of 2.6.17,
	  updated and rebuilt the docs

Sun Jan 16 19:58:36 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: better fix for #151694 not killing c14n regression tests
	* xmlschemastypes.c: fixing bug #157653

Sun Jan 16 19:01:06 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #151694, line should always be set in the
	  elements.

Sun Jan 16 01:04:18 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: trying to fix at least the message from
	  bug #158628
	* include/libxml/xmlsave.h xmlsave.c: added first xmlsave option
	  for format, c.f. bug #159997

Sat Jan 15 18:44:30 CET 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: make __str__ call serialize() on nodes, c.f. 
	  bug #157872

Sat Jan 15 18:18:07 CET 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied patch from Dan McNichol for compilation on AIX

Sat Jan 15 13:35:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #157633 in relaxng choice optimization
	* result/relaxng/choice0* test/relaxng/choice0*: added regression
	  tests about it.
	* doc/*: rebuilt
	* testdso.c: removed a warning due to a missing void in signature.

Thu Jan 13 17:42:55 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/schemasInternals.h xmlschemas.c: 
	  Exposed targetNamespace for simple/complex types, model groups,
	  attribute groups and notations (reported by Michael Hewarth 
	  to the mailing list). Added targetNamespace to xmlSchemaType, 
	  xmlSchemaAttributeGroup and xmlSchemaNotation.
	  Tiny cosmetic change to the content model error report output.
	* result//all_*.err result//any3_0_0.err result//choice_*.err 
	  result//list0_0_1.err result//list0_1_1.err: Adapted output 
	  of regression tests.

Thu Jan 13 13:20:51 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Put the fix of Daniel (from Tue Jan 11 14:41:47 CET)
	  back in, since I missed to update xmlschemas.c before doing
	  the previous commit.
	
Thu Jan 13 12:59:25 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Integrated xmlRegExecErrInfo and xmlRegExecNextValues
	  from xmlregexp.c to report expected elements on content model errors.
	* all_*.err any3_0_0.err choice_*.err list0_0_1.err list0_1_1.err:
	  Adapted output of regression tests.

Thu Jan 13 12:24:09 CET 2005 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in xmlmodule.c: trying to work around
	  the compilation problem on HP-UX

Wed Jan 12 22:03:33 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: fixed the fixed size array structure problem reported by
	  Patrick Streule

Wed Jan 12 15:15:02 CET 2005 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h testapi.c doc/libxml2-api.xml doc/*: regenerated
	  the API description, rebuilt, improved navigation in documentation
	  a bit.

Wed Jan 12 14:17:14 CET 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlregexp.h xmlregexp.c: extended xmlRegExecErrInfo()
	  and xmlRegExecNextValues() to return error transition strings too,
	  and sink state detection and handling.

Tue Jan 11 14:41:47 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed bug #163641 when the value passed for
	  an atomic list type is NULL.

Tue Jan 11 10:14:33 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* Makefile.am configure.in: fixed dependency on python 2.3,
	  also small improvement for cygwin (bug 163273)

Sun Jan  9 18:46:32 CET 2005 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: William noticed I forgot to add special
	  support for xmlmodules.c define
	* xmlregexp.c include/libxml/xmlregexp.h: added terminal to
	  xmlRegExecErrInfo() API, adding new xmlRegExecNextValues()
	  entry point and refactored to use both code.

Mon Jan 10 01:02:41 HKT 2006 William Brack <wbrack@mmm.com.hk>

	* doc/xml.html, doc/FAQ.html: added an FAQ under Developer for
	  setting up a "private" library (after some list posts about
	  people having trouble doing it)

Sat Jan  8 23:04:10 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing behaviour for xmlRegExecErrInfo in case of
	  rollback

Fri Jan  7 14:54:51 CET 2005 Daniel Veillard <daniel@veillard.com>

	* TODO: small update
	* xmlregexp.c: trying to add an API to get useful error information
	  back from a failing regexp context.

Thu Jan  6 17:35:41 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with xmlXPathErr when error number
	  subscript was out of range (bug 163055)

Thu Jan  6 09:57:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed problem with xmlURIEscape when query part was
	  empty (actually fixed xmlURIEscapeStr to return an empty
	  string rather than NULL for empty string input) (bug 163079)
	  
Tue Jan  4 17:08:45 PST 2005 Aleksey Sanin <aleksey@aleksey.com>

	* parser.c, parserInternal.c: fixed "col" calculation for 
          struct _xmlParserInput (based on patch from Rob Richards) 
	* include/libxml/xmlerror.h, error.c: propagated error column
          number in the xmlError structure

Tue Jan  4 22:47:22 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed namespace bug in push mode reported by 
	  Rob Richards
	* test/ns6 result//ns6*: added it to the regression tests
	* xmlmodule.c testModule.c include/libxml/xmlmodule.h:
	  added an extra option argument to module opening and defined
	  a couple of flags to the API.

Tue Jan  4 21:16:05 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c include/libxml/xmlmodule.h: applied patch from
	  Bjorn Reese, plus some cleanups
	* elfgcchack.h doc/elfgcchack.xsl: fixed the stylesheet to 
	  add the new header
	* doc/* testapi.c: regenerated the API

Tue Jan  4 18:47:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: making DSO support an option
	* xmlmodule.c xmlreader.c include/libxml/xmlmodule.h: code
	  and documentation cleanups
	* elfgcchack.h testapi.c doc/*: regenerated the docs and
	  checks for new module
	* test/valid/REC-xml-19980210.xml: fix a small change introduced
	  previously

Tue Jan  4 16:07:52 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am config.h.in configure.in error.c libxml-2.0.pc.in
	  testModule.c testdso.c xml2-config.in xmllint.c xmlmodule.c
	  include/libxml/Makefile.am include/libxml/xmlerror.h
	  include/libxml/xmlmodule.h include/libxml/xmlversion.h.in 
	  include/libxml/xmlwin32version.h.in: applied DSO support
	  patch 2 from Joel Reed

Tue Jan  4 15:30:15 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied patch from Marcin Konicki for BeOS

Mon Jan  3 13:57:21 PST 2005 Aleksey Sanin <aleksey@aleksey.com>

	* parser.c: added GetLineNumber and GetColumnNumber functions for xmlReader

Sun Jan  2 17:51:18 HKT 2005 William Brack <wbrack@mmm.com.hk>

	Re-examined the problems of configuring a "minimal" library.
	Synchronized the header files with the library code in order
	to assure that all the various conditionals (LIBXML_xxxx_ENABLED)
	were the same in both.  Modified the API database content to more
	accurately reflect the conditionals.  Enhanced the generation
	of that database.  Although there was no substantial change to
	any of the library code's logic, a large number of files were
	modified to achieve the above, and the configuration script
	was enhanced to do some automatic enabling of features (e.g.
	--with-xinclude forces --with-xpath).  Additionally, all the format
	errors discovered by apibuild.py were corrected.
	* configure.in: enhanced cross-checking of options
	* doc/apibuild.py, doc/elfgcchack.xsl, doc/libxml2-refs.xml,
	  doc/libxml2-api.xml, gentest.py: changed the usage of the
	  <cond> element in module descriptions
	* elfgcchack.h, testapi.c: regenerated with proper conditionals
	* HTMLparser.c, SAX.c, globals.c, tree.c, xmlschemas.c, xpath.c,
	  testSAX.c: cleaned up conditionals
	* include/libxml/[SAX.h, SAX2.h, debugXML.h, encoding.h, entities.h,
	  hash.h, parser.h, parserInternals.h, schemasInternals.h, tree.h,
	  valid.h, xlink.h, xmlIO.h, xmlautomata.h, xmlreader.h, xpath.h]:
	  synchronized the conditionals with the corresponding module code
	* doc/examples/tree2.c, doc/examples/xpath1.c, doc/examples/xpath2.c:
	  added additional conditions required for compilation
	* doc/*.html, doc/html/*.html: rebuilt the docs
	
Sat Dec 25 18:10:02 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parserInternals.c: fixed to skip (if necessary) the BOM for
	  encoding 'utf-16'.  Completes the fix for bug #152286.
	* tree.c, parser.c: minor warning cleanup, no change to logic
	
Fri Dec 24 16:31:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: added most required entries to
	  foreign encoding table, plus some additional logic to
	  assure only the 1st param uses the 't#' format.  Fixes
	  bug #152286, but may still have some other UTF-16 problems.

Thu Dec 23 23:44:08 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* Makefile.am, gentest.py: enhanced for enabling build in
	  a different directory.  Added (optional) param to gentest.py
	  to specify the source directory (bug #155468)
	* doc/Makefile.am: changed destination of NEWS from (top_srcdir)
	  to (top_builddir) (bug #155468)
	* python/Makefile.am, python/generator.py: enhanced for enabling
	  build in a different directory(bug #155468).  Added (optional)
	  param to generator.py to specify the source directory.  Added
	  a new table of functions which have possible "foreign" encodings
	  (e.g. UTF16), and code to use python 't' format instead of
	  'z' format (mostly solving bug #152286, but still need to
	  populate the table).
	  
Tue Dec 21 08:10:44 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/site.xsl, doc/xml.html, plus rebuilt all the html pages
	Change reference to new site for Solaris binaries, fixing bug
	160598


Mon Dec 20 08:02:57 PST 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: reset input->base within xmlStopParser
	* xmlstring.c: removed call to xmlUTF8Strlen from within
	  xmlUTF8Strpos (Bill Moseley pointed out it was not
	  useful)

Fri Dec 17 16:03:41 PST 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: changed xmlErrValidWarning to use ctxt->warning
	  instead of ctxt->error for its reports (bug #160662)

Fri Dec 17 14:52:17 PST 2004 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: modified to allow the ns and nsDefs
	  accessors to return None instead of error when no namespace
	  is present (bug #)

Fri Dec 17 11:40:21 PST 2004 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: changed maintainer-clean dependency with
	  suggestion from Crispin Flowerday (bug #157634)
	* debugXML.c: fixed crash when ATTRIBUTE or DOCUMENT nodes
	  were specified with debugDumpNode (bug #160621)

Fri Dec 10 11:24:41 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed ID deallocation problem based on patch from
	  Steve Shepard fixes bug #160893
	* xmlmemory.c: improving comment.
	* testapi.c: new test for xmlDictExists() is generated.

Wed Dec  1 22:35:37 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* dict.c, xpath.c, include/libxml/hash.h: fixed up some gcc warnings,
	  no change to logic.  New macro XML_CAST_FPTR to circumvent gcc
	  warnings on function pointer <-> object pointer (a hack).

Mon Nov 29 14:07:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a memory leak on errors in some circumstances #159812

Fri Nov 26 23:20:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: added a check within xmlOutputBufferWriteEscape to prevent
	  a dead loop on bad data (bug 159550)

Fri Nov 26 13:09:04 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed strict/lax element wildcards: the children
	  of elements for which a declaration existed were still processed
	  by the wildcard mechanism (reported by philippe ventrillon to the
	  mailing list).
	  Changed the import and include mechanism to share dictionaries.

Fri Nov 26 11:44:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c: make sure xmlCtxtReadFile and htmlCtxtReadFile
	  go through the catalog resolution.
	* gentest.py testapi.c: fix a side effect wrning of the change

Wed Nov 24 13:41:52 CET 2004 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h: added xmlDictExists() to the 
	  dictionary interface.
	* xmlreader.c: applying xmlTextReaderHasAttributes fix for namespaces
	  from Rob Richards

Wed Nov 17 13:54:37 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: tiny enhancement for content model error reports
	  (#157190, #143948). Removed abbreviations: CT, ST and WC 
	  (#157190, reported by Frans  Englich).
	  Initial: no report of local components.
	* result/schemas/all* result/schemas/any3_0_0.err
	  result/schemas/choice*
	  result/schemas/cos-st-restricts-1-2-err_0_0.err
	  result/schemas/derivation-ok-extension-err_0_0.err
	  result/schemas/derivation-ok-extension_0_0.err
	  result/schemas/derivation-ok-restriction-2-1-1_0_0.err
	  result/schemas/derivation-ok-restriction-4-1-err_0_0.err 
	  result/schemas/deter0_0_0.err result/schemas/extension1_0_2.err
	  result/schemas/facet-unionST-err1_0_0.err
	  result/schemas/hexbinary_0_1.err
	  result/schemas/list* result/schemas/restriction-attr1_0_0.err
	  result/schemas/vdv-first4_0_1.err result/schemas/vdv-first4_0_2.err:
	  Adapted output.

Mon Nov 15 13:04:28 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Moved execution of xmlSchemaCheckDefaults to
	  xmlSchemaTypeFixup; this ensures facets of inherited types to be
	  checked prior to facets of derived types - which caused a seg
	  fault otherwise (bug #158216, reported by Frans Englich).

Sun Nov 14 22:23:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* gentest.py, testapi.c: further enhancement, now all
	  compilation warnings have been fixed.
	* xmlschemastypes.c: added NULL check for one function

Fri Nov 12 23:58:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: trivial change (changed CHECK_CONTEXT to CHECK_CTXT
	  on a couple of lines)
	* gentest.py, testapi.c: enhanced to reduce compilation warnings

Fri Nov 12 16:12:48 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Un-commented a TODO in xmlSchemaParseElement.

Fri Nov 12 14:55:36 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Correct symbol space for 'all' and 'choice'.
	* xmlschemastypes.c include/xmlschemastypes.h: Added 'replace' 
	  normalization for 'normalizedString'.  
	  Added xmlSchemaWhiteSpaceReplace to the API.

Thu Nov 11 21:43:02 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: forgot a $(srcdir)
	* encoding.c: stupid error wrong name #157976

Wed Nov 10 15:35:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc/*: preparing release of libxml2-2.6.16

Wed Nov 10 12:55:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: Applied patch from Brent
	  Hendricks adding support for late DTD validation.
	* python/tests/Makefile.am python/tests/dtdvalid.py
	  python/tests/test.dtd: integrated the provided regression test

Tue nov  9 19:24:31 CET 2004 Dodji Seketeli <dodji@seketeli.org>

	* configure.in: detect when struct sockaddr_storage
	  has the __ss_family member instead of ss_family and
	  behave accordingly. We now can use ipv6 on aix.

Tue Nov  9 17:15:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am gentest.py testapi.c: integrated in "make tests"
	  added -q option, and more conditional features fixes
	* catalog.c debugXML.c parser.c testThreads.c xmllint.c
	  xmlschemastypes.c xmlwriter.cinclude/libxml/catalog.h
	  include/libxml/debugXML.h: various compilation and conditional
	  cleanups.
	* doc/*: regenerated

Tue Nov  9 15:59:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: better handling of conditional features
	* HTMLparser.c SAX2.c parserInternals.c xmlwriter.c: more testing
	  on parser contexts closed leaks, error messages

Tue Nov  9 10:21:37 GMT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem concerning XPath context corruption
	  during function argument evaluation (bug 157652)
	  
Mon Nov  8 18:54:52 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: more types.
	* parserInternals.c xpath.c: more fixes

Mon Nov  8 18:16:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: better parser options coverage
	* SAX2.c xpath.c: more cleanups.

Tue Nov  9 01:50:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: trying to fix some optional support brokenness

Mon Nov  8 17:25:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* debugXML.c parser.c xmlregexp.c xpath.c: more fixes

Mon Nov  8 15:02:39 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* SAX2.c parser.c parserInternals.c: more fixes

Mon Nov  8 12:55:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c testapi.c xmlIO.c xmlstring.c: more fixes.

Mon Nov  8 11:24:57 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more types, more coverage
	* parser.c parserInternals.c relaxng.c valid.c xmlIO.c
	  xmlschemastypes.c: more problems fixed
	  
Mon Nov  8 10:24:28 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* gentest.py: fixed test file corruption problem

Sun Nov  7 13:18:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: fixed typos and avoid Catalogs verbosity

Sat Nov  6 23:25:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: augmented the number of types

Sat Nov  6 20:24:07 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c xmlreader.c xmlwriter.c: a number of new
	  bug fixes and documentation updates.

Sat Nov  6 15:50:11 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: augmented type autogeneration for enums
	* xpath.c include/libxml/xpath.h: removed direct error reporting.

Sat Nov  6 14:27:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fixed a regression in iconv support.

Fri Nov  5 18:19:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: autogenerate a minimal NULL value sequence
	  for unknown pointer types
	* HTMLparser.c SAX2.c chvalid.c encoding.c entities.c parser.c
	  parserInternals.c relaxng.c valid.c xmlIO.c xmlreader.c 
	  xmlsave.c xmlschemas.c xmlschemastypes.c xmlstring.c xpath.c
	  xpointer.c: This uncovered an impressive amount of entry points
	  not checking for NULL pointers when they ought to, closing all
	  the open gaps.

Fri Nov  5 16:26:28 UTC 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: fixed problem with NULL entry (bug 157407)
	* xpath.c: fixed a couple of warnings (no change to logic)

Fri Nov  5 15:30:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* xmlunicode.c: one fix

Fri Nov  5 23:15:51 CET 2004 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed a compilation problem on a recent change

Fri Nov  5 12:50:09 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* nanoftp.c tree.c: more fixes

Fri Nov  5 11:02:28 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: fixed the way the generator works,
	  extended the testing, especially with more real trees and nodes.
	* HTMLtree.c tree.c valid.c xinclude.c xmlIO.c xmlsave.c: a bunch
	  of real problems found and fixed.
	* entities.c: fix error reporting to go through the new handlers

Thu Nov  4 18:44:56 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: dohh ... stupid change killing xmlParseDoc()

Thu Nov  4 18:32:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: changing the way the .c is generated,
	  extending the tests coverage
	* include/libxml/nanoftp.h nanoftp.c elfgcchack.h doc/*: fixing some
	  function signatures, regenerating stuff
	* SAX2.c parser.c xmlIO.c: another set of bug fixes and API hardening

Thu Nov  4 13:32:19 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: extending the tests coverage

Thu Nov  4 11:52:28 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: gentest.py was missing from the EXTRA_DIST

Thu Nov  4 11:48:47 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: extending the tests coverage
	* HTMLtree.c tree.c xmlsave.c xpointer.c: more fixes and cleanups

Thu Nov  4 00:25:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* nanoftp.c xmlIO.c: more fixes and hardening
	
Wed Nov  3 20:16:24 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* valid.c: bunch of cleanups and 2 leaks removed 

Wed Nov  3 18:06:44 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* list.c tree.c: more fixes and hardening

Wed Nov  3 15:19:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* relaxng.c include/libxml/relaxng.h: adding a type init interface
	* include/libxml/xmlerror.h parser.c xmlreader.c xmlwriter.c: more
	  cleanups and bug fixes raised by the regression tests

Wed Nov  3 12:49:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* xmlwriter.c list.c: more hardeing of APIs
	* doc/apibuild.py: skip testapi.c when scanning the C files.

Tue Nov  2 23:09:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more testing and coverage
	* elfgcchack.h xmlstring.c include/libxml/xmlstring.h: more cleanups
	* doc/*: rebuilt

Tue Nov  2 19:44:32 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more developments on the API testing
	* HTMLparser.c tree.c: more cleanups
	* doc/*: rebuilt

Tue Nov  2 15:49:34 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c include/libxml/xmlmemory.h: adding xmlMemBlocks()
	* Makefile.am gentest.py testapi.c: work on generator of an
	  automatic API regression test tool.
	* SAX2.c nanoftp.c parser.c parserInternals.c tree.c xmlIO.c
	  xmlstring.c: various API hardeing changes as a result of running
	  the first set of automatic API regression tests.
	* test/slashdot16.xml: apparently missing from CVS, committed it

Mon Nov  1 15:54:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed an UTF-8 parsing bug reported by Markus Bertheau
	  on #fedora-devel

Sun Oct 31 22:03:38 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug reported by Petr Pajas on the list and
	  affecting XML::Libxml

Sun Oct 31 16:33:54 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c doc/examples/testWriter.c: Fixed bug #153937, making
	  sure the conversion functions return the number of byte written.
	  Had to fix one of the examples.

Fri Oct 29 14:16:56 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.xml: indicate - means stdin closing #156626

Fri Oct 29 14:03:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: register xmlSchemaSetValidErrors, patch from
	  Brent Hendricks in the mailing-list
	* include/libxml/valid.h HTMLparser.c SAX2.c valid.c
	  parserInternals.c: fix #156626 and more generally how to find out
	  if a validation contect is part of a parsing context or not. This
	  can probably be improved to make 100% sure that vctxt->userData
	  is the parser context too. It's a bit hairy because we can't 
	  change the xmlValidCtxt structure without breaking the ABI since
	  this change xmlParserCtxt information indexes.

Wed Oct 27 19:26:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* ChangeLog NEWS configure.in doc/*: preparing release 2.6.15
	* debugXML.c nanoftp.c xmlschemas.c xmlschemastypes.c: cleanups

Wed Oct 27 09:31:24 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed a stupid mistake in xmlBuildRelativeURI
	  (bug 156527)

Wed Oct 27 11:44:35 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: second part of the security fix for
	  xmlNanoFTPConnect() and xmlNanoHTTPConnectHost().

Tue Oct 26 23:57:02 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied fixes for a couple of potential security problems
	* tree.c valid.c xmllint.c: more fixes on the string interning checks

Tue Oct 26 18:09:59 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added checking for names
	  values and dictionaries generates a tons of errors
	* SAX2.ccatalog.c parser.c relaxng.c tree.c xinclude.c xmlwriter.c
	  include/libxml/tree.h: fixing the errors in the regression tests

Mon Oct 25 16:04:22 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: modified the handling of _private for entity
	  expansion (bug 155816)

Mon Oct 25 17:11:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the leak reported by Volker Roth on the list
	* test/ent10 result//ent10*: added a specific test for the problem

Sat Oct 23 11:07:41 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: unlinked the internal subset within xmlValidateDtd
	  (bug 141827)
	* configure.in: added -Wall to developer's flags
	* doc/examples/reader4.res: added to CVS

Fri Oct 22 16:36:50 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: added support for HTML PIs #156087
	* test/HTML/python.html result/HTML/python.html*: added specific tests

Fri Oct 22 15:20:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* threads.c: fixed nasty bug #156087

Fri Oct 22 21:04:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fixed a problem occurring only in x86_64 when
	  very large error messages are raised to the Python handlers.

Thu Oct 21 18:03:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed a memory bug
	* doc/examples/reader4.c doc/examples/*: added test from Graham Bennett
	  and regenerated the directory

Tue Oct 19 11:06:39 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlreader.h xmlreader.c: applied patch from
	  Graham Bennett adding 4 convenience functions to the reader API.

Fri Oct 15 11:22:48 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* debugXML.c: excluded a few nodes (with no content) from the
	  string check routine.

Fri Oct 15 10:48:30 EDT 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added UTF-8 string checking,
	  raise a problem, need debug

Wed Oct 13 02:17:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: applied patch from Thomas Fitzsimmons fixing
	  #155240 building outside the source tree. but make tests fails.

Mon Oct 11 16:26:51 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added namespace checking

Sat Oct  9 22:36:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: some framework preparation to add namespace checkings

Thu Oct  7 15:12:58 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h include/libxml/xmlerror.h:
	  adding the tree debug mode
	* parser.c relaxng.c tree.c xpath.c: fixing various problems reported
	  by the debug mode.
	* SAX2.c: another tree fix from Rob Richards

Wed Oct  6 10:50:03 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: small change to last fix, to get xml:base right

Wed Oct  6 09:33:51 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: added code to handle <group>, including dumping
	  to output (bug 151924).
	* xmlcatalog.c, xmlstring.c, parser.c: minor compiler warning 
	  cleanup (no change to logic)
	  
Mon Oct  4 16:09:07 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in debugXML.c include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: revamped the XML debugging
	  module and prepare for a new checking mode

Mon Oct  4 13:53:24 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Malcolm Tredinnick fixing bug #152426

Mon Oct  4 12:26:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/tests/outbuf.py: 
	  applied patch from Malcolm Tredinnick fixing bug #154294
	  related to saving to python file objects.

Sat Oct  2 21:08:51 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: changed xmlHasNsProp to properly handle a request for
	  the default namespace (bug 153557)

Sat Oct  2 18:18:27 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem with dictionary handling within
	  xmlParseInNodeContext (bug 153175)

Sat Oct  2 15:46:37 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* check-relaxng-test-suite.py, check-relaxng-test-suite2.py,
	  check-xinclude-test-suite.py, check-xml-test-suite.py,
	  check-xsddata-test-suite.py, doc/examples/index.py: changed
	  changed sys.path setting from 'append' to 'insert' (patch
	  supplied by Malcolm Tredinnick) (bug 153716)

Sat Oct  2 15:03:14 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* include/libxml/parserInternals.h: added two new macros
	  IS_ASCII_LETTER and IS_ASCII_DIGIT used with (html)
	  parsing and xpath for testing data not necessarily
	  unicode.
	* HTMLparser.c, xpath.c: changed use of IS_LETTER_CH and
	  IS_DIGIT_CH macros to ascii versions (bug 153936).
	  
Fri Oct  1 20:37:25 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* error.c: added some coding to attempt to display which file
	  contains an error when using XInclude (bug 152623)

Thu Sep 30 11:19:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: stupid cut'n paste bug in xmllint detection

Wed Sep 29 17:47:56 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: releasing 2.6.14, rebuilding the docs
	  
Wed Sep 29 15:00:11 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlerror.h include/libxml/xmlschemas.h
	  include/libxml/schemasInternals.h: Parsing of <complexContent>
	  - handle attribute 'mixed', catch illegal attributes.
	  Parsing of <complexType> - handle attributes 'abstract',
	  'final' and 'block', catch illegal attributes.
	  Validation of complex types - handle abstract types.
	  Added handling of default/fixed attributes and element values.
	  Per validation option attribute nodes/text nodes are created
	  on the instance.
	  Added the corresponding constraints for fixed/default.
	  Added xmlSchemaSetValidOptions, xmlSchemaGetValidOptions
	  to the external API.
	  Extended element declaration constraints.  
	  Got rid of perseverative creation of temporery validation/parser 
	  contexts.
	  Added handling of xsi:schemaLocation and
	  xsi:noNamespaceSchemaLocation.
	  Fixed xsi:type component resolution if using non-prefixed
	  QNames.
	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h:
	  Enabled namespace awareness of the content model if using the
	  model group "all".
	* test/schemas/bug152470_1.xsd: Removed an "abstract" attribute,
	  which broke the test.
	* xstc/xstc.py:  Workaround to accommodate case insensitive
	  test definitions in ms-test.def.xml (was missing in a previous
	  commit).

Wed Sep 29 11:03:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/drv_libxml2.py: another patch from Malcolm Tredinnick
	  adding option not to load dtd from the drv_libxml2.py module
	  #134633

Tue Sep 28 14:30:22 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* acconfig.h config.h.in configure.in xmlIO.c xmlregexp.c xmlschemas.c
	  xmlschemastypes.c: another patch from Malcolm Tredinnick fixing
	  warning generated by the Nonstop Kernel Open System Services 
	  compiler #151710

Tue Sep 28 13:07:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: applied patch from Malcolm Tredinnick fixing
	  python exception hierarchy #139824

Sun Sep 26 16:40:24 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c TODO: applied patch from Malcolm Tredinnick fixing errata
	  E20 concerning NMTOKENS and co. validation #153722
	* result/VC/AttributeNmtokens test/VC/AttributeNmtokens
	  test/VCM/AttributeNmtokens.xml: also added tests from Malcolm

Sun Sep 26 16:24:44 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xstc/xstc.py: applied patch from Malcolm Tredinnick fixing space/tabs
	  #153713
	* xpath.c: fixed a realloc potential problem

Fri Sep 24 16:14:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: fixed make valgrind xstc 

Thu Sep 23 18:23:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixing an out of bound addressing issue

Thu Sep 23 15:14:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c relaxng.c xmlschemas.c: more memory related
	  code cleanups.

Thu Sep 23 01:04:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bunch of errors when realloc failed.

Wed Sep 22 23:56:05 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* threads.c uri.c: couple of memory fixes from Mark Vakoc reported
	  by Purify on Windows.

Mon Sep 20 22:01:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added --timing --copy timing for the copy
	* vms/build_libxml.com: applied patch from Craig Berry
	  to build with recent releases

Fri Sep 17 21:25:33 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c, include/libxml/nanohttp.h: added the routine
	  xmlNanoHTTPContentLength to the external API (bug151968).
	* parser.c: fixed unnecessary internal error message (bug152060);
	  also changed call to strncmp over to xmlStrncmp.
	* encoding.c: fixed compilation warning (bug152307).
	* tree.c: fixed segfault in xmlCopyPropList (bug152368); fixed
	  a couple of compilation warnings.
	* HTMLtree.c, debugXML.c, xmlmemory.c: fixed a few compilation
	  warnings; no change to logic.

Fri Sep 17 10:40:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed some extern before function code reported by
	  Kjartan Maraas on IRC
	* legacy.c: fixed compiling when configuring out the HTML parser
	* Makefile.am: added a declaration for CVS_EXTRA_DIST
	* HTMLparser.c: beginning of an attempt at cleaning up the construction
	  of the HTML parser data structures, current data generate a huge
	  amount of ELF relocations at loading time.

Fri Sep 17 10:36:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* ChangeLog: applied fix from Stepan Kasal to fix duplication
	  in the change log and cleanup of space/tabs issues.

Thu Sep 16 13:24:27 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h 
	  test/schemas/bug152470_1.* result/schemas/bug152470_1_1*: 
	  Simplified attribute wildcard creation and assignment to get rid 
	  of memory leaks.
	  Restructured the validation process.
	  Restructured and expanded parsing of <attributeGroup>.
	  Added initial handing of xsi:type.
	  Advanced handling of xsi:nil (should work now for simple types).
	  Added construction of schemata using xsi:schemaLocation and 
	  xsi:noNamespaceSchemaLocation; this is not enabled, since 
	  no corresponding API exists yet.
	  Moved the content model to complex type components.
	  Resolution of types for attributes will look for simple types
	  only (incl. all the built-in simple types).
	  Extended parsing of 'anyAttribute'.
	  Fixed content-type type for complex types if derived from 
	  'anyType' using the short-hand form (see bug # 152470,
	  submitted by Thilo Jeremias).
	* include/libxml/xmlschematypes.h: Cleaned up some comments.
	* xstc/xstc.py: Workaround to accommodate case insensitive
	  test definitions in ms-test.def.xml.
	* result/schemas/deter0_0_0.err result/schemas/ns0_0_2.err
	  result/schemas/ns0_1_2.err: Adapted.

Sat Sep 11 09:04:22 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: changed char array initialisation to avoid a
	  complaint from some compiler(s) (bug 152308)

Thu Sep  9 07:22:11 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* encoding.c: applied fixes for the UTF8ToISO8859x transcoding
	  routine suggested by Mark Itzcovitz

Wed Sep  8 22:50:27 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlsave.c: fixed 2 problems raised by #152140, one
	  which is that notation not in the internal subset should
	  not be saved, and the second more nasty on an error saving
	  NOTATIONs, if there is a proof that nobody uses notations !

Wed Sep  8 11:04:27 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlschemas.h: Added the function
	  xmlSchemaValidateOneElement to the XML Schema validation API, 
	  as proposed by Jeffrey Fink - see bug # 152073.

Tue Sep  7 11:10:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/Makefile.am xstc/Makefile.am: some cleanup
	  checking for xmllint and xsltproc in configure.in, fixed
	  make dist w.r.t. the new xstc subdir.
	* doc/*: rebuilt

Mon Sep  6 16:42:59 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/xstc.py: Changed to finally validate instance documents.

Mon Sep  6 16:04:01 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am Makefile.am: integrated to "make valgrind",
	  heavy ... weight 250MB of VM !

Mon Sep  6 14:54:39 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am xstc/xstc-to-python.xsl xstc/xstc.py Makefile.am:
	  more cleanup in integrating the xstc testsuite

Mon Sep  6 13:56:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in xstc/.cvsignore xstc/Makefile.am:
	  starting to integrate the xstc suite in the normal regression
	  tests

Mon Sep  6 13:14:11 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/sun-test-def.xml: The "tsDir" attribute was not
	  set correctly.

Mon Sep  6 11:52:50 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py: when output and expected do not match
	  exactly run diff to put the differences in the log c.f. #148691

Mon Sep  6 11:17:35 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/xstc-to-python.xslt xstc/ms-test-def.xml xstc/nist-test-def.xml
	  xstc/sun-test-def.xml: Initial release of generation files to 
	  create python test scripts, which will run the W3C XML Schema Test
	  Collection. The ms-test-def.xml and sun-test-def.xml files
	  were extracted from the online HTML XSTC results [1], since they did
	  not exist for the SUN tests, and only partially did exist for the 
	  MS tests. The NIST definition file was created by concatenation
	  of the existing definition files for each single datatype.
	  The stylesheet "xstc-to-python.xslt" should be run against the
	  definition files to produce the python scripts.
	  [1] "http://www.w3.org/XML/2001/05/xmlschema-test-collection/
	  results-master.html"

Fri Sep  3 20:29:59 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: Fixed a seg fault in xmlGetQNameProp:
	  a format argument was missing.
	  Fixed wrong assignment of the owner of a wildcard in
	  xmlSchemaBuildAttributeValidation (in the shorthandform of
	  <complexType>; this caused a seg fault, due to a double-free
	  of the wildcard.
	  Added a check for circular attribute group references.
	  Added a check for circular model group definition references.
	  Fixed a duplicate xmlParserErrors enum value - see bug #151738.

Fri Sep  3 10:08:13 PDT 2004 William Brack <wbrack@mmmm.com.hk>

	* xmlstring.c: modified comments on xmlGetUTF8Char in
	  response to bug 151760 (no change to logic)

Tue Aug 31 09:46:18 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlstring.c: fixed error reported on the list caused by
	  my last change

Tue Aug 31 15:41:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc/*: release of libxml2-2.6.13

Tue Aug 31 14:14:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fixing #151456, an encoding error could generate
	  a serialization loop.

Tue Aug 31 11:34:04 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: also produce a tar ball with just the sources
	* xmllint.c: added --path option and --load-trace options to
	  xmllint, RFE #147740 based on xsltproc versions
	* doc/xmllint.* doc/*: updated the man page and rebuilt

Tue Aug 31 10:37:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: "" is a valid hexbinary string dixit xmlschema-dev
	* result/schemas/hexbinary_0_1.err test/schemas/hexbinary_1.xml: 
	  update the test.
	* test/ns5 result//ns5*: added a test for the namespace bug fixed
	  in previous commit.
	* Makefile.am: added a message in the regression tests

Mon Aug 30 23:36:21 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c: fixed bug introduced during OOM fixup causing problems
	  with default namespace when a named prefix with the same href
	  was present (reported on the mailing list by Karl Eichwalder.
	* xmlstring.c: modified xmlCheckUTF8 with suggested code from
	  Julius Mittenzwei.
	* dict.c: added a typecast to try to avoid problem reported by
	  Pascal Rodes.

Mon Aug 30 12:45:46 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a bug in xmlSchemasCheckFacet, which did
	  not create a computed value on a facet and thus crashed during
	  validation of instances.
	  Expanded validity checks for min/maxOccurs attributes.
	  Expanded validity checks for the value of the attribute "form".

Fri Aug 27 18:32:24 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlstring.c: fixed a problem with xmlCheckUTF8 reported on the
	  mailing list by Julius Mittenzwei

Fri Aug 27 00:13:39 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: added BuildRequires:  zlib-devel, fixes
	  Red Hat bug #124942

Thu Aug 26 12:27:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: remove a warning on Solaris
	* xmlschemastype.c: fix a crashing bug #151111

Wed Aug 25 22:20:18 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/import-bad-1_0.imp: Added missing test file.
	* xmlschemas.c include/libxml/xmlerror.h include/libxml/xmlschemas.h:
	  Substituted the obsolete xmlSchemaValidError(s) for xmlParserErrors
	  - see #150840. 
	  Changed the import of schemas to allow failure of location
	  of a resource to be imported.
	* result/schemas/all_* result/schemas/any3_0_0.err 
	  result/schemas/choice_* result/schemas/import1_0_0.err
	  result/schemas/list0_0_1.err result/schemas/list0_1_0.err
	  result/schemas/list0_1_1.err result/schemas/ns0_0_2.err
	  result/schemas/ns0_1_2.err: Adapted regression test results.

Tue Aug 24 20:49:15 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml, xmltutorial.pdf, *.html
	fix Xpath memory leak (thanks to sKaBoy and William Brack)

Tue Aug 24 21:10:59 CEST 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c: fixed path problem in DTD loading reported by 
	  Sameer Abhinkar

Tue Aug 24 16:40:51 CEST 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js: added support for version extra
	* win32/Makefile.*: upgraded to zlib 1.2.1

Mon Aug 23 14:33:54 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: removing -O -g from default gcc flags #150828

Sun Aug 22 16:26:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* NEWS: preparing 2.6.12 release, updated and
	  and rebuilt the docs.

Sun Aug 22 16:07:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fix a problem on last commit

Sun Aug 22 15:16:53 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xpath.c include/libxml/xpath.h 
	  include/libxml/xpathInternals.h python/libxml.c 
	  python/libxml_wrap.h: trying to remove some warning when compiling
	  on Fedora Core 3 and 64bits

Sat Aug 21 0:035:10 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: modified parsing of <list>, <union>, <restriction>,
	  <sequence>, <choice>, <include>, <import>.
	  Fixed schema defaults (elementFormDefault, etc.) for included
	  schemas.
	  Fixed a bug which reported attributes as invalid on
	  elements declarations with the built-in type 'anyType'.
	  Added "lax" validation of the content of elements of type
	  'anyType'.
	  Fixed: element declarations with the same name were treated
	  as duplicate if located in the subtree of <choice> -> <sequence>.
	  (This was bug 150623, submitted by Roland Lezuo)
	  Fixed cleanup of error codes in xmlSchemaValidateDoc as proposed
	  by Igor Kapitanker. (This was bug 150647, submitted by Igor
	  Kapitanker)
	* xmlschemastypes.c: Changed the type of anyType to
	  XML_SCHEMAS_ANYTYPE.
	* include/libxml/xmlerror.h: Added schema parser errors.
	* result/schemas/bug145246_0_0*
	  result/schemas/extension1_0_2.err: Changed test results.
	* result/schemas/ct-sc-nobase_0_0*
	  result/schemas/facet-whiteSpace_0_0*
	  result/schemas/import1_0_0* result/schemas/import2_0_0*
	  result/schemas/include2_0_0* result/schemas/include3_0_0*
	  result/schemas/restriction-attr1_0_0*
	  result/schemas/seq-dubl-elem1_0_0*
	  result/schemas/xsd-list-itemType_0_0*: Added new rest results.
	  test/schemas/bug145246.xsd.imp test/schemas/ct-sc-nobase_0*
	  test/schemas/facet-whiteSpace_0* test/schemas/import1_0*
	  test/schemas/import2_0* test/schemas/include2_0*
	  test/schemas/include3_0* test/schemas/restriction-attr1_0*
	  test/schemas/seq-dubl-elem1_0* test/schemas/xml.xsd
	  test/schemas/xsd-list-itemType_0*: Added new tests and missing
	  files.  	      

Fri Aug 20 18:51:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: a bit of cleanup and a extra variable for
	  CVS dist

Thu Aug 19 07:44:07 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.1, xmllint.html:
	Edit and rebuild the man pages with Daniel's C14 update

Wed Aug 18 19:15:27 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed missing line numbers on entity as reported
	  on the list by Steve Cheng

Wed Aug 18 14:04:31 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in globals.c include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: added some code to
	  include the CVS ChangeLog version in the xmlParserVersion
	  string (printed by xmllint with --version)

Wed Aug 18 11:14:06 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h python/generator.py
	  python/libxml.c python/libxml_wrap.h python/types.c
	  python/tests/schema.py python/tests/Makefile.am: Applied patch
	  from Torkel Lyng to add Schemas support to the Python bindings
	  and extend the schemas error API, registered a new test.
	* doc/* elfgcchack.h: rebuilt to regenerate the bindings

Mon Aug 16 14:36:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added help for new set shell command
	* xinclude.c xmllint.c xmlreader.c include/libxml/parser.h:
	  added parser option to not generate XInclude start/end nodes,
	  added a specific option to xmllint to test it fixes #130769
	* Makefile.am: regression test the new feature
	* doc/xmllint.1 doc/xmllint.xml: updated man page to document option.

Mon Aug 16 02:42:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: small typo pointed out by Mike Hommey
	* doc/xmllint.xml, xmllint.html, xmllint.1: slightly improved
	  the --c14n description, c.f. #144675 .
	* nanohttp.c nanoftp.c: applied a first simple patch from 
	  Mike Hommey for $no_proxy, c.f. #133470
	* parserInternals.c include/libxml/parserInternals.h
	  include/libxml/xmlerror.h: cleanup to avoid 'error' identifier 
	  in includes #137414
	* parser.c SAX2.c debugXML.c include/libxml/parser.h:
	  first version of the implementation of parsing within
	  the context of a node in the tree #142359, new function
	  xmlParseInNodeContext(), added support at the xmllint --shell
	  level as the "set" function
	* test/scripts/set* result/scripts/* Makefile.am: extended
	  the script based regression tests to instrument the new function.

Sat Aug 14 18:53:08 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.html, xmllint.1:
	add c14n to man page (man, it's hard to keep up with
	Daniel!)

Sat Aug 14 18:45:38 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.html, xmllint.1:
	add pattern, walker, maxmem, output and xmlout to man page
	fixes #144675

Sun Aug 15 00:41:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added a --c14n option to canonicalize the output
	  should close the RFE #143226

Sat Aug 14 23:50:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: Dodji pointed out a bug in xmlGetNodePath()
	* xmlcatalog.c: applied patch from Albert Chin to add a
	  --no-super-update option to xmlcatalog see #145461
	  and another patch also from Albert Chin to not crash 
	  on -sgml --del without args see #145462
	* Makefile.am: applied another patch from Albert Chin to
	  fix a problem with diff on Solaris #145511
	* xmlstring.c: fix xmlCheckUTF8() according to the suggestion
	  in bug #148115
	* python/libxml.py: apply fix from Marc-Antoine Parent about
	  the errors in libxml(2).py on the node wrapper #135547

Sat Aug 14 13:18:57 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: added a dumb rule to able to compile tst.c
	  when people submit a sample test program
	* xmlschemas.c: applied small patch from Eric Haszlakiewicz
	  to document xmlSchemasSetValidErrors() limitations, #141827
	* error.c: Add information in generic and structured error
	  setter functions that this need to be done per thread #144308
	* xmlsave.c: fixed bug with missing NOTATION(s) serialization
	  bug #144162
	* doc/xmllint.xml: typo fix #144840

Tue Aug 10 07:19:31 PDT 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in xmlregexp.c xmlschemas.c xmlschemastypes.c
	  include/libxml/schemasInternals.h include/libxml/xmlerror.h
	  include/libxml/xmlschemastypes.h: applied Schemas patches
	  from Kasimier Buchcik
	* test/ result/ bug141333* annot-err* any[1-4]* bug145246*
	  element-err* element-minmax-err* include1* restrict-CT-attr-ref*:
	  lot of new tests for things fixed by the patch

Fri Aug  6 09:22:34 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: fixed my mis-handling of External ID on last
	  change.

Wed Aug  4 23:40:21 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: changed the parsing of a document's DTD to use
	  the proper base path (bug 144366)

Wed Aug  4 16:58:08 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am config.h.in configure.in python/Makefile.am:
	  applied a patch from Gerrit P. Haase to get python bindings
	  on Cygwin

Tue Aug  3 15:08:22 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* include/libxml/valid.h: elaborated on description of
	  xmlValidityWarningFunc and xmlValidityErrorFunc (bug
	  144760)
	* xmlIO.c, xmlschemastypes.c, include/libxml/schemasinternals.h:
	  minor fixes to comments for doc rebuilding errors.
	* doc/*.html: rebuilt the docs

Tue Aug  3 23:59:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/ChangeLog.xsl doc/downloads.html doc/xml.html doc/*:
	  fixes documentation glitches raised by Oliver Stoeneberg

Tue Aug  3 09:42:31 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: fixed problem with memory leak on text nodes in DTD
	  (bug 148965) with patch provided by Darrell Kindred

Tue Aug  3 08:14:44 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: fixed initialisation problem for htmlReadMemory
	  (bug 149041)

Sat Jul 31 11:01:33 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/buildDocBookCatalog: enhanced per bug 119876.  Further
	  info posted to the mailing list.

Sat Jul 31 09:12:44 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, encoding.c, error.c, parser.c, tree.c, uri.c, xmlIO.c,
	  xmlreader.c, include/libxml/tree.h: many further little changes
	  for OOM problems.  Now seems to be getting closer to "ok".
	* testOOM.c: added code to intercept more errors, found more
	  problems with library. Changed method of flagging / counting
	  errors intercepted.

Fri Jul 30 13:57:55 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied a couple of patch one from Oliver Stoeneberg
	  and another one from Rob Richards fixing #148448

Thu Jul 29 13:20:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: 1 line patch, apparently htmlNewDoc() was not
	  setting doc->charset.

Thu Jul 29 00:05:58 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, tree.c, uri.c, xmlIO.c, xmlreader.c: further
	  fixes for out of memory condition, mostly from Olivier
	  Andrieu.
	* testOOM.c: some further improvement by Olivier, with
	  a further small enhancement for easier debugging.

Tue Jul 27 00:34:07 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, error.c, parser.c, tree.c, xmlreader.c:
	  implemented patches supplied by Olivier Andrieu 
	  (bug 148588), plus made some further enhancements, to
	  correct some problems with out of memory conditions.
	* testOOM.c: improved with patches from Olivier Andrieu

Mon Jul 26 11:03:18 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: put in patch for Windows buffer re-allocation
	  submitted by Steve Hay (bug 146697)

Sun Jul 25 17:18:39 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: added some code to check, when an include is
	  done, whether the requested URL gets mapped to some other
	  location (e.g. with a catalog entry) and, if so, take care
	  of the xml:base properly (bug 146988)

Sun Jul 25 14:02:24 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* error.c: fixed to assure user data param is set correctly
	  when user structured error handler is called (bug 144823)

Thu Jul 22 10:14:48 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlreader.c: fixed problem with reader state after
	  processing attributes (bug 147993)

Wed Jul 21 17:04:27 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in, Makefile.am: put in an auto* check for the
	  path to perl (if it exists), and modified make Timingtests
	  to use that path instead of just executing the dbgenattr.pl
	  script (bug 148056)

Fri Jul 16 18:36:33 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: added a check on the argument for some
	  classes (e.g. xmlDoc and xmlNode) to prevent a segfault (as
	  reported on the list).  Further enhancement should be done
	  to auto-create the appropriate object.
	* python/libxml.c: minor fix for a warning message; added a
	  routine, currently not used, to report the description of a
	  PyCObject.
	* python/libxml2class.txt: regenerated

Fri Jul 16 11:01:40 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c test/catalogs/white* result/catalogs/white*:
	  applied patches from Peter Breitenlohner to fix handling
	  of white space normalization in public ids and add tests

Tue Jul 13 17:24:13 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: applied a small fix from Steve Hay

Tue Jul 13 23:02:19 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: Added code to in PREDICATE/FILTER handling to reset
	  the xpath context document pointer (part of fix to libxslt
	  bug 147445)

Tue Jul 13 00:14:08 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/libxml.py: ran 'expand' on the file to get rid of mixture
	  of tabs and spaces (bug 147424)

Sun Jul 11 22:38:29 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/drv_libxml.py: added an encoding "special comment" to avoid
	  warning message in python2.3 (bug 146889)
	* Makefile.am, python/Makefile.am, python/tests/Makefile.am: small
	  change to make "make tests" a little quieter (MAKEFLAGS+=--silent)
	* xpath.c: enhanced to take advantage of current libxslt handling
	  of tmpRVT.  Fixes bug 145547.

Fri Jul  9 14:02:54 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.h uri.c: fixed a couple of problems in the new
	  elfgcchack.h trick pointed by Peter Breitenlohner

Wed Jul  7 00:45:48 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h doc/apibuild.py doc/libxml2-api.xml: fixed a bug
	  which prevented building with --with-minimum

Mon Jul  5 19:43:51 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: releasing 2.6.11, updated and regenerated the
	  docs

Mon Jul  5 18:43:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: make the push interfaces synchronous
	* python/tests/sync.py: added a specific test
	* python/tests/Makefile.am doc/examples/Makefile.am
	  doc/examples/index.py: added the new test, cleaning up 
	  "make tests" output

Mon Jul  5 15:09:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Kasimier to fix some Relax-NG
	  datatype facet problem with recent changes.

Sat Jul  3 11:31:02 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/libxml.c: Changed the number of XPath extension functions
	  allowed to be variable-length (patch supplied by Marc-Antoine
	  Parent, bug 143805).  Added code to "unregister" the functions
	  when the parser cleanup takes place.

Fri Jul  2 14:22:14 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c python/libxml.c python/libxml2-python-api.xml:
	  some updates with memory debugging facilities while messing
	  with libxslt python bindings

Thu Jul  1 14:53:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/generator.py python/libxml.py
	  python/libxml2-python-api.xml python/libxml2class.txt:
	  applied patch from Stéphane Bidoul to fix some Python bindings
	  initialization, then had to change the parserCleanup() 
	  to handle memory released there.
	* xmlmemory.c: added more debugging comments.

Thu Jul  1 13:18:02 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: seems the reader buffer could be used while not
	  allocated, fixes bug #145218

Thu Jul  1 11:34:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: do not provide functions used as destructor
	  of classes as public methods to avoid double-free problem like
	  in bug #145185

Wed Jun 30 19:45:23 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c, xmlschemastypes.c: warning message cleanup.
	  Now compiles warning-free, all tests passed.
	* SAX2.c: small change to comments for documentation.
	  No change to logic.

Tue Jun 29 15:00:13 PDT 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more fixes with Kasimier, looks far cleaner :-)

Tue Jun 29 23:00:05 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: Kasimier Buchcik fixed the memory access and
	  allocation problem

Tue Jun 29 19:00:32 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h
	  include/libxml/schemasInternals.h include/libxml/xmlschemastypes.h:
	  applied Schemas patches from Kasimier Buchcik, there is still
	  one open issue about referencing freed memory.
	* test/schemas/* result/schemas/*: updated with new tests from 
	  Kasimier

Tue Jun 29 14:52:18 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h include/libxml/xmlIO.h
	  doc/libxml2-api.xml doc/libxml2-refs.xml: moved some definitions
	  to globals.h to avoid some troubles pointed out by Rob Richards

Mon Jun 28 11:25:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: applied changes suggested by Mike Hommey, remove
	  libxml1 support and use CPPFLAGS instead of CFLAGS

Sun Jun 27 14:17:15 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: another, more 'experimental' feature to 
	  get compiler optimization based on gcc runtime profiling

Sun Jun 27 14:02:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h doc/elfgcchack.xsl libxml.h: hack based on Arjan van de
	  Ven suggestion to reduce ELF footprint and generated code. Based on
	  aliasing of libraries function to generate direct call instead of
	  indirect ones
	* doc/libxml2-api.xml doc/Makefile.am doc/apibuild.py: added automatic
	  generation of elfgcchack.h based on the API description, extended
	  the API description to show the conditionals configuration flags
	  required for symbols.
	* nanohttp.c parser.c xmlsave.c include/libxml/*.h: lot of cleanup
	* doc/*: regenerated the docs.

Sun Jun 27 10:02:28 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* regressions.py, regressions.xml: new files for running
	  regression tests under Python.  Not yet complete, but
	  should provide good testing under both Linux and Windows.
	* testHTML.c, testSAX.c, xmllint.c: changed the 'fopen' used
	  for --push testing to include the 'rb' param when compiled
	  under Windows.

Fri Jun 25 13:38:57 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed a problem when base path was "./xxx"
	* result/XInclude/*: 5 test results changed by above.
	* Makefile.am: fixed a couple of spots where a new
	  result file used different flags that the testing one.

Thu Jun 24 16:27:44 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: suppressed warnings from within xmlValidGetValidElements
	  (bug 144644)
	* doc/examples/testWriter.c: corrected typo in comment for ISO-8859-1
	  (bug 144245)

Thu Jun 24 10:17:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: implemented bugfix from Massimo Morara for DTD
	  dumping problem.
	* test/valid/t10.xml, result/valid/t10.*: added regression
	  for above
	* configure.in: small change for my profile settings

Wed Jun 23 20:18:19 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog.1
	Docs patch from Ville Skytta, bugzilla #144841

Sat Jun 19 18:34:11 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.html, xmllint.1
	update man page to reflect William's newly disciplined return
	code mojo

Thu Jun 17 00:51:55 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/io2.c doc/examples/parse4.c: fixing a couple of
	  compilation errors when configured with --with-minimum

Wed Jun 16 16:07:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: applied patch from Stefano Debenedetti to register
	  namespaces in the debug shell

Mon Jun 14 21:56:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fix from Steve Ball and update of the comment.
	* Makefile.am result/errors/*.str: William pointed out that 
	  the streaming error checking part wasn't streaming, fixing

Mon Jun 14 14:11:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: patch from Igor for the default catalog path on Windows

Sat Jun 12 09:03:57 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in: apparently wasn't updated last time

Thu Jun 10 20:57:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in, xmlmemory.c, globals.c: fixed problem when
	  configuring using --with-thread-alloc

Wed Jun  9 16:31:24 CEST 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js win32/Makefile.* minor changes for the new
	  layout of the Windows binary package

Tue Jun  8 19:50:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlerror.h: applied another patch
	  from Kasimier Buchcik for Schema Component Constraints
	* test/schemas/* result/schemas/*: added the regression tests

Tue Jun  8 21:27:03 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmllint.c: fixed missing error return code for schema
	  validation (bug 143880), also changed over to an enum for
	  defining the error return codes for all conditions.

Tue Jun  8 14:01:14 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlreader.c include/libxml/parser.h: fixed a serious
	  problem when substituting entities using the Reader, the entities
	  content might be freed and if rereferenced would crash
	* Makefile.am test/* result/*: added a new test case and a new
	  test operation for the reader with substitution of entities.

Tue Jun  8 12:14:16 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlIO.c include/libxml/globals.h include/libxml/xmlIO.h:
	  applied patch from Rob Richards for the per thread I/O mappings

Tue Jun  8 09:58:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: some further enhancement to take care of
	  xml:base for XPointer elements (bug 143886).  Also fixed
	  a problem when xml:base was already specified on an
	  XInclude'd element.

Mon Jun  7 22:14:58 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: fixed a problem with internal cleanup of <DIV> element
	  (bug 143738).

Mon Jun  7 16:57:43 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* uri.c, include/libxml/uri.h: added a new routine
	  xmlBuildRelativeURI needed for enhancement of xinclude.c
	* xinclude.c: changed handling of xml:base (bug 135864)
	* result/XInclude/*: results of 5 tests changed as a result
	  of the above change

Fri Jun  4 11:27:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* test/schemas/* result/schemas/*: added a bunch of tests from
	  Kasimier Buchcik posted on May 11

Thu Jun  3 17:58:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: new patch from  Kasimier Buchcik for processContents
	  of wildcards attribute handling
	* test/schemas/anyAttr-* result/schemas/anyAttr-*: added specific
	  regression tests

Thu Jun  3 13:20:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug where invalid charrefs may not be detected
	  sometimes as pointed by Morus Walter.
	* test/errors/charref1.xm result/errors/charref1.xml*: added the
	  test in the regression suite.

Thu Jun  3 18:38:27 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: small change to xmlSchemaValidateAttributes,
	  also corrected typo on error code enum.
	* include/libxml/xmlerror.h: corrected typo on schema error
	  code enum

Thu Jun  3 10:12:38 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: minor cosmetic changes, no change to logic.
	* result/schemas/attruse_0_[12].err: regenerated
	* globals.c: added a newline at end to make gcc happy

Wed Jun  2 21:16:26 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/schemasInternals.h 
	  include/libxml/xmlerror.h: applied a patch from Kasimier Buchcik
	  implementing attribute uses and wildcards.
	* test/schemas/* result/schemas/*: added/fixed a bunch of tests

Wed Jun  2 18:15:51 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlIO.c include/libxml/globals.h: applied patch from 
	  Rob Richards for custom I/O BufferCreateFilenane fixes bug
	  #143366

Wed Jun 02 16:25:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with predicate evaluation on an
	  empty nodeset (bug 143409)

Wed Jun 02 11:26:41 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* testSAX.c: fixed problem with attribute listing (bug 142674)
	  and added macro LIBXML_TEST_VERSION to assure xmlInitParser
	  gets called (bug 142686)

Sat May 29 21:35:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* test/schemas/date_0.xml xmlschemastypes.c: applied a patch from
	  Charles Bozeman fixing a side effect in date handling

Thu May 27 19:47:48 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml fix lack of cast in Xpath example
	* doc/tutorial/*.html, xmltutorial.pdf rebuild html, pdf

2004-05-25  Aleksey Sanin <aleksey@aleksey.com>

	* c14n.c: fixed c14n bug with serializing attribute namespaces

Mon May 24 08:22:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed to allow '+' in exponent of number
	  (bug 143005)
	* SAX2.c: fixed typo in last commit

Sat May 22 09:08:24 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c: skipped call to xmlValidateNCName when compiling
	  --with-minimum (bug 142917)

Tue May 18 06:48:00 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: reverted the broken change.

Mon May 17 23:07:15 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*: updated the docs for 2.6.10

Mon May 17 05:52:03 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in : releasing 2.6.10

Sun May 16 23:12:35 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: avoid returning default namespace when searching
	  from an attribute
	* entities.c xmlwriter.c: reverse xmlEncodeSpecialChars() behaviour
	  back to escaping " since the normal serialization routines do not
	  use it anymore, should close bug #134477 . Tried to make 
	  the writer avoid it too but it didn't work.

Sun May 16 01:07:16 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/ChangeLog.awk doc/ChangeLog.xsl: fixed escaping
	  handling and added direct links to bugzilla report for
	  bug numbers.

Sun May 16 11:11:13 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* error.c: modified to assure proper user data is sent to
	  structured error routine (bug 142598)

Sun May 16 03:18:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: a couple of large static variable which should really
	  not be declared as such cluttered the .bss section.

Sun May 16 03:06:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/ChangeLog.awk: fixed a couple of problems when parsing
	  libxslt ChangeLog

Sat May 15 20:14:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/ChangeLog.awk doc/ChangeLog.xsl: first steps of a good
	  ChangeLog page generation. The awk should escape characters
	  not okay in XML and the xslt should make links to functions
	  or variables or bug reported in the entries.

Sat May 15 14:57:40 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c include/libxml/xmlsave.h: start adding API for 
	  escaping customization.

Sat May 15 12:38:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: more xmlSave cleanup, optimization and refactoring

Fri May 14 17:51:48 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmlsave.c: third pass at the escaping refactoring.

Fri May 14 12:37:24 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: enhanced the enhancement, fixed another couple of
	  special cases.

Fri May 14 11:48:33 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: small enhancement to dtd handling of (a?)+ (bug 142487)

Thu May 13 23:19:00 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmlsave.c include/libxml/xmlIO.h: second pass on escaping
	  handling, start to looks better, need to be completed and added
	  directly at the saving context level.

Thu May 13 10:31:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmlsave.c include/libxml/xmlIO.h: first pass at refactoring
	  the escape on save routines for better performances (less malloc)
	  and more flexibility using the new saving context. Preliminary
	  work, interface will change.

Wed May 12 22:34:03 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: added code in xmlSchemaBuildAContentModel to handle
	  element reference within the xs:all construct (bug 139897)

Wed May 12 17:27:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: a little further fixing of fallback processing, this
	  time for fallback with children (bug 139520).

Wed May 12 08:21:33 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: added code in xmlSchemaBuildContentModel to
	  allow ref in group definition (bug 134411).  Also fixed
	  misc compilation warning messages.
	* result/schema/group0_0_0, result/schema/group0_0_0.err:
	  regenerated (now no error reported).

Tue May 11 11:55:59 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix to the fix for #141864 from Paul Elseth  
	* HTMLparser.c result/HTML/doc3.htm: apply fix from David Gatwood for
	  #141195 about text between comments.

Tue May 11 23:04:47 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c, include/libxml/schemasInternals.h,
	  include/libxml/xmlerror.h: Applied patches supplied by
	  Kasimier Buchcik.
	* test/schemas/po1_0.xml, test/schemas/po1_0.xsd:
	  changed test to account for above patch.

Tue May 11 09:06:53 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/tests/tstLastError.py: better portability fix for f(*args),
	  use apply(f, args) as Stéphane Bidoul suggested

Mon May 10 15:49:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced xmlRegStateAddTrans to check if transition
	  is already present and, if so, to ignore the request to add it.
	  This has a very dramatic effect on memory requirements as well
	  as efficiency.  It also fixes bug 141762.

Sun May  9 20:40:59 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am python/tests/Makefile.am python/tests/tstLastError.py:
	  applied patch from Ed Davis to allow "make tests" to work
	  with Python 1.5

Sun May  9 19:46:13 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: apply fix for XHTML1 formatting from Nick Wellnhofer
	  fixes bug #141266
	* test/xhtmlcomp result//xhtmlcomp*: added the specific regression
	  test

Sun May  9 14:07:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: fix for a pedantic make check without make all request

Sat May  8 22:56:22 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* uri.c xmlIO.c: fixing some problems in URI unescaping
	  and output buffer opening, this should fix #141864

Fri May  7 22:31:54 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/valid.h: fixes the use of 'list' as a parameter
	* xmlIO.c include/libxml/xmlIO.h: added xmlPopInputCallback for
	  Matt Sergeant

Thu May  6 21:14:38 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced the handling of subexpression ranges
	  which have a minOccurs of 0 (bug 140478 again); cleaned up
	  comments throughout the module.

Tue May  4 00:52:16 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: adding a --maxmem option to check memory used.

Sat May  1 01:08:44 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlsave.c python/generator.py python/libxml.c: Fixed
	  bug #141529 i.e. various problems when building with --without-html

Fri Apr 30 18:12:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlreader.c: fixing bug #141384 where the reader didn't
	  call the deregistering functions. Also added the check to
	  xmllint --stream --chkregister .

Fri Apr 30 08:57:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.msvc: applied a second patch from Mark Vakoc for
	  regression tests on Windows

Thu Apr 29 21:47:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: never commit without running make tests first !

Thu Apr 29 20:15:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fix a nasty problem with reading over the end
	* xmlsave.c: fix a reported memory leak apparently

Thu Apr 29 17:05:00 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.msvc: patch from Mark Vakoc for regression tests
	  on Windows.
	* xpath.c: the NaN problem also shows up on Borland

Mon Apr 26 23:37:12 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced xmlFARegExec range evaluation for min
	  occurs 0 problems - fixes bug 140478.

Thu Apr 22 09:12:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* rngparser.c: tiny path fixes the "xmlConvertCRNGFile" function name
	  from Kasimier Buchcik
	* xmlschemas.c: recursive xs:extension fix from taihei goi

Wed Apr 21 00:19:29 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: small buffer resizing improvement from Morten Welinder
	  closes #140629

Tue Apr 20 23:40:14 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: last version of the fix for MSC version 1200

Tue Apr 20 19:40:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: killing the strncmp vs. memcmp controversy and #140593

Tue Apr 20 13:27:06 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/SAX2.h: Kasimier Buchcik pointed out some 
	  inexistent functions, cleaned them out.

Tue Apr 20 11:42:50 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* error.c: Johnson Cameron pointed out that
	  initGenericErrorDefaultFunc() was really wrong.
	* xmlreader.c include/libxml/xmlreader.h: xmlTextReaderMode enum
	  must be made public, added some missing comments on the XMLReader
	  header.
	* c14n.c: Alexsey fixed C14N bug with processing namespaces
	  from attributes

Mon Apr 19 23:27:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a stupid () error + Mark name.

Sun Apr 18 23:45:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.6.9 release
	* doc/* News: updated and rebuilt the docs

Sun Apr 18 22:51:43 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: relaxed id() to not check that the name(s) passed
	  are actually NCName, decided this in agreement with Aleksey Sanin
	  since existing specs like Visa3D broke that conformance checking
	  and other tools seems to not implement it sigh...
	* SAX2.c: check attribute decls for xml:id and the value is an
	  NCName.
	* test/xmlid/id_err* result/xmlid/id_err*: added error testing

Sun Apr 18 21:46:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: work around Microsoft compiler NaN bug raise reported
	  by Mark Vakoc
	* xmlschemas.c include/libxml/schemasInternals.h 
	  include/libxml/xmlerror.h: fixed a recursive extension schemas
	  compilation error raised by taihei goi

Sun Apr 18 16:57:02 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: keep the ChangeLog compressed 
	* xmlreader.c: fix a segfault when using Close()
	* python/tests/Makefile.am python/tests/reader8.py: test for
	  the Close() reader API.

Sat Apr 17 22:42:13 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c, xmlwriter.c, doc/examples/parse4.c,
	  doc/examples/io2.c: minor warning cleanup (no change to logic)
	* xinclude: fixed return value for internal function
	  xmlXIncludeLoadFallback (now always 0 or -1)

Sat Apr 17 21:32:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: small enhancement to fix bug 139791

Fri Apr 16 18:44:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: applied patches from Kasimier Buchcik
	  for the attribute use support
	* test/schemas/attruse* result/schemas/attruse*: added the
	  tests to the regression suite.

Fri Apr 16 18:22:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: move the TODO as comments as the function while not
	  finished are usable as-is
	* xmlschemas.c include/libxml/xmlerror.h: patch from Kasimier Buchcik
	  implementing union
	* test/schemas/union_0_0.x* result/schemas/union_0_0*: added example
	* python/Makefile.am: applied fix from Mike Hommey

Fri Apr 16 23:58:42 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem with detecting external dtd
	  encoding (bug 135229).
	* Makefile.am: minor change to test label

Fri Apr 16 16:09:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem causing duplicate fallback
	  execution (bug 139520)
	* test/XInclude/docs/fallback2.xml result/XInclude/fallback2.*:
	  added testcase

Fri Apr  9 23:49:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* SAX2.c include/libxml/tree.h: adding xml:id draft support
	* Makefile.am test/xmlid/id_tst* result/xmlid/id_tst*: adding
	  4 first regression tests

Fri Apr  9 11:56:08 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixing Red Hat bug #120482 , libxml2-python
	  should depend on the version of python used to compile it.

Mon Apr  5 09:07:24 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from James Bursa, frameset should
	  close head.

Fri Apr  2 22:02:24 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: fixed problem in xmlRelaxNGCompareNameClasses
	  which was causing check-relaxng-test-suite.py test 351 to fail.

Fri Apr  2 17:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: implemented fix for M$ IIS redirect provided
	  by Ian Hummel
	* relaxng.c: fixed problem with notAllowed compilation
	  (bug 138793)

Thu Apr  1 22:07:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* uri.c: fix for xmlUriEscape on "http://user@somewhere.com"
	  from Mark Vakoc.

2004-04-01  Johan Dahlin  <johan@gnome.org>

	* python/.cvsignore: Add generated files, to make cvs silent.

Thu Apr  1 12:41:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: small signed-ness patch from Steve Little

Wed Mar 31 17:47:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: patched a bug in parsing production 1 and 2 of
	  xmlschemas regexp that William pointed out while working on
	  #134120
	* test/regexp/branch result/regexp/branch: added a specific
	  regression test

Wed Mar 31 09:50:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* Makefile.am: added PYTHONPATH to python tests for Schemas
	  and RelaxNG
	* test/xsdtest/xsdtestsuite.xml: added testfile for
	  SchemasPythonTests

Mon Mar 29 16:56:49 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/examples.xsl doc/examples/index.html: added
	  information about compiling on Unix

Mon Mar 29 14:18:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixes the comments for xmlCatalogDump and xmlDumpACatalog
	* doc/*: rebuilt to update

Sun Mar 28 18:11:41 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: optimize indentation based on the new context

Sun Mar 28 14:17:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/xpath2.c doc/examples/xpath2.res: handle and explain
	  a very tricky problem when modifying the tree based on an XPath
	  result query.

Sat Mar 27 09:56:14 PST 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: fixed problem with IS_COMPILABLE flag
	  (bug 130216)

Fri Mar 26 18:28:32 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Dave Beckett to correct line number
	  errors when using push with CDATA

Fri Mar 26 14:53:58 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/xpath1.c: added a test template
	* doc/examples/xpath2.c doc/examples/xpath2.res doc/examples/*:
	  added a new example, and make valgrind target 

Fri Mar 26 11:47:29 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: apply fix for #136693

Thu Mar 25 20:21:01 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/io2.c
	* doc/examples/io2.res
	add xmlDocDumpMemory example in response to mailing list FAQ
	(rebuilt xml and html also)

Thu Mar 25 10:33:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c testXPath.c xmllint.c xmlschemastypes.c: applied
	  patch from Mark Vakoc avoiding using xmlParse* option and use
	  xmlRead* instead
	* win32/Makefile.bcb: patch to Borland C++ builder from Eric Zurcher
	  to avoid problems with some pathnames.

Tue Mar 23 12:35:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* News: preparing 2.6.8 release, updated and rebuilt
	  the docs.
	* Makefile.am: use valgring for the new Python based regression tests

Mon Mar 22 20:07:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: remove a memory leak on schemas type facets.
	* check-relaxng-test-suite.py check-relaxng-test-suite2.py
	  check-xsddata-test-suite.py: reduce verbosity
	* configure.in Makefile.am: incorporated the Python regressions
	  tests for Relax-NG and Schemas Datatype to "make tests"

Mon Mar 22 16:16:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h doc/* : applied patch from
	  Alfred Mickautsch for better DTD support.
	* SAX2.c HTMLparser.c parser.c xinclude.c xmllint.c xmlreader.c
	  xmlschemas.c: fixed bug #137867 i.e. fixed properly the way
	  reference counting is handled in the XML parser which had the
	  side effect of removing a lot of hazardous cruft added to try
	  to fix the problems associated as they popped up.
	* xmlIO.c: FILE * close fixup for stderr/stdout

Sun Mar 21 19:19:41 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: added an error message when an element is not
	  found within a <choice> (bug 126093)

Sat Mar 20 22:25:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced the logic of parsing char groups to
	  better handle initial or ending '-' (bug 135972)

Sat Mar 20 19:26:03 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: added check for external reference in 
	  xmlRelaxNGGetElements (bug 137718)
	* test/relaxng/rngbug-001.*, result/relaxng/rngbug-001*: added
	  regression test for above

Wed Mar 17 16:37:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: added a close for the local file descriptor
	  (bug 137474)

Mon Mar 15 15:46:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: switched the output routines to use the new context.

Mon Mar 15 10:37:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: enhanced to ignore XML_XINCLUDE_START and XML_XINCLUDE_END
	  nodes (bug 137153)

Sun Mar 14 13:19:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied patch from John Belmonte for anyURI.

Wed Mar 10 17:22:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix bug reported by Holger Rauch
	* test/att8 result/noent/att8 result/att8 result/att8.rdr
	  result/att8.sax: added the test to th regression suite

Wed Mar 10 19:42:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/search.php: Minor change for later version of php requiring
	  $HTTP_GET_VARS.

Wed Mar 10 00:12:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: Changed the flag to xmlDocCopyNode (and similar routines),
	  previously used only for recursion, to use a value of '2' to
	  indicate copy properties & namespaces, but not children.
	* xinclude.c: changed the handling of ranges to use the above new
	  facility.  Fixes Bug 134268.

Tue Mar  9 18:48:51 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* win32/Makefile.bcb, win32/Makefile.mingw, win32/Makefile.msvc:
	  added new module xmlsave with patch supplied by Eric Zurcher
	  (second attempt - don't know what happened to the first one!)

Tue Mar  9 09:59:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: applied patch from Anthony Carrico
	  providing Python bindings for the Canonicalization C14N support.

Mon Mar  8 11:12:23 CET 2004 Hagen Moebius <hagen.moebius@starschiffchen.de>

	* .cvsignore and python/.cvsignore patched

Mon Mar  8 22:33:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: enhanced to assure that if xpointer is called
	  for a document, the XML_PARSE_NOENT flag is set before parsing
	  the included document so that entities will automatically get
	  taken care of.
	* xpointer.c: corrected code so that, if an XML_ENTITY_REF node
	  is encountered, it will log it and not crash (bug 135713)

Sun Mar  7 19:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: modified to make sub-includes inherit the
	  parse flags from the parent document (bug 132597)

Fri Mar  5 01:13:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: QName handling fixes for the XML Schemas
	  support from Adam Dickmeiss
	* test/schemas/po1_0.xsd: also fix the schemas
	* test/schemas/ns[12]* result/schemas/ns[12]*: added the specific
	  regression tests

Thu Mar  4 23:03:02 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/Makefile.am include/libxml/Makefile.am:
	  paalied patch from Julio M. Merino Vidal fixing bug #134751
	  to fix --with-html-dir option.
	* doc/*: rebuilt fully the docs 
	* doc/html/libxml-xmlsave.html: new file from new header.

Thu Mar  4 16:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c testHTML.c tree.c doc/examples/*.c
	  include/libxml/xmlsave.h: fixing compilation bug with some options
	  disabled as well as --with-minimum should fix #134695

Thu Mar  4 15:00:45 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: allow fallback to URI lookup when SYSTEM fails,
	  should close #134092

Thu Mar  4 14:39:38 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am tree.c xmlsave.c include/libxml/xmlsave.h: committing
	  the new xmlsave module before the actual big code change.

Thu Mar  4 12:38:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Adam Dickmeiss for mixed content
	* test/schemas/mixed* result/schemas/mixed*: added his regression
	  tests too.

Mon Mar  1 15:22:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: fix a compilation problem about a missing timb include

Sat Feb 28 22:35:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* testSAX.c: small enhancement to prevent trying to print
	  strings with null pointers (caused "make tests" errors on
	  HP-UX)

Thu Feb 26 20:19:40 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	* doc/xmllint.html
	* doc/xmlcatalog_man.xml
	* doc/xmlcatalog.1
	* doc/xmlcatalog_man.html
	applying patch from Mike Hommey to clarify XML_CATALOG_FILES
	use

Thu Feb 26 23:47:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: patch for cross-compilation to Windows from
	  Christophe de VIENNE.

Thu Feb 26 18:52:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/*.html, doc/html/*.html: regenerated docs using older
	  version of xsltproc pending resolution of AVT problem

Thu Feb 26 10:56:29 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: applied patch from Charles Bozeman to not use
	  the system xmllint.

Wed Feb 25 18:07:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlexports.h: applied patch from Roland Schwingel
	  for MingW

Wed Feb 25 13:57:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am catalog.c configure.in: applied a cleanup patch
	  from Peter Breitenlohner
	* tree.c: removed a doc build warning by fixing a param comment
	* doc/* : rebuilt the docs

Wed Feb 25 13:33:07 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c HTMLparser.c: avoid ID error message if using
	  HTML_PARSE_NOERROR should fix #130762

Wed Feb 25 12:50:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c relaxng.c valid.c xinclude.c xmllint.c xmlreader.c:
	  fixing compilation and link option when configuring with
	  --without-valid should fix #135309

Wed Feb 25 11:36:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed the main issues reported by Peter Breitenlohner
	* parser.c: cleanup
	* valid.c: speedup patch from Petr Pajas

Wed Feb 25 16:07:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed a memory leak (xmlXPathLangFunction) reported
	  on the list by Mike Hommey

Mon Feb 23 17:28:34 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/* NEWS configure.in: preparing 2.6.7 release, updated and
	  rebuilt the documentation.

Mon Feb 23 11:52:12 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/tests/*.py: applied patch from Malcolm Tredinnick
	  to avoid tabs in python sources, should fix #135095

Sun Feb 22 23:16:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: add --timing option
	* relaxng.c: use the psvi field of the nodes instead of _private
	  which may be used for other purposes.

Sat Feb 21 16:57:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: small patch to try to fix a warning with Sun One compiler

Sat Feb 21 16:22:35 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: small patch removing a warning with MS compiler.

Sat Feb 21 13:52:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added "relaxng" option to the debugging shell
	* Makefile.am test/errors/* result/errors/*: some regression tests
	  for some error tests cases.

Fri Feb 20 09:56:47 CET 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: xmlAttrSerializeTxtContent don't segfault if NULL
	  is passed.
	* test/att7 result//att7*: adding an old regression test
	  laying around on my laptop

Thu Feb 19 17:33:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed xmllint --memory --stream memory consumption
	  on large file by using xmlParserInputBufferCreateStatic() with
	  the mmap'ed file 

Thu Feb 19 13:56:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: some clarification in xmlDocDumpMemory() documentation
	* xmllint.c: fixed xmllint --stream --timing to get timings back

Wed Feb 18 15:20:42 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a problem in push mode when attribute contains
	  unescaped '>' characters, fixes bug #134566
	* test/att6 result//att6*: added the test to the regression suite

Tue Feb 17 17:26:31 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c: removing a non-linear behaviour from ID/IDREF raised
	  by Petr Pajas. Call xmlListAppend instead of xmlListInsert in
	  xmlAddRef

Tue Feb 17 13:27:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/tests/indexes.py python/tests/reader.py: indicated
	  encoding of the test file, needed for python 2.3

Tue Feb 17 21:08:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with numbers having > 19
	  fractional places (bug 133921)

Tue Feb 17 12:47:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied optimization patch from Petr Pajas

Tue Feb 17 12:39:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h: applied update
	  from Alfred Mickautsch and the added patch from Lucas Brasilino

Sun Feb 15 12:01:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* benchmark.png index.html xml.html: updating the benchmark
	  graph and using a PNG instead of a GIF
	* xmlreader.c: updated the TODO

Sat Feb 14 18:55:40 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/xmltutorial.pdf
	* doc/tutorial/*.html
	Fix bug in XPath example in the tutorial, thanks to Carlos, whose
	last name I don't know, for pointing this out

Thu Feb 12 16:28:12 CET 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in: preparing release of 2.6.6
	* doc/*: updated the docs and rebuilt them

Thu Feb 12 13:41:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing bug #132930 with the provided patch, a bit
	  suspicious about it but this is fairly contained and regression
	  tests still passes.
	* test/schemas/all1* result/schemas/all1*: added the test to
	  the regression suite.

Thu Feb 12 12:54:26 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #132575 about finding the end of the
	  internal subset in push mode.
	* test/intsubset.xml result/intsubset.xml* result/noent/intsubset.xml:
	  added the test to the regression suite

Wed Feb 11 14:19:31 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c xmlIO.c encoding.c include/libxml/parser.h
	  include/libxml/xmlIO.h: added xmlByteConsumed() interface
	* doc/*: updated the benchmark rebuilt the docs
	* python/tests/Makefile.am python/tests/indexes.py: added a
	  specific regression test for xmlByteConsumed()
	* include/libxml/encoding.h rngparser.c tree.c: small cleanups

Wed Feb 11 08:13:58 HKT 2004 William Brack <wbrack@mmm.com.hk

	* tree.c: fixed missing output of internal DTD param entities when
	  nothing else present in DTD (bug 134052)

Tue Feb 10 19:24:38 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* encoding.c: applied patch supplied by Christophe Dubach
	  to fix problem with --with-minimum configuration
	  (bug 133773)
	* nanoftp.c: fixed potential buffer overflow problem,
	  similar to fix just applied to nanohttp.c.

Mon Feb  9 18:40:21 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* nanohttp.c: fixed the fix for the buffer overflow, thanx
	  William :-)

Mon Feb  9 22:37:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* acinclude.m4, configure.in: fixed problem concerning
	  determining SOCKLEN_T as pointed out by Daniel Richard G.
	  on the mailing list

Mon Feb  9 15:31:24 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* nanohttp.c: fixed buffer overflow reported by Yuuichi Teranishi

Mon Feb  9 13:45:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: small patch from Philip Ludlam to avoid warnings.

Mon Feb  9 13:41:47 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applied a small patch from Alfred Mickautsch
	  to avoid an out of bound error in isolat1ToUTF8()

Mon Feb  9 13:35:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: remove the warning on the 2001 namespace
	* parser.c parserInternals.c xpath.c: remove some warnings
	  when compiling with MSVC6
	* nanohttp.c: applied a patch when using _WINSOCKAPI_

Sun Feb  8 12:09:55 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: added a small hack to fix interference between
	  my fixes for bugs 132585 and 132588.
	* python/libxml.c: fixed problem with serialization of namespace
	  reported on the mailing list by Anthony Carrico

Sat Feb  7 16:53:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem with function xmlXIncludeCopyRange
	  (bug 133686).

Fri Feb  6 21:03:41 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: fixed problem with return value of
	  xmlTextWriterWriteIndent() (bug 133297)

Fri Feb  6 19:07:04 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: changed coding to output good XIncludes when
	  one or more bad ones are present (bug 132588)

Fri Feb  6 17:34:21 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: corrected handling of empty fallback condition
	  (bug 132585)

Fri Feb  6 15:28:36 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: added initialisation for ctxt->vctxt
	  in HTMLInitParser (bug 133127)
	* valid.c: minor cosmetic change (removed ATTRIBUTE_UNUSED
	  from several function params)

Tue Feb  3 16:48:57 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem regarding freeing of dictionary
	  when there are errors within an XInclude file (bug 133106).
	  Thanks to Oleg Paraschenko for the assistance.

Tue Feb  3 09:53:18 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemastypes.c: fixed validation of maxLength with no
	  content using patch submitted by Eric Haszlakiewicz
	  (bug 133259)

Tue Feb  3 09:21:09 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlreader.h include/libxml/xmlmemory.h: added
	  calling convention to the public function prototypes (rep by
	  Cameron Johnson)
	* include/libxml/xmlexports.h: fixed mingw+msys compilation
	  (rep by Mikhail Grushinskiy)

Mon Feb  2 20:22:18 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: enhanced output indenting (bug 133264)

Mon Feb  2 16:13:33 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlreader.c, include/libxml/xmlreader.h: applied patch from
	  Steve Ball to provide structured error reports.

Sun Feb  1 01:48:14 PST 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c, include/libxml/tree.h: moved serialization of
	  attribute text data (xmlSerializeContent) into a separate
	  routine (xmlSerializeTxtContent) so it can be used by xmlwriter.c
	* xmlwriter.c: changed handling of attribute string to use the
	  routine above (fixed bug 131548)

Sat Jan 31 08:22:02 MST 2004 John Fleck <jfleck@inkstain.net

	* doc/examples/reader1.c, reader2.c, reader3.c
	* doc/examples/examples.xml
	* doc/examples/*.html
	add note that reader examples need libmxl2 > 2.6, rebuild
	html - this time doing it correctly :-)

Fri Jan 30 20:45:36 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/examples.xml
	* doc/examples/*.html
	add note that reader examples need libmxl2 > 2.6, rebuild
	html

Thu Jan 29 23:51:48 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: added (void *) type override to prevent
	  warning on Solaris (Bug 132671)

Wed Jan 28 07:20:37 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/Makefile.am
	per Jan. 15 email to the list from oliverst, the index.html
	file from this directory wasn't making it into the tarball

Mon Jan 26 18:01:00 CET 2004 Daniel Veillard <daniel@veillard.com>

	* acinclude.m4: applied fix from Alexander Winston for a problem
	  related to automake-1.8 , c.f. #132513 and #129861

Mon Jan 26 12:53:11 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/index.py: don't rely on . being on the path for
	  make tests, should keep Mr. Crozat quiet until next time...

Sun Jan 25 21:45:03 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.5, rebuilt the
	  docs, checked rngparser stuff does not end up in the tarball

Sun Jan 25 20:59:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: applied patch from Frederic Peters
	  fixing the wrong arg order in xpath callback in bug #130980

Sun Jan 25 20:52:09 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixing #130453 XInclude element with no href attribute
	* relaxng.c rngparser.c include/libxml2/relaxng.h: fully integrating 
	  the compact syntax will require more work, postponed for the
	  2.6.5 release.

Sat Jan 24 09:30:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/schemasInternals.h xmlschemas.c: applied patch from
	  Steve Ball to avoid a double-free.

Fri Jan 23 14:03:21 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added io1.c an example ox xmlIO usage and io1.res
	  test result, fixed a awful lot of memory leaks showing up in
	  testWriter.c, changed the examples and the Makefiles to test
	  memory leaks.
	* xmlwriter.c: fixed a memory leak
	* Makefile.am: run the doc/examples regression tests as part of
	  make tests
	* xpath.c include/libxml/xpath.h: added xmlXPathCtxtCompile() to
	  compile an XPath expression within a context, currently the goal
	  is to be able to reuse the XSLT stylesheet dictionary, but this
	  opens the door to others possible optimizations.
	* dict.c include/libxml/dict.h: added xmlDictCreateSub() which allows
	  to build a new dictionary based on another read-only dictionary.
	  This is needed for XSLT to keep the stylesheet dictionary read-only
	  while being able to reuse the strings for the transformation
	  dictionary.
	* xinclude.c: fixed a dictionary reference counting problem occurring
	  when document parsing failed.
	* testSAX.c: adding option --repeat for timing 100times the parsing
	* doc/* : rebuilt all the docs

Thu Jan 22 14:17:05 2004  Aleksey Sanin  <aleksey@aleksey.com>

	* xmlmemory.c: make xmlReallocLoc() accept NULL pointer

Thu Jan 22 08:26:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied patch from John Belmonte for
	  normalizedString datatype support.

Thu Jan 22 10:43:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with union when last() is used
	  in predicate (bug #131971)
	* xpointer.c: minor change to comment for doc generation

Wed Jan 21 17:03:17 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #131745 raised by Shaun McCance with the
	  suggested patch

Wed Jan 21 10:59:55 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Alfred Mickautsch fixing a memory
	  leak reported on the list.

Thu Jan 15 00:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/tests/tstLastError.py: applied
	  patch from Stéphane Bidoul to add enums to the Python bindings.

Tue Jan 13 21:50:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testHTML.c: another small patch from Mark Vakoc

Tue Jan 13 21:39:58 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c relaxng.c testRelax.c testSchemas.c: applied
	  patch from Mark Vakoc to not use SAX1 unless necessary.

Mon Jan 12 17:22:57 CET 2004 Daniel Veillard <daniel@veillard.com>

	* dict.c parser.c xmlstring.c: some parser optimizations,
	  xmllint --memory --timing --repeat --stream ./db10000.xml
	  went down from 16.5 secs to 15.5 secs.

Thu Jan  8 17:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: removed a memory leak remaining from the switch
	  to a dictionary for string allocations c.f. #130891

Thu Jan  8 17:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixing some problem if configured --without-xinclude
	  c.f. #130902

Thu Jan  8 17:42:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: changed AC_OUTPUT() macro to avoid a cygwin problem
	  c.f. #130896

Thu Jan  8 00:36:00 CET 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc:
	  applying patch from Mark Vakoc for Windows
	* doc/catalog.html doc/encoding.html doc/xml.html: applied doc
	  fixes from Sven Zimmerman

Tue Jan  6 23:51:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml2-python-api.xml python/libxml_wrap.h python/types.c
	  python/tests/Makefile.am python/tests/tstLastError.py: applied 
	  patch from Stéphane Bidoul for structured error handling from
	  python, and the associated test

Tue Jan  6 23:18:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in: fixed Bug130593
	* xmlwriter.c: fixed compilation warning

Tue Jan  6 15:15:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlstring.h: fixed the comment in the header
	* doc/*: rebuilt the docs

Tue Jan  6 19:40:04 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* encoding.c, parser.c, xmlstring.c, Makefile.am,
	  include/libxml/Makefile.am, include/libxml/catalog.c,
	  include/libxml/chvalid.h, include/libxml/encoding.h,
	  include/libxml/parser.h, include/libxml/relaxng.h,
	  include/libxml/tree.h, include/libxml/xmlwriter.h,
	  include/libxml/xmlstring.h:
	  moved string and UTF8 routines out of parser.c and encoding.c
	  into a new module xmlstring.c with include file
	  include/libxml/xmlstring.h mostly using patches from Reid
	  Spencer.  Since xmlChar now defined in xmlstring.h, several
	  include files needed to have a #include added for safety.
	* doc/apibuild.py: added some additional sorting for various
	  references displayed in the APIxxx.html files.  Rebuilt the
	  docs, and also added new file for xmlstring module.
	* configure.in: small addition to help my testing; no effect on
	  normal usage.
	* doc/search.php: added $_GET[query] so that persistent globals
	  can be disabled (for recent versions of PHP)

Mon Jan  5 20:47:07 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/customfo.xsl
	* doc/tutorial/customhtml.xsl
	update custom tutorial-building stylesheets in preparation
	for tutorial update

Tue Jan  6 00:10:33 CET 2004 Daniel Veillard <daniel@veillard.com>

	* rngparser.c: committing the compact relax ng parser. It's not
	  completely finished, it's not integrated but I want to save the
	  current state

Mon Jan  5 22:22:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/apibuild.py, doc/APIconstructors.html, doc/libxml2-refs.xml,
	  win32/libxml2.def.src: fixed apibuild.py's generation of
	  "constructors" to be in alphabetical order (instead of previous
	  random sequence); regenerated resulting files.

Mon Jan  5 14:03:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Lucas Brasilino fixing an indent
	  problem.

Sun Jan  4 18:54:29 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/newapi.xsl: change background color of function
	declaration to improve readability
	* doc/*: rebuild docs with new stylesheet

Sun Jan  4 22:45:14 HKT 2004 William Brack <wbarck@mmm.com.hk>

	* parser.c, include/libxml/parser.h: added a routine
	  xmlStrncatNew to create a new string from 2 frags.
	* tree.c: added code to check if node content is from
	  dictionary before trying to change or concatenate.

Sun Jan  4 08:57:51 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlmemory.c: applied suggestion from Miloslav Trmac (see
	  Bug 130419) and eliminated xmlInitMemoryDone.  More
	  improvement needed.
	* xml2-config.in: added an additional flag (--exec-prefix) to
	  allow library directory to be different from include directory
	  (Bug 129558).

Fri Jan  2 21:22:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* error.c: applied patch from Stéphane Bidoul for structured error
	  reporting.

Fri Jan  2 21:03:17 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlwriter.h xmlwriter.c: applied the patch from
	  Lucas Brasilino to add indentation support to xmlWriter

Fri Jan  2 22:58:29 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem with "recursive" include (fallback
	  contains another include - Bug 129969)

Fri Jan  2 11:40:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: found and fixed a bug misallocating some non
	  blank text node strings from the dictionary.
	* xmlmemory.c: fixed a problem with the memory debug mutex
	  release.

Wed Dec 31 22:02:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem caused by wrong dictionary
	  reference count, reported on the list by Christopher
	  Grayce.

Wed Dec 31 15:55:55 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* python/generator.py, python/libxml2class.txt: fixed problem
	  pointed out by Stéphane Bidoul on the list.
	* xinclude.c, xpointer.c, xpath.c, include/libxml/xpointer.h:
	  completed modifications required to fix Bug 129967 (at last!).
	  Now wait to see how long before further trouble...

Tue Dec 30 16:26:13 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* parser.c, xmlmemory.c, include/libxml/xmlmemory.h: Fixed
	  memory leak reported by Dave Beckett
	* xmlschemas.c: Removed spurious comment reported on the mailing
	  list
	* xinclude.c, xpath.c, xpointer.c, libxml/include/xpointer.h:
	  Further work on Bug 129967 concerning xpointer range handling
	  and range-to function; much better, but still not complete

Mon Dec 29 18:08:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: xmlValidateElement could crash for element holding a 
	  namespace declaration but not in a namespace. Oliver Fischer 
	  provided the example.

Mon Dec 29 11:29:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: issue validation status on stderr, not stdout as suggested
	  by Pawel Palucha
	* result/relaxng/*: this change slightly all the output from RNG 
	  regressions.

Mon Dec 28 10:47:32 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: edited a couple of comments in accordance with
	  posting on the mailing list (no logic change)
	* xpointer.c: working on Bug 129967, added check for NULL
	  nodeset to prevent crash.  Further work required.
	* xpath.c: working on Bug 129967, added code to handle
	  XPATH_LOCATIONSET in RANGETO code, also added code to
	  handle it in xmlXPathEvaluatePredicateResult.  Further
	  work required.

Sat Dec 27 12:32:58 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: added tests for xs:all to assure minOccurs
	  and maxOccurs <= 1 (Bug 130020)

Sat Dec 27 09:53:06 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: fixed xmlFAParseCharRange for Unicode ranges
	  with patch from Charles Bozeman.

Fri Dec 26 14:03:41 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: fixed problem causing segfault on validation error
	  condition (reported on mailing list)

Thu Dec 25 21:16:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: fixed missing dictionaries for Memory and Doc
	  parser contexts (problem reported on mailing list)
	* doc/apibuild.py: small change to prevent duplicate lines
	  on API functions list.  It will take effect the next time
	  the docs are rebuilt.

Wed Dec 24 12:54:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: updated the docs and prepared a new
	  release 2.6.4

Wed Dec 24 12:07:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* legacy.c: remove deprecated warning on startElement()

Wed Dec 24 12:04:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c result/XInclude/nodes2.*: XInclude xpointer support
	  was broken with the new namespace. Fixes #129932

Wed Dec 24 00:29:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/schemasInternals.h: types might be
	  redefined in includes, quick fix to allow this but lacks the 
	  equality of the redefinition test.

Tue Dec 23 15:14:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* valid.c: fixed bug concerning validation using external
	  dtd of element with multiple namespace declarations
	  (Bug 129821)

Tue Dec 23 11:41:42 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* tree.c: inhibited production of "(null):" in xmlGetNodePath
	  when node has default namespace (Bug 129710)

Tue Dec 23 09:29:14 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xpath.c: small enhancement to xmlXPathCmpNodes to assure
	  document order for attributes is retained (Bug 129331)

Mon Dec 22 19:06:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlreader.c: change xmlReadFd() xmlCtxtReadFd()
	  xmlReaderNewFd() xmlReaderForFd(), change those to not close
	  the file descriptor. Updated the comment, should close #129683

Mon Dec 22 00:34:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed a serious problem in XInclude #129021

Sun Dec 21 13:59:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #129489, propagation of parsing flags 
	  in entities.
	* parser.c xmlreader.c: improved the comments of parsing options

Sun Dec 21 18:14:04 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* python/Makefile.am, python/tests/Makefile.am,
	  doc/Makefile.am: applied fixes to allow build from
	  'outside' directory (Bug 129172)

Sat Dec 20 16:42:07 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c - add explanation of namespace inheritance when
	ns is NULL to xmlNewChild and xmlNewTextChild API doc

Sat Dec 20 18:17:28 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xpathInternals.h: undid last change (my
	  bad).  Put necessary fix in libxslt/libexslt instead.
	* include/libxml/DOCBparser.h: put test for __GCC__ on
	  warning directive (Bug 129105)

Sat Dec 20 10:48:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xpathInternals.h: fixed xmlXPathReturnString
	  to cater for NULL pointer (bug 129561)
	* globals.c: added comment to suppress documentation warning
	* doc/apibuild.py: fixed problem which caused last APIchunkxx.html
	  to be lost.  Rebuilt doc/* (including adding APIchunk26.html)

Fri Dec 19 18:24:02 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: trying to fix #129692 xmlTextReaderExpand() when
	  using an xmlReaderWalker()

Thu Dec 18 20:10:34 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c: fix misc. typos in doc comments
	* include/libxml/tree.h: elaborate on macro define doc comments
	* doc/*: rebuild docs

Wed Dec 17 16:07:33 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: don't call the result files .out but .res as
	  the Makefiles tend to try generating binaries for .out targets...

Tue Dec 16 20:53:54 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/html/libxml-pattern.html: - cvs add API docs for new
	pattern stuff

Tue Dec 16 20:40:40 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c
	* doc/*:
	Elaborate in documentation discussion of xmlNewChild
	and xmlNewTextChild. Thanks to Steve Lenti for pointing
	out the usefulness of a more explicit explanation of the
	reserved character escaping issue.

Fri Dec 12 15:55:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: applied patch from Stefan Kost

Thu Dec 11 15:15:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/testWriter.c: applied small fix from Lucas Brasilino

Thu Dec 11 14:55:22 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: Added pattern support

Wed Dec 10 14:11:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* libxml.spec.in: preparing release of
	  libxml2-2.6.3, updated and regenerated the docs.

Wed Dec 10 11:43:33 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c pattern.c: removed some compilation warnings

Wed Dec 10 11:16:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: fixing bug #119264 xmllint failing to report
	  serialization errors in some cases.

Tue Dec  9 23:50:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed an XML entities content serialization
	  potentially triggered by XInclude, see #126817

Tue Dec  9 16:12:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied the patch to xmlTextWriterStartPI()
	  suggested by Daniel Schulman in #128313

Tue Dec  9 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in Makefile.am: another patch from Kenneth Haley
	  for Mingw, c.f. #128787

Tue Dec  9 15:07:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlexports.h: applied patch from Kenneth Haley
	  for compiling on Mingw see #128786

Tue Dec  9 14:52:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: some flags were not passed down correctly as
	  parsing options. Fixes #126806

Tue Dec  9 12:29:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmllint.c xmlreader.c include/libxml/xinclude.h
	  include/libxml/xmlerror.h: augmented the XInclude API
	  to be able to pass XML parser flags down to the Inclusion
	  process. Also resynchronized with the Last Call W3C Working
	  Draft 10 November 2003 for the xpointer attribute.
	* Makefile.am test/XInclude/docs/nodes[23].xml 
	  result/XInclude/*: augmented the tests for the new namespace and
	  testing the xpointer attribute, changed the way error messages
	  are tested
	* doc/*: regenerated the documentation

Mon Dec  8 18:38:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* error.c: filter warning messages if the global setting blocks them
	* xinclude.c xmlreader.c include/libxml/xinclude.h
	  include/libxml/xmlerror.h: updated the change of namespace at
	  the XInclude level, raise a warning if the old one is found,
	  and some cleanup

Mon Dec  8 13:09:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: tentative fix for #126117 character reference in
	  attributes output problem in some cornercase.

Mon Dec  8 11:08:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: tried to fix the problems reported in 
	  bug #126735
	* xpath.c SAX2.c error.c parser.c valid.c include/libxml/xmlerror.h:
	  fixed again some problem trying to use the structured error
	  handlers, c.f. bug #126735
	* result/VC/ElementValid: tiny change due to the fix

Sun Dec  7 22:27:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* error.c: fixed __xmlRaiseError to use structured error handlers
	  defined by xmlSetStructuredErrorFunc(), fixes bug #126211

Sun Dec  7 20:30:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: attempt to fix #126211 ... 

Fri Dec  5 17:07:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmlreader.c xmllint.c include/libxml/pattern.h
	  include/libxml/xmlreader.h: fixed the pattern interfaces
	  but not yet the parser to handle the namespaces.
	* doc/examples/reader3.c doc/*: fixed the example, rebuilt the docs.

Fri Dec  5 15:49:44 CET 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlwriter.c doc/apibuild.py include/libxml/globals.h 
	  include/libxml/pattern.h include/libxml/schemasInternals.h
	  include/libxml/xmlexports.h include/libxml/xmlwriter.h: cleanup
	  the make rebuild in doc, this include new directive to stop
	  documentation warnings
	* doc/* doc/html/*: rebuilt the docs
	* pattern.c xmlreader.c include/libxml/pattern.h
	  include/libxml/xmlreader.h: adding xmlTextReaderPreservePattern()
	  to save nodes while scanning the tree with the reader, cleanup
	  the way element were freed, and xmlTextReaderPreserve()
	  implementation, the API might change for namespace binding support
	  when compiling patterns.
	* doc/examples/*: added reader3.c exposing the xmlTextReaderPreserve()

Thu Dec  4 15:10:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: oops forgot to modify/commit the new code.

Thu Dec  4 13:29:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml_wrap.h:
	  cleanup the output buffer support to at least get the basic
	  to work
	* python/tests/outbuf.py python/tests/serialize.py: fixes and
	  cleanup.
	* include/libxml/xmlwriter.h: cleanup

Wed Dec  3 21:38:56 MST 2003 John Fleck <jfleck@inkstain.net>

	* include/libxml/xmlversion.h.in
	* doc/*: add WITH_TRIO comment so it shows up in the docs, rebuild
	  docs

Wed Dec  3 13:10:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in xmlregexp.c: fix bug #128401 affecting
	  regexp quantifiers

Tue Dec  2 23:29:56 CET 2003 Daniel Veillard <daniel@veillard.com>

	* pattern.c include/libxml/pattern.h: adding the pattern node
	  selection code. Inheried in part from libxslt but smaller.
	* Makefile.am configure.in include/libxml/xmlversion.h.in:
	  integrated the pattern module, made it a configure time option
	* xmllint.c: added --pattern to test when doing --stream

Tue Dec  2 11:25:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed a problem in xmlreader validation when
	  streaming exposed by reader2 example.

Mon Dec  1 20:40:51 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html
	* doc/docs.html:
	add reference to the Code Examples page to docs.html list
	of resources

Mon Dec  1 12:30:28 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb win32/configure.js: Applied the BCB patch
	  from Eric

Sun Nov 30 21:33:37 MST 2003 John Fleck <jfleck@inkstain.net>

	* include/libxml/xinclude.h
	* doc/*: Add comments for macro definitions in xinclude.h and
	rebuild the docs

Sun Nov 30 21:06:29 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/docdescr.doc
	Updating William's explanation of how to build docs, 
	reflecting Daniel's new docs build system

Sat Nov 29 18:38:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlmemory.c: enhanced by adding mutex to protect global
	  structures in a multi-threading environment.  This fixed
	  some random errors on the Threads regression tests.

Fri Nov 28 21:39:49 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html doc/python.html: fix tst.py text, which didn't
	  import sys

Fri Nov 28 17:28:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, include/libxml/encoding.h: Enhanced the handling of
	  UTF-16, UTF-16LE and UTF-16BE encodings.  Now UTF-16 output is
	  handled internally by default, with proper BOM and UTF-16LE
	  encoding.  Native UTF-16LE and UTF-16BE encoding will not generate
	  BOM on output, and will be automatically recognized on input.
	* test/utf16lebom.xml, test/utf16bebom.xml, result/utf16?ebom*:
	  added regression tests for above.

Thu Nov 27 19:25:10 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: Modified to allow coexistent 
	  build with all compilers. Added C-Runtime option for MSVC. Included
	  xmlWriter.
	* xmlwriter.c: Added IN_LIBXML macro

Wed Nov 26 21:54:01 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: applied patch from Eric

Wed Nov 26 21:33:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: stefan on IRC pointed out that XML_GET_LINE
	  is broken on 2.6.x

Tue Nov 25 18:39:44 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed #127877, never output &quot; in element content
	* result/isolat3 result/slashdot16.xml result/noent/isolat3
	  result/noent/slashdot16.xml result/valid/REC-xml-19980210.xml
	  result/valid/index.xml result/valid/xlink.xml: this changes the
	  output of a few tests

Tue Nov 25 16:36:21 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/schemasInternals.h include/libxml/xmlerror.h
	  testSchemas.c xmlschemas.c: added xsd:include support, fixed
	  testSchemas behaviour when a schemas failed to parse.
	* test/schemas/vdv-* result/schemas/vdv-first5_0_0*: added one
	  test for xsd:include from Eric Van der Vlist

Tue Nov 25 08:18:12 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: swapped the attribute defaulting and attribute checking
	  parts of parsing a new element start, fixes bug #127772
	* result/valid/127772.* test/valid/127772.xml
	  test/valid/dtds/127772.dtd: added the example in the regression tests

Tue Nov 25 08:00:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: moved xmlCleanupThreads() to the end of xmlCleanupParser()
	  to avoid bug #127851

Mon Nov 24 15:26:21 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing some Negative Character Group and
	  Character Class Subtraction handling.

Mon Nov 24 14:01:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: more XML Schemas fixes based
	  on Eric van der Vlist examples
	* result/schemas/vdv-first4* test/schemas/vdv-first4*:
	  added regression tests
	* doc/examples/Makefile.am doc/examples/index.py: do not
	  regenerate the index on make all target, but only on
	  make rebuild to avoid troubles.

Sat Nov 22 21:35:42 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h
	  include/libxml/schemasInternals.h: lot of bug fixes, cleanup,
	  starting to add proper namespace support too.
	* test/schemas/* result/schemas/*: added a number of tests
	  fixed the result from some regression tests too.

Fri Nov 21 20:50:59 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html, docs.html: remove reference to gtk-doc now that
	Daniel has removed it, fix link to George's IBM article, other
	minor edits

Fri Nov 21 01:26:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Robert Stepanek to start 
	  import os schemas support, cleaned up stuff and the patch.
	* test/schemas/import0_0.* result/schemas/import0_0_0*: added test
	  to regression, fixed a few regressions too.

Thu Nov 20 22:58:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied two parsing fixes from James Bursa

Thu Nov 20 19:20:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added two xmlReader examples
	* xmlreader.c: cleaned up some bugs in the process

Thu Nov 20 12:54:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h: applied patch from
	  Alfred Mickautsch, bugfixes and comments
	* doc/examples/*: added his test as the xmlWriter example
	* doc/html/ doc/*.html: this resulted in some improvements
	* include/libxml/hash.h: fixed an inclusion problem when
	  <libxml/hash.h> wasn't preceded by <xml/parser.h>

Wed Nov 19 17:19:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fix an error message
	* doc/examples/*: added tree2 example from Lucas Brasilino

Wed Nov 19 17:50:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/newapi.xsl: improve the sort sequence for page content
	* doc/html/*.html: regenerate the web pages

Wed Nov 19 00:48:56 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: do not package cvs versioning temp files.
	* doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl: more cleanup,
	  slightly improved the API xml format, fixed a lot of small
	  rendering problems
	* doc/html/libxml*.html: rebuilt

Tue Nov 18 21:51:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/*.h include/libxml/*.h.in: modified the file
	  header to add more information, painful...
	* genChRanges.py genUnicode.py: updated to generate said changes
	  in headers
	* doc/apibuild.py: extract headers, add them to libxml2-api.xml
	* *.html *.xsl *.xml: updated the stylesheets to flag geprecated
	  APIs modules. Updated the stylesheets, some cleanups, regenerated
	* doc/html/*.html: regenerated added back book1 and libxml-lib.html

Tue Nov 18 14:43:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/*.xsl doc/*.html doc/apibuild.py: cleaned up
	  the build process to remove all remains from the old gtk-doc
	  inherited, libxml2-refs.xml is now generated by apibuild.py, the
	  stylesheets have been improved, and the API*html now generated
	  are XHTML1 valid too

Tue Nov 18 14:28:32 HKT 2003 William Brack <mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h: minor
	  enhancement to prevent comment with unreferenced variable.
	* threads.c xmlreader.c xmlwriter.c: edited some comments to
	  improve auto-generation of documentation
	* apibuild.py: minor change to an error message

Mon Nov 17 17:55:51 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl: more cleanup,
	  improving navigation
	* doc/html/*.html: updated the result

Mon Nov 17 14:54:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl:
	  improvement of the stylesheets, fixed a API generation problem,
	  switched the stylesheet and Makefile to build the HTML output.
	* doc/html/*.html: complete update, ditched some old files, might
	  introduce some breakage...

Mon Nov 17 12:50:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/newapi.xsl: lot of improvements, this starts looking good
	  enough to be usable.

Mon Nov 17 00:58:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/newapi.xsl: stylesheet to build HTML pages from the
	  API XML description, Work in Progress

Sun Nov 16 16:03:24 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed bug 126976 (string != empty nodeset
	  should be false)

Sun Nov 16 14:00:08 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/html/*.html: Finally - found the problem with the
	  page generation (XMLPUBFUN not recognized by gtkdoc).
	  Re-created the pages using a temporary version of
	  include/libxml/*.h.
	* testOOMlib.c,include/libxml/encoding.h,
	  include/libxml/schemasInternals.h,include/libxml/valid.h,
	  include/libxml/xlink.h,include/libxml/xmlwin32version.h,
	  include/libxml/xmlwin32version.h.in,
	  include/libxml/xpathInternals.h: minor edit of comments
	  to help automatic documentation generation
	* doc/docdescr.doc: small elaboration
	* doc/examples/test1.c,doc/examples/Makefile.am: re-commit
	  (messed up on last try)
	* xmlreader.c: minor change to clear warning.

Sat Nov 15 19:20:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Copyright: fixed some wording
	* libxml.spec.in: make sure doc/examples is packaged
	* include/libxml/tree.h valid.c xmlreader.c: fixed the really
	  annoying problem about xmlRemoveID and xmlReader streaming.
	  Thing looks fixed now, had to add a doc reference to the
	  xmlID structure though...

Sat Nov 15 09:53:36 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/docdescr.doc: added description of man page building

Sat Nov 15 19:08:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/html/libxml-chvalid.html, doc/html/libxml-dict.html,
	  doc/html/libxml-list.html, doc/html/libxml-testOOMlib.html,
	  doc/html/libxml-wincecompat, doc/html/winsockcompat.html,
	  doc/html/libxml-xmlexports.html, doc/html/libxml-xmlversion.html,
	  doc/html/libxml-xmlwin32version.html, doc/html/libxml-xmlwriter.html:
	  added missing pages for the website.

Sat Nov 15 18:23:48 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am doc/*.html doc/html/*.html: rebuilt the
	  generated pages (again), manually restored doc/html/index.html
	  and manually edited generated file doc/gnome-xml.xml to put
	  in appropriate headings.
	* doc/docdescr.doc: new file to describe details of the
	  document generation (helps my memory for the next time)
	* genChRanges.py,chvalid.c,include/libxml/chvalid.h: minor
	  enhancement to please the automatic documentation generation.

Fri Nov 14 23:47:31 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* catalog.c,relaxng.c,testAutomata.c,xpointer.c,genChRanges.py,
	  chvalid.c,include/libxml/chvalid.h,doc/examples/test1.c:
	  minor error cleanup for gcc-3.3.[12] compilation warnings.

Fri Nov 14 15:08:13 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* tree.c: minor changes to some comments
	* doc/*.html: rebuilt the generated HTML pages for changes
	  from jfleck (bug 126945)

Thu Nov 13 12:44:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added Dodji's example, added output handling

Thu Nov 13 11:35:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added Aleksey XPath example, fixed bugs
	  in the indexer

Wed Nov 12 23:48:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*: integrating the examples in the navigation menus
	* doc/examples/*: added make tests, updated the navigation,
	  added a new test, cleanups, updates.

Wed Nov 12 17:50:36 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*.html: rebuilt the generated HTML pages
	* doc/examples/*: updated the stylesheets, added a synopsis,
	  Makefile.am is now generated by index.py

Wed Nov 12 01:38:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/site.xsl doc/examples/Makefile.am doc/examples/index.html:
	  added autogeneration of a web page for the examples
	* doc/examples/example1.c doc/examples/.cvsignore
	  doc/examples/examples.xml doc/examples/index.py: updated the
	  information extracted, improved the format and indexing.

Tue Nov 11 22:08:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py: less verbose on difference
	* libxml.spec.in: cleanup
	* parser.c: fixed xmlCleanupParser() doc
	* doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml
	  doc/examples/Makefile.am doc/examples/example1.c 
	  doc/examples/examples.xml doc/examples/index.py
	  doc/examples/test1.xml: work on adding C examples and
	  generating automated information about those. examples.xml
	  is autogenerated describing the examples.
	* example/Makefile.am: cleanup

Mon Nov 10 23:47:03 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genUnicode.py, xmlunicode.c, include/libxml/xmlunicode.h:
	  fixed missing '-' in block names, enhanced the hack for
	  ABI aliasing.

Sun Nov  9 20:28:21 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genUnicode.py, xmlunicode.c, include/libxml/xmlunicode.h,
	  python/libxml2class.txt: enhanced for range checking,
	  updated to Unicode version 4.0.1 (API docs also updated)
	* python/generator.py: minor change to fix a warning

Wed Nov  5 23:46:36 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: apply fix from Karl Eichwalder for script path

Wed Nov  5 10:49:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: applied patch from Mark Vakoc to simplify
	  his work from CVS checkouts.

Tue Nov  4 21:16:47 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmlreader.html: minor cleanups

Tue Nov  4 15:52:28 PST 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xmlversion.h.in: changed macro ATTRIBUTE_UNUSED
	  for gcc so that, if undefined, it's defined as
	  __attribute__((unused))

Tue Nov  4 15:28:07 PST 2003 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: small enhancement to assure ATTRIBUTE_UNUSED
	  appears after the variable declaration.
	* valid.c: trivial change to eliminate a warning message

Tue Nov  4 11:24:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.2, updated and
	  rebuilt the docs

Tue Nov  4 09:38:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: change --html to make sure we use the HTML serialization
	  rule by default when HTML parser is used, add --xmlout to allow to
	  force the XML serializer on HTML.
	* HTMLtree.c: ugly tweak to fix the output on <p> element and 
	  solve #125093
	* result/HTML/*: this changes the output of some tests

Mon Nov  3 17:51:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed bug #125812, about XPointer in XInclude 
	  failing but not returning an error.

Mon Nov  3 17:18:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed bug #125811 related to DTD post validation
	  where the DTD doesn't pertain to a document.

Mon Nov  3 15:25:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlIO.c include/libxml/parserInternals.h: implemented
	  the XML_PARSE_NONET parser option.
	* xmllint.c: converted xmllint.c to use the option instead of 
	  relying on the global resolver variable.

Mon Nov  3 13:26:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmlreader.c include/libxml/xinclude.h: adding XInclude
	  support to the reader interface. Lot of testing of the walker,
	  various bug fixes.
	* xmllint.c: added --walker and made sure --xinclude --stream --debug
	  works as expected
	* Makefile.am result/dtd11.rdr result/ent6.rdr test/dtd11 test/ent6
	  result/XInclude/*.rdr: added regression tests for the walker and
	  XInclude xmlReader support, had to slightly change a couple of tests
	  because the walker can't distinguish <foo/> from <foo></foo>

Sat Nov  1 17:42:27 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c nanohttp.c threads.c: second BeOS patch from 
	  Marcin 'Shard' Konicki

Fri Oct 31 15:35:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: always generate line numbers

Fri Oct 31 11:53:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed another regression introduced in fixing #125823

Fri Oct 31 11:33:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: previous fix for #124044 was broken, correct
	  fix provided.
	* HTMLparser.c parser.c parserInternals.c xmlIO.c: fix xmlStopParser()
	  and the error handlers to address #125877

Thu Oct 30 23:10:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: side effect of #123105 patch, namespace resolution
	  would fail when defined in internal entities, fixes #125823

Thu Oct 30 14:10:42 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: be more defensive in the xmlReader python bindings
	  fixing bug #124044

Thu Oct 30 11:14:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: the a-posteriori DTD validation code was not validating
	  the namespace declarations, this fixes #124110

Wed Oct 29 14:13:03 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: enhanced to bypass compression detection code
	  when input file is stdin (bug 125801)

Wed Oct 29 18:21:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix needed when HTTP is not compiled in by Mark Vakoc

Wed Oct 29 18:05:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: more fixes about unregistering objects
	* include/libxml/relaxng.h: applied patch from Mark Vakoc
	  missing _cplusplus processing clause

Wed Oct 29 07:49:52 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* include/libxml/parser.h parser.c: added xmlStrVPrintf function

Wed Oct 29 14:37:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c testThreads.c threads.c: applied patch from
	  Marcin 'Shard' Konicki to provide BeOS thread support.

Wed Oct 29 14:20:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h: applied patch
	  from Steve Ball to make a schema parser from a preparsed document.

Wed Oct 29 13:52:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied a couple of patches from Mark Lilback about text
	  nodes coalescing

Wed Oct 29 12:16:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: change suggested by Anthony Carrico when unregistering
	  a namespace prefix to a context
	* hash.c: be more careful about calling callbacks with NULL payloads.

Wed Oct 29 00:04:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.1, updated and
	  regenerated docs and APIs
	* parser.c: cleanup and last change to fix #123105

Tue Oct 28 23:02:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Fix #124907 by simply backporting the same
	  fix as for the XML parser
	* result/HTML/doc3.htm.err: change to ID detecting modified one
	  test result.

Tue Oct 28 22:28:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: included a new function
	  to reuse a Push parser context, based on Graham Bennett original
	  code
	* valid.c: in HTML, a name in an input is not an ID
	* TODO: bug list update

Tue Oct 28 19:54:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied patch from nico@xtradyne.com for #125030

Tue Oct 28 16:42:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* error.c valid.c include/libxml/xmlerror.h: fixing bug #125653
	  sometimes the error handlers can get a parser context on DTD
	  errors, and sometime they don't. So be very careful when trying
	  to grab those information.

Tue Oct 28 15:26:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Kasimier Buchcik which fixes a 
	  problem in xmlSearchNs introduced in 2.6.0

Tue Oct 28 14:57:03 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #123263, the encoding is mandatory in a textdecl.

Tue Oct 28 13:48:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix bug #125047 about serializing when finding a 
	  document fragment node.

Mon Oct 27 11:11:29 EST 2003 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: fix bug #125592 need a NULL check
	* include/libxml/chvalid.h: rename a parameter

Mon Oct 27 09:43:48 EST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from #123105 about defaulted attributes
	  from element coming from an entity

Mon Oct 27 21:12:27 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmllint.c: fixed warning message from IRIX (bug 125182)
	* python/libxml.py: removed tabs, replaced with spaces
	  (bug 125572)

Mon Oct 27 06:17:30 EST 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.h parserInternals.c xmlIO.c: make sure we report errors
	  if xmlNewInputFromFile() fails.
	* xmlreader.c: avoid using _private for the node or document
	  elements.

Sat Oct 25 17:33:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js: added declaration for verMicroSuffix

Fri Oct 24 23:08:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: applied patch from Patrick Welche provided in
	  bug #125432 , future proofing the .m4 file.
	* parser.c: resetting the context should also reset the error
	* TODO: problem of conformance w.r.t. E20 was raised in the
	  XML Core telconf and libxml2 isn't conformant there.

Wed Oct 22 14:33:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Alfred Mickautsch fixing #125180

Wed Oct 22 10:50:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.c genChRanges.py: Stéphane Bidoul pointed out another
	  small glitch missing a const

Wed Oct 22 10:43:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.c genChRanges.py: Stéphane Bidoul pointed out that
	  it doesn't define IN_LIBXML

Tue Oct 21 21:14:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.mingw: typo pointed out by Stéphane Bidoul

Tue Oct 21 11:26:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc
	  win32/configure.js: set of Win32 patches for 2.6.0 by Joachim Bauch

Tue Oct 21 02:07:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: last minute patch from Eric Zurcher making it into 2.6.0

Tue Oct 21 02:03:03 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/libxml2.xsa: preparing libxml2-2.6.0
	* doc/*: updated and regenerated the docs and API

Tue Oct 21 01:01:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c error.c tree.c: moved the line number to their proper
	  field in elements now.

Tue Oct 21 00:28:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in xmlwriter.c Makefile.am include/libxml/xmlwriter.h
	  include/libxml/Makefile.am include/libxml/xmlversion.h.in:
	  added the xmlWriter module contributed by Alfred Mickautsch
	* include/libxml/tree.h: added room for line and extra information
	* xmlreader.c python/tests/reader6.py: bugfixing some problem some
	  of them introduced in September
	* win32/libxml2.def.src doc/libxml2-api.xml: regenerated the API

Mon Oct 20 19:02:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in xmldwalk.c xmlreader.c
	  include/libxml/Makefile.am include/libxml/xmldwalk.h
	  include/libxml/xmlversion.h.in: removing xmldwalk module
	  since it got merged with the xmlreader.
	* parser.c: cleanup
	* win32/libxml2.def.src python/libxml2class.txt doc/libxml2-api.xml:
	  rebuilt the API
	* python/tests/Makefile.am python/tests/reader7.py
	  python/tests/walker.py: adding regression testing for the
	  new xmlreader APIs, new APIs for reader creation, including
	  making reader "walker" operating on preparsed document trees.

Sun Oct 20 22:37:03 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* entities.c, valid.c: fixed problem reported on the mailing
	  list by Melvyn Sopacua - wrong argument order on functions
	  called through xmlHashScan.

Sun Oct 19 23:57:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlIO.c: fixes for compiling using --with-minimum

Sun Oct 19 23:46:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: cleanup xmlNodeGetContent() reusing xmlNodeBufGetContent(),
	  tested it through the xslt regression suite.

Sun Oct 19 22:42:16 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: adding xmlNodeBufGetContent()
	  allowing to grab the content without forcing allocations.
	* python/libxml2class.txt doc/libxml2-api.xml: rebuilt the API
	* xpath.c xmldwalk.c: removed a couple of comment errors.

Sun Oct 19 16:39:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Chris Anderson to change back
	  memcmp with CMPx()

Sun Oct 19 16:24:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed to not send NULL to %s printing
	* python/tests/error.py result/HTML/doc3.htm.err
	  result/HTML/test3.html.err result/HTML/wired.html.err
	  result/valid/t8.xml.err result/valid/t8a.xml.err: cleaning
	  up some of the regression tests error

Sun Oct 19 15:31:43 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/nanohttp.h include/libxml/parserInternals.h 
	  include/libxml/xmlIO.h nanohttp.c parserInternals.c xmlIO.c:
	  Fixed the HTTP<->parser interraction, which should fix 2 long
	  standing bugs #104790 and #124054 , this also fix the fact that
	  HTTP error code (> 400) should not generate data, we usually
	  don't want to parse the HTML error information instead of the
	  resource looked at.

Sun Oct 19 19:20:48 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: enhanced the installation of tutorial files
	  to avoid installing CVS subdirectories (bug 122943)

Sun Oct 19 17:33:27 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: fixed segfault when input file not present
	* tree.c: changed output formatting of XML_CDATA_SECTION
	  (bug 120917)

Sun Oct 19 00:15:38 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/parserInternals.h HTMLparser.c HTMLtree.c
	  SAX2.c catalog.c debugXML.c entities.c parser.c relaxng.c
	  testSAX.c tree.c valid.c xmlschemas.c xmlschemastypes.c
	  xpath.c: Changed all (?) occurrences where validation macros
	  (IS_xxx) had single-byte arguments to use IS_xxx_CH instead
	  (e.g. IS_BLANK changed to IS_BLANK_CH).  This gets rid of
	  many warning messages on certain platforms, and also high-
	  lights places in the library which may need to be enhanced
	  for proper UTF8 handling.

Sat Oct 18 20:34:18 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h,
	  doc/apibuild.py: enhanced to include enough comments to
	  make the api doc generation happy.

Sat Oct 18 07:28:25 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c xmlIO.c include/libxml/nanohttp.h: starting work
	  to fix the HTTP/XML parser integration.

Sat Oct 18 11:04:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: added new APIs
	  for creating reader from sources or reusing a reader with
	  a new source, like the xmlReadxx and xmlCtxtReadxxx
	* win32/libxml2.def.src doc/libxml2-api.xml doc/apibuild.py
	  doc/Makefile.am: regenerated the APIs
	* doc/xml.html: applied a patch from Stefan Kost for namespace docs

Sat Oct 18 12:46:02 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h,
	  include/libxml/parserInternals.h: enhanced macros to avoid
	  breaking ABI from previous versions.
	* catalog.c, parser.c, tree.c: modified to use IS_* macros
	  defined in parserInternals.h.  Makes maintenance much easier.
	* testHTML.c, testSAX.c, python/libxml.c: minor fixes to avoid
	  compilation warnings
	* configuration.in: fixed pushHTML test error; enhanced for
	  better devel (me) testing

Fri Oct 17 14:38:54 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* legacy.c: remove the warning for startDocument(), as it is used by
	  glade (or glade-python)
	* parser.c relaxng.c xmlschemastypes.c: fixed an assorted set of
	  invalid accesses found by running some Python based regression
	  tests under valgrind. There is still a few leaks reported by the
	  relaxng regressions which need some attention.
	* doc/Makefile.am: fixed a make install problem c.f. #124539
	* include/libxml/parserInternals.h: addition of xmlParserMaxDepth
	  patch from crutcher

Wed Oct 15 12:47:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: Marc Liyanage pointed out that xmlCleanupParser()
	  was missing xmlCleanupInputCallbacks and xmlCleanupOutputCallbacks
	  calls.

Wed Oct 15 10:16:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* vms/build_libxml.com trionan.c: VMS patch from Craig A. Berry

Mon Oct 13 21:46:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: small fix from Bjorn Reese

Mon Oct 13 15:59:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix a call missing arguments

Sun Oct 12 18:42:18 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h: fixed
	  a bug in the range search; enhanced range generation (inline code
	  if a small number of intervals); enhanced the readability of the
	  output files.

Sun Oct 12 00:52:14 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.def chvalid.c include/libxml/chvalid.h: rebuilt 
	  chvalid.def from scratch based on XML 2nd edition REC
	  and regenerated the code.

Sat Oct 11 22:54:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: removed some annoying warnings
	* chvalid.def chvalid.c include/libxml/chvalid.h: fixed a bug
	  in the PubidChars definition, regenerated, there is still
	  a bug left somewhere
	* genChRanges.py: save the header directly in include/libxml/
	* configure.in: I generated a 2.6.0beta6 earlier today

Sat Oct 11 23:32:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* fixed small error on previous commit (chvalid.h in
	  base dir instead of include directory)

Sat Oct 11 23:11:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRange.py, chvalid.def, chvalid.c, include/libxml/chvalid.h:
	  new files for a different method for doing range validation
	  of character data.
	* Makefile.am, parserInternals.c, include/libxml/Makefile.am,
	  include/libxml/parserInternals.h: modified for new range method.
	* catalog.c: small enhance for warning message (using one
	  of the new range routines)

Sat Oct 11 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/valid.h: adding an serror field to
	  the validation context breaks the ABI for the xmlParserCtxt
	  structure since it's embedded by content and not by reference

Sat Oct 11 12:46:49 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: patch from Mike Hommey
	* threads.c: applied Windows patch from Jesse Pelton and Stephane
	  Bidoul
	* parser.c: fix the potentially nasty access to ctxt->serror
	  without checking first that the SAX block is version 2

Fri Oct 10 21:34:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed a nasty bug with interning some text strings
	* configure.in: prepare for beta5 of 2.6.0
	* libxml.h nanoftp.c nanohttp.c xmlIO.c include/libxml/xmlerror.h:
	  better error handling for I/O and converted FTP and HTTP
	* parser.c: fixed another bug

Fri Oct 10 16:45:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed uninitialized new field.
	* result/VC/OneID2 result/relaxng/*.err: fixed a typo updating
	  all messages

Fri Oct 10 16:19:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: make room in Doc, Element, Attributes
	  for PSVI type information.

Fri Oct 10 16:08:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c c14n.c catalog.c error.c globals.c parser.c
	  parserInternals.c relaxng.c valid.c xinclude.c xmlIO.c xmlregexp.c
	  xmlschemas.c xpath.c xpointer.c include/libxml/globals.h
	  include/libxml/parser.h include/libxml/valid.h 
	  include/libxml/xmlerror.h: Setting up the framework for structured
	  error reporting, touches a lot of modules, but little code now
	  the error handling trail has been cleaned up.

Fri Oct 10 14:29:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* c14n.c include/libxml/xmlerror.h: converted the C14N module too

Fri Oct 10 13:40:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: cleanup
	* xpointer.c include/libxml/xmlerror.h: migrated XPointer module
	  to the new error mechanism

Fri Oct 10 12:49:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c xmlschemas.c: a bit of cleanup
	* result/schemas/*.err: updated with the new result strings

Fri Oct 10 03:58:39 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed bug 124061

Fri Oct 10 02:47:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* encoding.c: fix a funny typo
	* error.c xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h:
	  converted the Schemas code to the new error handling. PITA,
	  still need to check output from regression tests.

Thu Oct  9 15:13:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/xmlerror.h: converted too
	* tree.c: small cleanup

Thu Oct  9 13:44:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: comment fix
	* catalog.c include/libxml/xmlerror.h: migrating the catalog code
	  to the new infrastructure

Thu Oct  9 00:36:03 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: final error handling cleanup
	* xinclude.c error.c: converted XInclude to the new error handling
	* include/libxml/xmlerror.h: added XInclude errors

Wed Oct  8 23:31:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: bug in compression saving was crashing galeon
	  reported by teuf

Wed Oct  8 21:18:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c tree.c xmlIO.c xmllint.c: more cleanup through the
	  I/O error path

Wed Oct  8 20:57:27 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: better handling of error cases

Wed Oct  8 13:51:14 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmllint.c include/libxml/xmlerror.h: first pass at
	  cleaning up error handling in the I/O module.

Wed Oct  8 10:52:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c include/libxml/xmlerror.h: error handling
	  cleanup of the Regexp module.

Wed Oct  8 01:09:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: converting the tree module too
	* error.c include/libxml/xmlerror.h: created a simpler internal
	  error reporting function.

Tue Oct  7 23:19:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c include/libxml/xmlerror.h include/libxml/xpath.h
	  include/libxml/xpathInternals.h xpath.c: cleaning up XPath
	  error reporting that time. 
	* threads.c: applied the two patches for TLS threads
	  on Windows from Jesse Pelton
	* parser.c: tiny safety patch for xmlStrPrintf() make sure the
	  return is always zero terminated. Should also help detecting
	  passing wrong buffer size easily.
	* result/VC/* result/valid/rss.xml.err result/valid/xlink.xml.err:
	  updated the results to follow the errors string generated by
	  last commit.

Tue Oct  7 14:16:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/xmlerror.h: last cleanup of error
	  handling in the Relax-NG module.

Tue Oct  7 13:30:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c relaxng.c include/libxml/xmlerror.h: switched Relax-NG
	  module to the new error reporting. Better default report, adds
	  the element associated if found, context and node are included
	  in the xmlError
	* python/tests/reader2.py: the error messages changed.
	* result/relaxng/*: error message changed too.

Mon Oct  6 10:46:35 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc
	  win32/configure.js: applied patch from Stéphane Bidoul to
	  fix the compilation of 2.6.0 code on Win32

Mon Oct  6 10:16:30 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: fixing the script
	* parser.c: replace sequences of RAW && NXT(.) == '.' with
	  memcmp calls, seems to not break conformance, slightly inflate
	  the size of the gcc generated code though.

Sun Oct  5 23:30:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c parser.c valid.c include/libxml/parserInternals.h:
	  more cleanup of error handling in parserInternals, sharing the
	  routine for memory errors.

Sun Oct  5 15:49:14 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c Makefile.am legacy.c parser.c parserInternals.c
	  include/libxml/xmlerror.h: more code cleanup, especially around
	  error messages, the HTML parser has now been upgraded to the new
	  handling.
	* result/HTML/*: a few changes in the resulting error messages

Sat Oct  4 23:06:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: more error/warning
	  handling cleanups, the XML parser module should be okay now.

Sat Oct  4 01:58:27 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in xmldwalk.c include/libxml/Makefile.am
	  include/libxml/xmldwalk.h include/libxml/xmlversion.h.in:
	  integrated the xmlDocWalker API given by Alfred Mickautsch,
	  and providing an xmlReader like API but working on a xmlDocPtr.

Sat Oct  4 00:18:29 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: more cleanup in make tests
	* error.c valid.c parser.c include/libxml/xmlerror.h: more work
	  in the transition to the new error reporting strategy.
	* python/tests/reader2.py  result/VC/* result/valid/*:
	  few changes in the strings generated by the validation output

Fri Oct  3 00:19:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: changed 'make tests' to use a concise output,
	  scrolling to see where thing broke wasn't pleasant
	* configure.in: some beta4 preparation, but not ready yet
	* error.c globals.c include/libxml/globals.h include/libxml/xmlerror.h:
	  new error handling code, last error information are stored
	  in the parsing context or a global variable, new APIs to
	  handle the xmlErrorPtr type.
	* parser.c parserInternals.c valid.c : started migrating to the
	  new error handling code, it's a royal pain.
	* include/libxml/parser.h include/libxml/parserInternals.h:
	  moved the definition of xmlNewParserCtxt()
	* parser.c: small potential buffer access problem in push code
	  provided by Justin Fletcher
	* result/*.sax result/VC/PENesting* result/namespaces/*
	  result/valid/*.err: some error messages were slightly changed.

Thu Oct  2 13:01:13 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* include/libxml/parser.h parser.c: introduced xmlStrPrintf
	function (wrapper around snprintf)

Wed Oct  1 21:12:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: Fix error on output of high codepoint charref like
	  &#x10FFFF; , reported by Eric Hanchrow

Wed Oct  1 14:20:10 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c include/libxml/DOCBparser.h: let's see how much
	  of a pain murrayc is really gonna be.

Wed Oct  1 11:03:40 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: Applied fix for bug #123481 reported by Peter Derr

Tue Sep 30 15:34:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c legacy.c parser.c: made the predefined entities
	  static predefined structures to avoid the work, memory and
	  hazards associated to initialization/cleanup.

Tue Sep 30 14:30:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c Makefile.am configure.in legacy.c parser.c
	  parserInternals.c testHTML.c xmllint.c include/libxml/HTMLparser.h
	  include/libxml/parser.h include/libxml/parserInternals.h
	  include/libxml/xmlversion.h.in: added a new configure
	  option --with-push, some cleanups, chased code size anomalies.
	  Now a library configured --with-minimum is around 150KB,
	  sounds good enough.

Tue Sep 30 12:31:00 AEST 2003 Malcolm Tredinnick <malcolm@commsecure.com.au>

	* libxml-2.0-uninstalled.pc.in: New file for building against
	uninstalled libxml2 builds.
	* configure.in, Makefile.am: Support the *-uninstalled.pc file.
	* .cvsignore: Ignore the new generated *.pc file.

Tue Sep 30 02:38:16 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am SAX.c SAX2.c configure.in globals.c parser.c
	  parserInternals.c testReader.c testSAX.c xmlIO.c xmllint.c
	  xmlreader.c example/gjobread.c include/libxml/xmlversion.h.in:
	  added 2 new configure option: --with-reader --with-sax1
	  to allow removing the reader or non-xmlReadxxx() interfaces.

Mon Sep 29 19:58:26 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in entities.c tree.c valid.c xmllint.c
	  include/libxml/tree.h include/libxml/xmlversion.h.in:
	  Adding a configure option to remove tree manipulation
	  code which is not strictly needed by the parser.

Mon Sep 29 15:23:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: last finishing touch to the BeOS
	  patch from Marcin 'Shard' Konicki

Mon Sep 29 15:15:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c SAX2.c c14n.c catalog.c configure.in debugXML.c
	  encoding.c entities.c nanoftp.c nanohttp.c parser.c relaxng.c
	  testAutomata.c testC14N.c testHTML.c testRegexp.c testRelax.c
	  testSchemas.c testXPath.c threads.c tree.c valid.c xmlIO.c
	  xmlcatalog.c xmllint.c xmlmemory.c xmlreader.c xmlschemas.c
	  example/gjobread.c include/libxml/HTMLtree.h include/libxml/c14n.h
	  include/libxml/catalog.h include/libxml/debugXML.h
	  include/libxml/entities.h include/libxml/nanohttp.h
	  include/libxml/relaxng.h include/libxml/tree.h
	  include/libxml/valid.h include/libxml/xmlIO.h
	  include/libxml/xmlschemas.h include/libxml/xmlversion.h.in
	  include/libxml/xpathInternals.h python/libxml.c:
	  Okay this is scary but it is just adding a configure option
	  to disable output, this touches most of the files.

Mon Sep 29 12:53:56 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: better fix, avoids breaking the python bindings

Mon Sep 29 11:21:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: fix a compilation problem when configuring
	  with debug but without mem-debug

Sun Sep 28 20:53:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup, creating a new legacy.c module,
	  made sure make tests ran in reduced conditions
	* SAX.c SAX2.c configure.in entities.c globals.c parser.c
	  parserInternals.c tree.c valid.c xlink.c xmlIO.c xmlcatalog.c
	  xmlmemory.c xpath.c xmlmemory.c include/libxml/xmlversion.h.in:
	  increased the modularization, allow to configure out 
	  validation code and legacy code, added a configuration
	  option --with-minimum compiling only the mandatory code
	  which then shrink to 200KB.

Sun Sep 28 02:15:07 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a bug raised by the Mips compiler.
	* include/libxml/SAX.h include/libxml/parser.h: move the 
	  SAXv1 block definitions to parser.h fixes bug #123380
	* xmlreader.c include/libxml/xmlreader.h: reinstanciate
	  the attribute and element pool broken 2 commits ago.
	  Start playing with an entry point to preserve a subtree.
	* entities.c: remove a warning.

Sat Sep 27 12:19:38 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, parser.c, relaxng.c: further (final?) minor
	  changes for compilation warnings. No change to logic.

Fri Sep 26 18:03:42 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed small problem with missing entities (test/ent2)

Sat Sep 27 01:25:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: William's change allowed to spot a nasty bug in xmlDoRead
	  if the result is not well formed that ctxt->myDoc is not NULL
	  and uses the context dictionary.

Fri Sep 26 21:09:34 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: other patches from William Brack to avoid
	  compilation warnings on AIX.

Fri Sep 26 11:03:08 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c, entities.c, xmlreader.c: minor change to
	  avoid compilation warnings on some (e.g. AIX) systems

Fri Sep 26 16:49:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixed a backward compatibility problem
	  when formatting "deprecated SAXv1 function ignorableWhitespace"
	  could be reproduced by xmllint --format

Fri Sep 26 15:50:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml: rebuilt the API
	* xmllint.c doc/xmllint.1 doc/xmllint.xml: added the new options
	  --nocdata and --nsclean to remove CDATA section and surperfluous
	  namespace declarations
	* parser.c SAX2.c: implementation of the 2 new options

Fri Sep 26 14:41:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c testHTML.c xmllint.c include/libxml/HTMLparser.h:
	  added the same htmlRead APIs than their XML counterparts
	* include/libxml/parser.h: new parser options, not yet implemented,
	  added an options field to the context.
	* tree.c: patch from Shaun McCance to fix bug #123238 when ]]>
	  is found within a cdata section.
	* result/noent/cdata2 result/cdata2 result/cdata2.rdr
	  result/cdata2.sax test/cdata2: add one more cdata test

Thu Sep 25 23:03:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmllint.c doc/libxml2-api.xml include/libxml/parser.h:
	  Changed the new xmlRead/xmlCtxtRead APIs to have an extra
	  base URL parameter when not loading from a file or URL.

Thu Sep 25 16:23:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing a beta3 solving the ABI problems
	* globals.c parser.c parserInternals.c testHTML.c HTMLparser.c SAX.c
	  include/libxml/globals.h include/libxml/SAX.h: make sure the
	  global variables for the default SAX handler are V1 ones to
	  avoid ABI compat problems.
	* xmlreader.c: cleanup of unneeded code
	* hash.c: fix a comment

Thu Sep 25 14:16:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c hash.c parser.c include/libxml/xmlexports.h 
	  include/libxml/xmlmemory.h include/libxml/xmlversion.h.in:
	  fixing some comments to avoid warnings from apibuild.py

Wed Sep 24 23:42:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: patch from Stéphane Bidoul for configuring
	  the beta2 version #123104

Wed Sep 24 23:17:59 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: adding repeated parsing and validating tests
	* SAX2.c parser.c tree.c include/libxml/parser.h: make the new
	  DOM tree building interfaces use the dictionary from the 
	  parsing context to build the element and attributes names
	  as well as formatting spaces and short text nodes
	* include/libxml/dict.h dict.c: added some reference counting
	  for xmlDictPtr because they can be shared by documents and
	  a parser context.
	* xmlreader.c: a bit of cleanup, remove the specific tree freeing
	  functions and use the standard ones now.
	* xmllint.c: add --nodict
	* python/libxml.c: fix a stupid bug so that ns() works on 
	  attribute nodes.

Tue Sep 23 23:07:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: adding a new set of
	  API for parsing xmlReadDoc() xmlReadFile() ... xmlReadIO()
	  and xmlCtxtReadDoc() ... xmlCtxtReadIO(). That with
	  a clear define of xmlParserOption, xmlCtxtUseOptions()
	  should simplify custom parsing without being tempted to
	  use global variables, and xmlCtxtReset() should allow reuse
	  of a context for multiple parsing.
	* xmllint.c: switched to use xmlReadXXX, allow options to
	  be used simultaneously with less troubles.
	* tree.c: simple warning removal
	* doc/apibuild.py: small fix
	* doc/libxml2-api.xml win32/libxml2.def.src: updated

Tue Sep 23 11:15:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: revert xmlCreateDocParserCtxt() since this break
	  the parseDoc() python bindings

Tue Sep 23 11:00:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: make sure xmlDetectSAX2() is called only at 
	  parsing time to avoid breaking apps changing the SAX
	  callbacks after context allocation, change xmlCreateDocParserCtxt()
	  to use an immutable buffer instead of a copy

Tue Sep 23 09:40:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Markus Keim fixing a problem
	  with I/O callback registration.
	* include/libxml/xmlerror.h: fixed #122994 comment numbering
	  for xmlParserErrors

Mon Sep 22 12:21:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: the uri arg to xmlNodeSetBase is
	  really a const xmlChar*
	* xmlreader.c include/libxml/xmlreader.h: addin the
	  xmlTextReaderConstString() to get an interned string from
	  the reader

Sun Sep 20 17:22:20 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c: fixed a warning message (trivial)
	* doc/search.php: removed incorrect warning message when word
	  search not found in last of multiple tables (bug 119535)

Fri Sep 19 14:26:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing a 2.6.0-beta2 release
	* xmlIO.c: avoid a warning
	* tree.c: avoid duplicate code in xmlReplaceNode as pointed out
	  by Chris Ryland
	* include/libxml/dict.h: add a QName access lookup to the
	  dictionary.
	* xmlreader.c include/libxml/xmlreader.h: adding const access
	  based on the dictionary interface for string read from the
	  reader, the node content access is still TODO, it's too different

Fri Sep 19 00:01:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixing namespace DTD validations
	* result/valid/ns2.xml result/valid/ns.xml: the output of defaulted
	  namespaces is slightly different now.
	* Makefile.am: report the memory used in Timingtests (as well as time)

Thu Sep 18 15:29:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: add streaming on memory regression tests, found
	  bad bugs in the reader interface
	* xmlreader.c: fixing bugs w.r.t. very large names, and special
	  condition in end of file.
	* xmlIO.c tree.c include/libxml/tree.h include/libxml/xmlIO.h:
	  adding immutable buffers, and parser input based on those,
	  but this should not be used (yet) for general parsing
	* parser.c: added a comment about using immutable buffers for
	  general parsing.
	* result/bigname.xml.rdr result/bigname2.xml.rdr: fixing the
	  output of the regression tests
	* xmllint.c: using the immutable buffers when streaming on
	  mmaped file (--stream --memory)

Thu Sep 18 12:04:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c: the last patch broke unicity of returned strings, removed

Thu Sep 18 00:31:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: add a Timingtests target to check bad behaviour
	  from the streaming engine
	* dbgen.pl dbgenattr.pl: perl script to generate big instances
	* xmlreader.c: fix a bad behaviour on large buffer inputs

Wed Sep 17 23:25:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c xmlreader.c: two small improvements

Wed Sep 17 22:53:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: avoid a leak with previous patch

Wed Sep 17 22:06:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: use stderr and not stdout for default errors
	  in python environment bug #122552

Wed Sep 17 21:33:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: small fix from Rob Richards for input filename
	* xmllint.c: fixes for --repeat and --memory/--stream for speed tests
	* xmlIO: adding a guard in one function

Wed Sep 17 15:57:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c xmlreader.c include/libxml/parser.h: more performance hunting
	  reducing memory allocation and free and avoiding expensive routines

Wed Sep 17 12:23:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c parser.c parserInternals.c xmlreader.c: started messing
	  seriously with per-document dict and element and attribute nodes
	  reuse in the xmlReader. This seems to lead to an interesting
	  speedup of the xmlReader already.

Wed Sep 17 01:07:56 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h: do string allocations in large
	  pools, allowing to find if a string pertain to a dict quickly
	* xmllint.c: fix --stream --repeat --timing
	* Makefile.am: the testThreads run output should be seen.

Mon Sep 15 16:46:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c include/libxml/parser.h: starting work on reusing the
	  parser dictionary for the element and attribute tag names.
	  Add pools for Element and Attributes in the parser context,
	  which should help speeding up the reader.
	* Makefile.am result/*.rdr : adding non-python reader regression
	  tests.

Mon Sep 15 14:54:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c parser.c valid.c: starting to cleanup some of the
	  problems exposed by the W3C/NIST regression suite.
	* result/ent7.sax result/xml2.sax: small fixes.

Mon Sep 15 11:46:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: more parser error factoring

Sun Sep 14 21:53:39 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLtree.c: Fixed bug 121394 - missing ns on attributes

Sun Sep 14 21:43:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: factoring of more 
	  error handling code, serious size reduction and more lisibility
	  of the resulting code.
	* parserInternals.c parser.c include/libxml/parserInternals.h
	  include/libxml/parser.h: changing the way VC:Proper Group/PE Nesting
	  checks are done, use a counter for entities. Entities where freed and
	  reallocated at the same address failing the check.
	* tree.c: avoid a warning
	* result/valid/* result/VC/*: this slightly changes some validation
	  error messages.

Sun Sep 14 11:03:27 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* valid.c: fixed bug 121759 - early declaration of
	  attribute-list in external DTD

Sat Sep 13 14:42:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: starting cleaning up
	  error handling, factorize error processing
	* doc/xmllint.html: update of the page, remove --sgml

Sat Sep 13 02:13:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am DOCBparser.c parserInternals.c testDocbook.c
	  xmllint.c doc/xmllint.xml doc/xmllint.1: removing the 
	  broken pseudo SGML DocBook parser code.

Fri Sep 12 17:24:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix a problem with strcpy() in xmlXPathFormatNumber()
	  valgrind pointed out the strings overlapped. cleanup .

Fri Sep 12 11:43:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied speedup to xmlSearchNs() as suggested by
	  Luca Padovani. Cleaned up xmlSearchNsByHref() in the process
	  applying the same trick.

Fri Sep 12 01:36:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c tree.c include/libxml/parser.h
	  include/libxml/xmlerror.h: adding namespace checkings
	  while making sure they still parse as wellformed documents.
	  Add an nsWellFormed status report to the context, and 
	  provide new appropriate error codes.
	* Makefile.am result/namespaces/* test/namespaces/*: add 
	  specific regression testing for the new namespace support
	* test/att5 result/noent/att5 result/att5 result/att5.sax:
	  add more coverage for the attribute parsing and normalization
	  code.

Fri Sep 12 01:34:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* threads.c: backport of a thread bugfix from 2_5_X branch

Thu Sep 11 18:29:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug in one corner case of attribute parsing.

Thu Sep 11 16:21:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* : 2.6.0beta1 changes
	* SAX2.c hash.c parser.c parserInternals.c: Fixing attribute
	  normalization, might not be totally fixed but this should 
	  make sure SAX event provide the right strings for attributes
	  except entities for which libxml2 is different by default
	  This should fix #109564
	* result/attrib.xml.sax result/ent3.sax result/p3p.sax: minor changes
	  in attribute callback values
	* result/c14n/with-comments/example-4
	  result/c14n/without-comments/example-4: this also fixes a subtle
	  bug in the canonicalization tests.

Wed Sep 10 12:38:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	Time to commit 3 days of work rewriting the parser internal,
	fixing bugs and migrating to SAX2 interface by default. There
	is some work letf TODO, like namespace validation and attributes
	normalization (this break C14N right now)
	* Makefile.am: fixed the test rules
	* include/libxml/SAX2.h include/libxml/parser.h
	  include/libxml/parserInternals.h SAX2.c parser.c
	  parserInternals.c: changing the parser, migrating to SAX2,
	  adding new interface to switch back to SAX1 or initialize a
	  SAX block for v1 or v2. Most of the namespace work is done
	  below SAX, as well as attribute defaulting
	* globals.c: changed initialization of the default SAX handlers
	* hash.c tree.c include/libxml/hash.h: added QName specific handling
	* xmlIO.c: small fix
	* xmllint.c testSAX.c: provide a --sax1 switch to test the old
	  version code path
	* result/p3p result/p3p.sax result/noent/p3p test/p3p: the new code
	  pointed out a typo in a very old test namespace

Sun Sep  7 19:58:33 PTD 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c include/libxml/xmlIO.h parser.c: Implemented detection
	  of compressed files, setting doc->compressed appropriately
	  (bug #120503).

Sun Sep  7 22:53:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: try to cope with the fact that apps may still
	  have allocated smaller SAX callbak block

Sun Sep  7 11:11:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c: allow to give -1 for undefined length in lookups
	* include/libxml/parser.h parser.c parserInternals.c testSAX.c:
	  first round of work on the new SAX2 interfaces, the API
	  will change but committing before changing for historical
	  reference.

Sat Sep  6 10:55:01 PTD 2003 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, xmlIO.c: fixed bug #121210 (callback to sax->error,
	  sax->warning with wrong params).

Fri Sep  5 10:33:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h: patch from Stéphane Bidoul to export
	  globals entry points to the python bindings

Wed Sep  3 15:24:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: when creating a DOCTYPE use "html" lowercase
	  by default instead of "HTML"
	* parser.c xmlreader.c: optimization, gain a few % parsing speed by
	  avoiding calls to "areBlanks" when not needed.
	* include/libxml/parser.h include/libxml/tree.h: some structure
	  extensions for future work on using per-document dictionaries.

Wed Sep  3 15:08:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am results/*.sax SAXResult/*: removing the SAXresults
	  tree, keeping result in the same tree, added SAXtests to the
	  default "make tests"

Tue Sep  2 15:59:04 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlexports.h: defined additional macros which
	  affect exports and added mingw section

Mon Sep  1 15:15:18 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/index.py: fixed problem parsing xhtml docs
	* doc/xmlreader.html,doc/guidelines.html: small modification
	  to avoid problem in python parsing.
	* doc/search.php: fixed upper case filename problem for XSLT docs

Mon Sep  1 22:55:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: patch from Mark Vakoc that allows compiling 
	  with XInclude but without XPointer support.

Mon Sep  1 22:31:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in xml2-config.in: Applied a patch from Kevin P. Fleming
	  to add --libtool-libs option to xml2-config script.

Sun Aug 31 21:52:12 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/README.docs, doc/Makefile.am: new file added,
	  giving some description of the documentation generation process
	* doc/search.php: fixed problem with upper case on filenames

Fri Aug 29 12:25:01 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: updates by Eric Zurcher

Thu Aug 28 22:58:38 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/apibuild.py, doc/libxml2-api.xml: enhanced code
	  to compensate for pollution from Igor's header taint
	  (quick before Daniel notices)

Thu Aug 28 23:01:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed a namespace error on attribute reporting bug
	  pointed out by Tobias Reif
	* test/p3p result/p3p result/noent/p3p: this test case was wrong
	  using xmlsn instead of xmlns...

Thu Aug 28 18:25:07 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/globals.h include/libxml/xmlexports.h: fixed
	  typos reported by Mark Vakoc

Thu Aug 28 08:59:51 MDT 2003 John Fleck <jfleck@inkstain.net>

	add:
	* doc/tutorial/api.html
	* doc/tutorial/ar01s09.html
	* doc/tutorial/includexpath.c
	updated
	* doc/tutorial/*.html
	fix my bad - forgot to check in new files when I last
	updated

Thu Aug 28 14:31:13 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: new file, support for Borland C++
	* xmllint.c: fixed time inclusion for various compilers

Thu Aug 28 12:32:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c parserInternals.c DOCBparser.c HTMLparser.c: added
	  few casts to shut the compiler warnings

Thu Aug 28 12:23:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: fixed for mingw

Thu Aug 28 10:01:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c threads.c: fixing bug #120870 try to avoid problem
	  with uninitialized mutexes

Wed Aug 27 16:12:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed an error reporting bug in Relax-NG when we end
	  up with multiple states, select the "best" one. Fix #120682
	* result/relaxng/tutor11_2_3.err: small change resulting 

Wed Aug 27 11:25:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied base64 support patch from Anthony Carrico

Wed Aug 27 10:58:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/[threads-xpointer].h: realigned parameters
	  after taint

Wed Aug 27 09:59:54 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlexports.h: fixed defs for Borland compiler,
	  as reported by Eric Zurcher

Tue Aug 26 15:54:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #120386 again a problem introduced when
	  trying to reuse automata for content validation. Fix a bug report
	  problem on zeroOrMore
	* result/relaxng/tutor3_7_err: change slightly error reporting.

Mon Aug 25 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: make sure the new header will
	  be included when generating a new distribution.

Mon Aug 25 12:37:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a couple of stupid bugs in the state allocation
	  routines which led to bug #120040 and the ones reported by
	  Martijn Faassen

Mon Aug 25 12:37:23 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/parserInternals.h include/libxml/relaxng.h
	  include/libxml/SAX.h include/libxml/SAX2.h: realigned the
	  parameters after taint.

Mon Aug 25 11:16:01 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlversion.h.in: moved export defs to a separate
	  file for consistency.
	* include/libxml/xmlexports.h: new file, contains export defs.

Mon Aug 25 11:01:49 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/*.h genUnicode.py: exportability taint
	  of the headers.

Thu Aug 21 12:37:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: make the deprecated interfaces log an error message
	  to be sure it won't get used.

Thu Aug 21 00:50:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am SAX2.c include/libxml/Makefile.am include/libxml/SAX2.h:
	  Adding new version of the SAX interface, it's not there yet,
	  currently just preparing the work
	* globals.c parser.c SAX.c include/libxml/SAX.h 
	  include/libxml/globals.h include/libxml/parser.h: doing some
	  refactoring of the SAXv1 interfaces, obsoleting a bunch of them
	  while keeping functionalities, preparing SAX2 integration.
	* dict.c: small cleanup.

Wed Aug 20 00:20:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixes a small bug introduced in last commit and detected
	  by valgrind.

Tue Aug 19 16:54:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c hash.c: optimization when freeing hash tables.
	* parser.c xmlIO.c include/libxml/tree.h: some tuning of buffer
	  allocations
	* parser.c parserInternals.c include/libxml/parser.h: keep a
	  single allocated block for all the attributes callbacks,
	  avoid useless malloc()/free()
	* tree.c: do not realloc() when growing a buffer if the buffer
	  ain't full, malloc/memcpy/free avoid copying memory.

Mon Aug 18 18:37:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c doc/xmllint.xml doc/xmllint.1: added option
	  --dtdvalidfpi for Tobias Reif

Mon Aug 18 14:03:03 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h Makefile.am include/libxml/Makefile.am:
	  new dictionary module to keep a single instance of the names used
	  by the parser
	* DOCBparser.c HTMLparser.c parser.c parserInternals.c valid.c:
	  switched all parsers to use the dictionary internally
	* include/libxml/HTMLparser.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/valid.h:
	  Some of the interfaces changed as a result to receive or return
	  "const xmlChar *" instead of "xmlChar *", this is either
	  insignificant from an user point of view or when the returning
	  value changed, those function are really parser internal methods
	  that no user code should really change
	* doc/libxml2-api.xml doc/html/*: the API interface changed and
	  the docs were regenerated

Sun Aug 17 23:05:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch to xmlCleanupParser from Dave Beckett

Sat Aug 16 22:53:42 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/parsedecl.py, doc/libxml2-refs.xml, doc/API*.html:
	  fixed part (2) of bug 119535 (wrong alpha case on filenames)

Sat Aug 16 20:35:28 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/API*.html, doc/html/*: regenerated API documentation
	  for xmlsoft.org (part of Bug 119535)

Fri Aug 15 14:58:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, threads.c, include/libxml/HTMLparser.h,
	  doc/libxml2-api.xml: Minor changes to comments, etc. for
	  improving documentation generation
	* doc/Makefile.am: further adjustment to auto-generation of
	  win32/libxml2.def.src

Fri Aug 15 02:24:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* News configure.in: preparing libxml2-2.5.10 release
	* doc/* : updated the doc and rebuilt

Fri Aug 15 01:55:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing the xmlSAXParseDTD bug #119536 raised by
	  Malcolm Tredinnick with the patch he suggested.

Fri Aug 15 01:37:10 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: allocation error #119784 raised by Oliver Stoeneberg

Fri Aug 15 00:41:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c: fixing an use of strcpy() where both strings overlap
	  pointed out by valgrind.

Thu Aug 14 17:10:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c globals.c include/libxml/xmlmemory.h: get rid of
	  some compilation warnings.
	* xinclude.c: fix the performance problem reported by Kevin Ruscoe
	  plus some cleanup and better error reporting.

Thu Aug 14 14:13:43 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applied UTF-16 encoding handling patch provided by
	  Mark Itzcovitz
	* encoding.c parser.c: more cleanup and fixes for UTF-16 when 
	  not having iconv support.

Thu Aug 14 03:19:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in example/Makefile.am libxml.h nanoftp.c
	  nanohttp.c xmllint.c: Applied patch from Mikhail Grushinskiy for
	  mingw compiler on Windows.

Thu Aug 14 02:28:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the serious CPU usage problem reported by
	  Grant Goodale
	* HTMLparser.c: applied patch from Oliver Stoeneberg about a free
	  missing in htmlSAXParseDoc

Tue Aug 12 22:48:10 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: Removed dependency from libxml2.def.src

Tue Aug 12 18:55:08 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* autogen.sh: took away the requirement for automake-1.4,
	  changed the messages for getting auto* tools to current
	  gnu pages.
	* configure.in: added check for Linux Dec alpha requiring
	  -ieee flag, fixed test for ipv6
	* trionan.c: fixed problem for compiling on Linux Dec alpha
	  using native compiler
	* doc/Makefile.am: implemented regeneration of win32/libxml2.def.src
	  whenever libxml2-api.xml is changed.

Mon Aug 11 17:02:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: cleaning up a problem when parsing UTF-16 and libiconv
	  is not used.

Sun Aug 10 08:13:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/libxml2.def.src: renerated with fixed libxml2-api.xml

Sun Aug 10 00:22:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* News configure.in: preparing libxml2-2.5.9 release
	* doc/* : updated the doc and rebuilt

Sat Aug  9 20:00:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlreader.h doc/libxml2-api.xml: changing an enum
	  definition to get a correct API XML description. This was apparently
	  breaking Windows build.

Sat Aug  9 13:41:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed a nasty bug #119387, bad heuristic from
	  the progressive HTML parser front-end on large character data
	  island leading to an erroneous end of data detection by the
	  parser. Some cleanup too to get closer from the XML progressive
	  parser.

Sat Aug  9 00:42:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/configure.js: Added in support for the ISO8859X
	  module (patch provided by Jesse Pelton)

Fri Aug  8 15:56:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c threads.c: hum try to avoid some troubles
	  when the library is not initialized and one try to save, the 
	  locks in threaded env might not been initialized, playing safe
	* xmlschemastypes.c: apply patch for hexBinary from Charles Bozeman
	* test/schemas/hexbinary_* result/schemas/hexbinary_*: also added
	  his tests to the regression suite.

Fri Aug  8 18:47:38 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/defgen.xsl, win32/libxml2.def.src: Bug 119343
	  (with apologies to Igor) - Enhanced handling of docb and
	  nanohttp.

Thu Aug  7 21:13:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c: further small changes for warnings when
	  configured with --with-iconv=no

Wed Aug  6 12:32:11 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c trionan.[ch] testThreads.c python/generator.py:
	  further small changes to eliminate most of the remaining
	  warnings.

Tue Aug  5 23:51:21 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c HTMLparser.c testC14N.c testHTML.c testURI.c
	  xmlcatalog.c xmlmemory.c xmlreader.c xmlschemastypes.c
	  python/libxml.c include/libxml/xmlmemory.h: small changes
	  to syntax to get rid of compiler warnings.  No changes
	  to logic.

Mon Aug  4 22:40:54 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/html/*: rebuilt the API and docs.

Mon Aug  4 21:40:34 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a small problem in the patch for #118763
	* result/HTML/doc3.htm*: this reverts back to the previous result

Sun Aug  3 21:41:49 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* doc/FAQ.html doc/xml.html: applied doc patch to xml.html
	  and rebuilt, apparently some C++ wrappers are not available,
	  c.f. bug #118943

Sun Aug  3 21:30:31 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixing HTML attribute serialization bug #118763
	  applying a modified version of the patch from Bacek
	* result/HTML/doc3.htm*: this modifies the output from one test

Sun Aug  3 21:02:30 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: added a new API to split a
	  QName without generating any memory allocation
	* valid.c: fixed another problem with namespaces on element
	  in mixed content case
	* python/tests/reader2.py: updated the testcase with 
	  Bjorn Reese fix to reader for insignificant white space
	* parser.c HTMLparser.c: cleanup.

Sun Aug  3 20:55:40 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* catalog.c: trying to fix #118754 of possible recursion in the
	  catalogs. Not fantastically happy about the current fix since
	  it's likely to break under very thread intensive concurrent
	  access to the catalog. Better solution might to keep the depth
	  an extra argument to the resolution functions.

Sun Aug  3 18:56:54 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed bug #118712 about mixed content, and namespaced
	  element names.
	* test/valid/mixed_ns.xml result/valid/mixed_ns*: added a check
	  in the regression tests

Fri Aug 1 23:55:23 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Coninuing work on bug 118559
	* DOCBparser.c: removed 2 unused vars
	* xmlregexp.c: changed some numeric const to their enum symbols
	* xmlreader.c: changed one var define from int to enum
	  (a little more to be done, awaiting co-ordination)
	* relaxng.c: deleted one unused var
	* xmllint.c: deleted some unused vars, changed one arg
	  val from int to enum
	* testHTML.c, testDocbook.c: changed some arg vals to enum const
	* xmlIO.c: fixed typo from last night (small warning msg)

Thu Jul 31 22:44:33 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Working on bug 118559
	* error.c: deleted unused variable
	* parserInternals.c: deleted unneeded 'const' qualifier
	* parser.c: changed variable type for enum temp storage
	* xmlIO.c: changed debugging var to be inside #ifdef
	* valid.c: removed unused variable
	* HTMLparser.c: removed some unneeded 'const' qualifiers
	* xpath.c: added some type casts, removed some unused vars
	* xinclude.c: added one type cast
	* nanohttp.c: repositioned some #ifdef to avoid unused var
	* nanoftp.c: removed unused var

Wed Jul 30 14:57:55 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied a patch from William Brack about
	  the problem of parsing very large HTML instance with comments
	  as raised by Nick Kew

Wed Jul 30 12:29:38 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: applying cleanup
	  patch from Bjorn Reese for xmlTextReaderNodeType() and 
	  significant whitespace. There is an enum for node type
	  values now.

Wed Jul 30 11:08:21 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applying patch from Peter Jacobi to added 
	  ISO-8859-x encoding support when iconv is not available
	* configure.in include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: added the glue needed
	  at the configure level and made it the default for Windows

Tue Jul 29 16:43:48 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml2class.txt:
	  patch from Joachim Bauch + cleanup for Relax NG error callbacks
	  in python

Tue Jul 29 12:46:08 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c tree.c: applied Peter Jacobi encoding
	  cleanup patch, and also avoided a possible memory leak

Tue Jul 29 09:28:09 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fix the previous commit

Tue Jul 29 12:28:17 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: fixed problem with comments reported by Nick Kew
	* encoding.c: added routines xmlUTF8Size and xmlUTF8Charcmp for
	  some future cleanup of UTF8 handling

Mon Jul 28 16:39:14 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied a change suggested by Sean Griffin in bug
	  #118494 about a memory leak in EXSLT

Sun Jul 27 14:30:56 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a Relax-NG compilation/streaming bug introduced
	  when fixing the previous Relax-NG bugs
	* result/relaxng/*: This slightly changes the output messages of
	  some regression tests.
	* configure.in: added support of -with-fexceptions for nested C++
	  support.

Thu Jul 24 15:46:02 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/apa.html
	* doc/tutorial/apb.html
	* doc/tutorial/apc.html
	* doc/tutorial/apd.html
	* doc/tutorial/ape.html
	* doc/tutorial/apf.html
	* doc/tutorial/apg.html
	* doc/tutorial/aph.html
	* doc/tutorial/ar01s02.html
	* doc/tutorial/ar01s03.html
	* doc/tutorial/ar01s04.html
	* doc/tutorial/ar01s05.html
	* doc/tutorial/ar01s06.html
	* doc/tutorial/ar01s07.html
	* doc/tutorial/ar01s08.html
	* doc/tutorial/index.html
	* doc/tutorial/ix01.html
	* doc/tutorial/xmltutorial.pdf
	* doc/tutorial/xmltutorial.xml
	update tutorial with XPath example

Thu Jul 24 17:07:06 IST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c: fixing a bug about a special case of namespace
	  handling, this closes bug #116841

Wed Jul 23 20:52:36 IST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c result/relaxng/*: checked and fixed the compilation
	  of RNG schemas, fixes a couple of bugs #117097 and #117001 .
	  This slightly changes the output messages of some regression tests.

Wed Jul 23 15:15:08 IST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed an out of bound error #118052 , the good
	  part if that base64 code was not in use yet ...

Tue Jul 22 19:42:15 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.html
	include html version of the xmllint man page, so an
	up-to-date version is visible on the Web

Mon Jul 21 21:53:43 IST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c include/libxml/xinclude.h: added a new API
	  xmlXIncludeProcessTree() to process XInclude only on a subtree
	  this should fix bug #115385

Fri Jul 18 17:11:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: adding Get interface for
	  the error callback and parameters of parsing and validation
	  contexts
	* xmlreader.c: patch to fix bug #117702 about incomplete Read()
	  on text nodes.

Wed Jul 16 23:15:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: patch from Dodji Seketeli about UTF16 BOM
	  when using the push XML parser.
	* result/utf16bom.xml result/noent/utf16bom.xml test/utf16bom.xml:
	  added the test to the regression suite.

Tue Jul 15 22:03:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c: add xmlThrDefMutex = NULL in xmlCleanupGlobals() 
	  as suggested by Rob Richards

Tue Jul 15 15:30:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c entities.c parser.c relaxng.c 
	  xmlschemas.c xpath.c: removed some warnings by casting xmlChar
	  to unsigned int and a couple of others.

Fri Jul 11 16:44:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixes a segfault on empty hexBinary strings

Thu Jul 10 16:02:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: cleanup patches from Peter Breitenlohner

Tue Jul  8 16:02:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c threads.c: fixes some problem when freeing uninitialized
	  mutexes

Tue Jul  8 14:15:07 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: the modules should not import <config.h>
	  directly, some cleanups
	* xmlschemas.c: Peter Sobisch found a nasty bug in the Schemas
	  validation code.

Mon Jul  7 18:00:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: Jesse Pelton pointed out a problem in the
	  javascript code.

Mon Jul  7 16:39:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*: regenerated
	* nanoftp.c nanohttp.c: might fix includes problems with the
	  Ipv6 support on solaris
	* tree.c: patch from Markus Keim about xmlHasNsProp() on attributes
	  defined as #IMPLIED

Sun Jul  6 23:09:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: preparing release 2.5.8
	* nanohttp.c: changed some preprocessor block
	* xmlschemastypes.c: applied patch from Charles Bozeman adding
	  hexBinary schema datatype and adding support for totalDigits and
	  fractionDigits facets.

Sun Jul  6 19:56:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* debugXML.c xpath.c: fixed 2 bugs pointed in #116448

Sun Jul  6 19:34:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed bug #116095 removing the error message when
	  reapplying XInclude to a document.

Sat Jul  5 22:40:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied small changes to portability layer for 
	  compilation on DJGPP Ms-DOS compiler.

Sat Jul  5 22:30:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c HTMLparser.c: use the character() SAX callback
	  if the cdataBlock ain't defined.
	* xpath.c: fix bug #115349 allowing compilation when configured
	  with --without-xpath since the Schemas code needs NAN and co.

Sat Jul 5 00:51:30 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Fixed problem with multi-threading, shown by the test program
	testThreads.  After fix, ran multiple tests on various speed
	machines (single and dual processor X86), which all seem okay.

	* catalog.c: added missing xmlRMutexUnlock in xmlLoadCatalog

	* threads.c: added missing initialisation for condition variable
	  in xmlNewRMutex.

Sat Jun 21 16:10:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	Applying IPv6 patch from Archana Shah <archana.shah@wipro.com>
	closing bug #114837

	* configure.in: Added checks for IPv6 support and getaddrinfo().

	* acconfig.h: Defined HAVE_GETADDRINFO and SUPPORT_IP6.

	* config.h.in: Defined HAVE_GETADDRINFO and SUPPORT_IP6.

	* nanoftp.c: Structure xmlNanoFTPCtxt contains either sockaddr_storage
	  field or sockaddr_in field, depending upon the availability of IPv6
	  support.
	  have_ipv6(): Added to check for run-time IPv6 support.
	  (xmlNanoFTPScanURL), (xmlNanoFTPUpdateURL), (xmlNanoFTPScanProxy):
	  Modified to parse a URI with IPv6 address given in [].
	  (xmlNanoFTPConnect): Changed to use getaddrinfo for address
	  resolution, if it is available on the system, as gethostbyname
	  does not return IPv6 addresses on some platforms.
	  (xmlNanoFTPGetConnection): Modified type of dataAddr variable to
	  sockaddr_storage or sockaddr_in depending upon the IPv6 support.
	  Sending EPSV, EPRT or PASV, PORT depending upon the type of address
	  we are dealing with.

	* nanohttp.c: (have_ipv6): Added to check for run-time IPv6 support.
	  (xmlNanoHTTPScanURL), (xmlNanoHTTPScanProxy): Modified to parse
	  a URI with IPv6 address given in [].
	  (xmlNanoHTTPConnectHost): Modified to use getaddrinfo if it is
	  available on the system. Also IPv6 addresses will be resolved by
	  gethostbyname only if IPv6 run-time support is available.
	  (xmlNanoHTTPConnectAttempt): Modified to deal with IPv6 address.

Sat Jun 14 18:46:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js include/win32config.h 
	  include/libxml/xmlversion.h.in: Applied the patch for BCB
	  by Eric Zurcher.

Fri Jun 13 14:27:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/html/*: reverted back patch for #113521,
	  due to #115104 and while fixing #115101 . HTML URLs must not
	  be version dependent.

Fri Jun 13 12:03:30 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: do not generate &quot; for " outside of attributes
	* result//*: this changes the output of some tests

Mon Jun  9 12:28:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlIO.c: trying to fix #114277 about when file
	  remapping and escaping should really be attempted.

Mon Jun  9 11:06:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*: applied a patch from Gman for building docs
	* valid.c xmllint.c include/libxml/valid.h: applied a patch from
	  Gary Pennington to provide an allocator for xmlValidCtxt
	* xmlreader.c: applied patch from Jacek Konieczny fixing bug
	  #113580 about data not being passed immediately.

Thu Jun  5 11:31:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied a couple of patches from Mark Itzcovitz
	  to handle saving back "UTF-16" documents.

Mon Jun  2 21:56:15 MVT 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemas.c include/libxml/schemasInternals.h: committing
	  some work done while in the Maldives (hence the timezone on the
	  laptop !)
	* result/schemas/length3* test/schemas/deter0_*
	  test/schemas/group0_*: some tests added too

Mon Jun  2 15:34:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: small fix
	* xmlIO.c: fixed an error message

Tue May 20 14:21:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixing Red Hat bug #91013 where xmllint was
	  accepting an improper UTF8 sequence

Sat May 17 12:53:11 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* threads.c: applied the patch from Stéphane Bidoul for getting
	  rid of extra threads in a dynamic library.
	* win32/configure.js: threads default to 'native' now.

Fri May 16 13:17:52 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixing  bug #112904: html output method escaped
	  plus sign character in URI attribute.

Thu May 15 18:06:18 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* build_glob.py global.data globals.c parser.c
	  include/libxml/globals.h: patch from Stéphane Bidoul for setting
	  up threads global defaults.
	* doc/libxml2-api.xml: this extends the API with new functions
	* python/tests/Makefile.am python/tests/reader2.py
	  python/tests/thread2.py: integrated the associated testcase and
	  fixed the error string used in reader2

Wed May 14 14:56:46 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.spec.in python/Makefile.am: trying
	  to conciliate --with-python= requirements and RPM builds,
	  a PITA really...

Tue May 13 18:30:34 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: oops last commit introduced a memory leak.

Tue May 13 18:10:38 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c doc/xmllint.xml: added --nonet option
	* doc/Makefile.am: fixing #112803 by adding --nonet when calling
	  xsltproc or xmllint
	* doc/xmllint.xml doc/xmllint.1: also added --schema doc and
	  rebuilt
	* HTMLparser.c: cleaned up the HTML parser context build when 
	  using an URL

Tue May 13 16:35:04 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: added a comment about bug #112902 

Mon May 12 21:58:00 EDT 2003 William Brack <wbrack@mmm.com.hk>

	* minor cleanup of configure '--help' display
	* error.c: enhanced xmlParserPrintFileContext to fix bug #109942

Mon May 12 17:53:30 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: PI nodes in external subset were not freed :-\
	  fixes bug #112842

Mon May 12 11:23:27 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added --schema option to run WXS schema validation
	* xmlschemas.c xmlschemastypes.c include/libxml/schemasInternals.h:
	  tried to improve error reporting in the Schema code, some cleanup
	  too.

Sun May 11 16:13:20 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed some problems in the handling of errors,
	  and attributes addressed by references.
	* test/schemas/* result/schemas/*: dropped the verbosity level
	  and added a couple of new tests

Sat May 10 16:01:21 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: Stéphane Bidoul found an off by one addressing
	  error on the error handling.

Fri May  9 19:08:20 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: trying to fix #112673

Fri May  9 18:14:16 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c catalog.c parser.c relaxng.c: removed multiple
	  warning, this fixed a bug and should close #111574

Fri May  9 15:34:32 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixing bug #104081 with xs:all with an element
	  holding minOccurs="0"
	* test/schemas/all_* result/schemas/all_*: added some regression
	  tests for that bug
	* xmllint.c xmlreader.c: patches from Joerg Schmitz-Linneweber and
	  Garry Pennington to compile without schemas support.

Thu May  1 10:02:35 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a problem with xmlUnlinkNode() for DTDs.

Wed Apr 30 14:16:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xml2-config.in: try to fix Red hat bug #89957, do not
	  output -L/usr/lib64
	* xmlreader.c: fixed a typo in a comment

Tue Apr 29 07:32:02 MDT 2003 John Fleck <jfleck@inkstain.ent>

	* doc/tutorial/aph.html, ix01.html
	forgot to cvs add the new files. Thanks to Roland van Laar
	for pointing this out

Tue Apr 29 14:36:49 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c doc/libxml2-api.xml: fixing a function comment
	* doc/Makefile.am doc/apibuild.py doc/gnome-xml.sgml: switching
	  to the XML/XSLT doc generation closing #111799
	* doc/html/*: complete update of the HTML results

Mon Apr 28 14:51:41 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/defgen.xsl: fixed the conditional for unicode map,
	  removed hardcoded schema entries

Mon Apr 28 02:19:00 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/defgen.xsl: new file, stylesheet for generating 
	  win32/libxml2.def.src from doc/libxml2-api.xml
	* win32/libxml2.def.src: is autogenerated from now on, changes
	  to this file will not appear here anymore

Mon Apr 28 00:12:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js python/setup.py.in: applied patch
	  from Stéphane Bidoul for the Python bindings on the new
	  release.

Sun Apr 27 17:56:21 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* debugXML.c: included libxml/uri.h for xmlCanonicPath
	  declaration
	* win32/configure.js: thread-enabled build is now default
	* win32/libxml2.def.src: added more exports

Sun Apr 27 00:23:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*.xsl doc/*.html: updated the web site separated
	  developers from common pages, made the transition to XHTML1,
	  added validity checking to the makefile rules.

Sat Apr 26 23:17:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix for xmlIOParseDTD same as previous and reported
	  by Petr Pajas

Sat Apr 26 15:26:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied fix to xmlSAXParseDTD from Malcolm Tredinnick
	  closing #111638

Sat Apr 26 14:00:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: fixed a problem in the generator where
	  the way functions are remapped as methods on classes was
	  not symmetric and dependent on python internal hash order,
	  as reported by Stéphane Bidoul

Fri Apr 25 21:52:33 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/tutorial:
	xmltutorial.xml
	xmltutorial.pdf
	*.html
	add appendix on generating compiler flags, more indexing

Sat Apr 26 01:10:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* triodef.h vms/build_libxml.com: applied patch from Craig A. Berry
	  to get libxml-2.5.7 to compile on OpenVMS

Fri Apr 25 18:42:35 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing an xmlParseDTD bug raised by Petr Pajas

Fri Apr 25 15:20:29 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/xmlcatalog.1 doc/xmlcatalog_man.xml
	  doc/xmllint.1 doc/xmllint.xml: automated the generation of the
	  man page based on xsltproc and a stylesheet PI in the XML.

Fri Apr 25 12:37:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.*: trying to fix #110541 where &nbsp; generated
	  character preventing rendering by the man command.

Fri Apr 25 01:09:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in: preparing release 2.5.7
	* doc/*: updated and rebuilt the docs
	* doc/apibuild.py: fixed the script

Thu Apr 24 19:11:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/apibuild.py: make sure the OOM code don't
	  get in the way of the builds
	* doc/libxml2-api.xml python/libxml2class.txt: automatic update

Thu Apr 24 18:01:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am testOOM.c testOOMlib.[ch] : integrated the Out Of
	  Memory test from Havoc Pennington #109368
	* SAX.c parser.c parserInternals.c tree.c uri.c valid.c
	  xmlmemory.c xmlreader.c xmlregexp.c include/libxml/tree.h
	  include/libxml/parser.h: a lot of memory allocation cleanups
	  based on the results of the OOM testing
	* check-relaxng-test-suite2.py: seems I forgot to commit the
	  script.

Wed Apr 23 17:16:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: trivial fix for 109774 removing a warning

Wed Apr 23 15:49:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c SAX.c catalog.c debugXML.c parser.c: try to find
	  more places where xmlCanonicPath() must be used to convert
	  filenames to URLs, trying to fix #111088

Wed Apr 23 09:35:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: applied patch from 
	  Brent M Hendricks adding binding for xmlCatalogAddLocal

Tue Apr 22 15:18:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: tried to fix #98879 again in a more solid
	  way.

Tue Apr 22 13:58:43 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: added more exports from the relaxng and
	  xmlreader clan

Tue Apr 22 10:35:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c test/valid/ns* test/result/ns*: applied the patch
	  provided by Brent Hendricks fixing #105992 and integrated the
	  examples in the testsuite.

Tue Apr 22 01:06:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* TODO: updated a bit
	* configure.in: fixed the comment, threads now default to on
	* parserInternals.c: fixed an erroneous xmlMallocAtomic() call

Mon Apr 21 23:33:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c libxml.h parser.c parserInternals.c tree.c xmllint.c
	  xmlreader.c include/libxml/parser.h: a lot of performance work
	  especially the speed of streaming through the reader and push
	  interface. Some thread related optimizations. Nearly doubled the
	  speed of parsing through the reader.

Sun Apr 20 10:36:05 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	update man page to explain use of --stream

Sat Apr 19 02:03:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c catalog.c encoding.c globals.c
	  nanohttp.c parser.c parserInternals.c relaxng.c tree.c uri.c
	  xmlmemory.c xmlreader.c xmlregexp.c xpath.c xpointer.c
	  include/libxml/globals.h include/libxml/xmlmemory.h: added
	  xmlMallocAtomic() to be used when allocating blocks which
	  do not contains pointers, add xmlGcMemSetup() and xmlGcMemGet()
	  to allow registering the full set of functions needed by
	  a garbage collecting allocator like libgc, ref #109944

Fri Apr 18 16:37:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: switched to have thread support enabled by default,
	  didn't got troubles with ABI compatibility on Linux, hope it
	  won't break on strange OSes, if yes, report the system ID
	* doc/libxml2-api.xml: just rebuilt the API

Fri Apr 18 14:31:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.h include/libxml/parser.h parser.c xmlIO.c DOCBparser.c: 
	  added support for large file, tested with a 3+GB instance,
	  and some cleanup.
	* catalog.c: added a TODO
	* Makefile.am: added some "make tests" comments

Thu Apr 17 14:51:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: some cleanups
	* doc/xmlreader.html: extended the document to cover RelaxNG and
	  tree operations
	* python/tests/Makefile.am python/tests/reader[46].py: added some
	  xmlReader example/regression tests
	* result/relaxng/tutor*.err: updated the output of a number of tests

Thu Apr 17 11:35:37 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: valgrind pointed out an uninitialized variable error.

Thu Apr 17 11:06:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/relaxng.h relaxng.c include/libxml/xmlreader.h
	  xmlreader.c: augnemting the APIs, cleanups.
	* parser.c: cleanup bug #111005
	* xmlIO.c: added some missing comments

Wed Apr 16 17:46:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmllint.c: more work on RelaxNG streaming validation
	  trying to improve the subset compiled, and more testing.
	* doc/downloads.html doc/xml.html doc/xmlmem.html: some updates on the
	  documentation
	* test/relaxng/tutor11_1_3.xml: fixes the DTD path
	* result/relaxng/*.err: fix some of the outputs

Wed Apr 16 01:28:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlreader.c xmllint.c include/libxml/relaxng.h
	  include/libxml/xmlreader.h: implemented streaming of
	  RelaxNG (when possible) on top of the xmlReader interface,
	  provided it as xmllint --stream --relaxng .rng .xml
	  This seems to mostly work.
	* Makefile.am: updated to test RelaxNG streaming

Mon Apr 14 18:08:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: integrated the regexp
	  based validity checking of fragments of the document for
	  which the RNG can be compiled to regexps. Works on all regression
	  tests, only fix needed is related to error messages.

Sun Apr 13 21:51:00 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlregexp.c include/libxml/xmlautomata.h
	  include/libxml/xmlregexp.h: Starting work precompiling
	  parts of RelaxNG schemas. Not plugged onto validity checking
	  yet, just the regexp building part. Needed to extend some
	  of the automata and regexp APIs.

Fri Apr 11 21:36:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlreader.c include/libxml/xmlreader.h: make sure
	  xmllint --stream and xmllint --stream --valid returns errors
	  code appropriately

Fri Apr 11 10:59:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: Added the Expand()
	  and Next() operation to work on subtrees within the reader
	  framework.
	* doc/libxml2-api.xml python/libxml2class.txt: resulting updates
	* python/tests/reader5.py: added an example for those new
	  functions of the reader.

Thu Apr 10 23:38:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: patch from Vasily Tchekalkin to fix #109865

Thu Apr 10 15:32:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixing HasValue for namespace as raised by 
	  Denys Duchier

Wed Apr  9 14:07:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c include/libxml/HTMLparser.h:  exported
	  htmlCreateMemoryParserCtxt() it was static

Wed Apr  9 13:21:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
	  update from Charles Bozeman for date and duration types
	* test/schemas/date_0.* test/schemas/dur_0.*
	  result/schemas/date_0.* result/schemas/dur_0.*: updated too

Mon Apr  7 12:19:26 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c valid.c xpath.c include/libxml/tree.h include/libxml/valid.h:
	  fixing bug #107129, removing excessive allocation and calls
	  to *printf in the code to build QName strings.

Sat Apr  5 11:41:36 CEST 2003 Igoe Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: fixed conditional exports, reported by
	  Luke Murray.

Fri Apr  4 18:08:00 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a possible problem with xmlRecoverMemory()

Thu Apr  3 17:24:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* trio.c trio.h triodef.h trionan.c trionan.h triop.h triostr.c
	  triostr.h: Bjorn sent an update for the TRIO portability layer.

Tue Apr  1 21:57:26 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: exported new functions

Tue Apr  1 13:09:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing release 2.5.6
	* doc/*: updated and rebuilt the docs

Tue Apr  1 11:52:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed an uninitialized memory access pointed by valgrind
	  on C14Ntests

Tue Apr  1 00:12:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: one more fixup of error message reporting

Mon Mar 31 18:36:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on bug #109225, and fixed an uninitialized
	  variable pointed out by valgrind

Mon Mar 31 18:05:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: try to work on bug #109225 and provide better
	  error reports.
	* result/relaxng/* : this change the output of a number of tests
	* xinclude.c: fixing the parsed entity redefinition problem
	  raised on the list.
	* test/schemas/date_0.xsd: updated the date test c.f. E2-12

Mon Mar 31 13:19:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixed date comparison to handle the tzo
	  The only failures left are disagreements on Notations and
	  '+1' not being allowed for ulong, uint, ushort and ubyte.

Mon Mar 31 12:11:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixed gMonth parsing routine accordingly
	  to the XML Schemas errata
	  http://www.w3.org/2001/05/xmlschema-errata#e2-12

Sun Mar 30 23:04:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemastypes.c: more work on XML Schemas datatypes
	  and facets support. Currently only schemas with binHex or
	  base64 don't compile. A few error left in the test suite:
	  found 1035 test instances: 919 success 23 failures
	  most are gdate or gdateyear failing check, and a few cases where
	  James clark tests results are strange.
	* valid.c: allow to reuse the Notation checking routine without
	  having a validation context.
	* SAX.c: removed a #if 0

Sat Mar 29 17:35:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: forgot to apply one check from #106931 patch
	* xmlschemastypes.c: more work on XML Schemas datatypes

Sat Mar 29 11:49:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h xmlschemastypes.c: more work
	  on cleaning up XML Schemas datatypes based on James Clark tests
	  test/xsdtest/xsdtest.xml

Fri Mar 28 14:24:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented comparisons for Schemas values.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h: fixed
	  some bugs in duration handling, comparisons for durations
	  and decimals, removed all memory leaks pointed out by James
	  testsuite. Current status is now
	  found 238 test schemas: 197 success 41 failures
	  found 1035 test instances: 803 success 130 failures

Fri Mar 28 00:41:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h: fixed bugs and memory
	  leaks in the W3C XML Schemas code
	* xmlschemastypes.c: implemented nonPositiveInteger
	* test/schemas/length2_0.xsd result/schemas/length2_0_0.err:
	  fixed the test and result.

Thu Mar 27 22:23:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c tree.c: two patches from James Bursa on the HTML
	  parser and a typo
	* xmlschemastypes.c: reindenting, fixing a memory access
	  problem with dates.

Thu Mar 27 15:53:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing #109227 providing more context in case of 
	  start/end tag mismatch
	* python/tests/ctxterror.py python/tests/readererr.py: update the
	  tests accordingly

Thu Mar 27 15:22:41 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: should fix #109327 errors on memory accesses

Thu Mar 27 15:06:13 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: Fixed reopening of #78662 <form action="...">
	  is an URI reference

Wed Mar 26 22:38:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed bug #109160 on non-ASCII IDs

Wed Mar 26 17:30:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: Norm suggested a nicer error message for xml:space values
	  errors

Wed Mar 26 01:34:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c include/libxml/xpath.h: first part of the fix to
	  performance bug #108905, adds xmlXPathOrderDocElems() providing
	  document order for nodes.
	* python/libxml.c: Python may require TRIO as Albert Chin pointed out

Tue Mar 25 16:07:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: removing a warning with Sun compiler
	  bug #109154

Tue Mar 25 07:02:56 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	update xmllint man page with --relaxng option

Tue Mar 25 12:07:03 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/setup.py.in : was missing "drv_libxml2.py"

Mon Mar 24 19:38:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c xpath.c: some changes related to the new way of 
	  handling Result Value Tree, before 2.5.5

Mon Mar 24 16:36:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing release 2.5.5
	* doc/* : updated the documentation and regenerated it.

Mon Mar 24 14:56:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed some problems related to #75813 about handling
	  of Result Value Trees

Sun Mar 23 22:57:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied a set of patches from Lorenzo Viali correcting
	  URI parsing errors.

Sun Mar 23 22:00:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: validity status was not passed back when validating in
	  entities, but raised by Oliver Fischer

Sun Mar 23 21:30:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: avoid escaping ',' in URIs

Sun Mar 23 12:57:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #108976 get the ID/REFs to reference 
	  the ID in the document content and not in the entity copy
	* SAX.c include/libxml/parser.h: more checking of the ID/REF
	  stuff, better solution for #107208
	* xmlregexp.c: removed a direct printf, dohhh
	* xmlreader.c: fixed a bug on streaming validation of empty 
	  elements in entities
	* result/VC/ElementValid8 test/VCM/v20.xml result/valid/xhtml1.xhtml:
	  cleanup of the validation tests
	* test/valid/id* test/valid/dtds/destfoo.ent result/valid/id*:
	  added more ID/IDREF tests to the suite

Sat Mar 22 23:38:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed #107043 removing 2 warnings with Sun One
	  compiler.

Sat Mar 22 18:50:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: valgrind'ed and cleaned up a couple of memory issues.

Sat Mar 22 16:15:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fix bug #107208 avoid false duplicates when ID/REFs are
	  defined in entities content

Sat Mar 22 15:53:27 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: Fixed validation bug #108858 on namespace names using
	  entities and reported by Brent Hendricks
	* xmllint.c: report xmlTextReaderHasValue() result in --stream
	  --debug output.

Sat Mar 22 13:32:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed bug #108801 reported by Malcolm Tredinnick
	  about the DocType node not being reported sometimes.
	* python/tests/reader.py: added to test to the regression checks

Sat Mar 22 01:57:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed bug #108546 on long CDATA (or text nodes)
	  reported by Edd Dumbill

Sat Mar 23 01:00:24 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c parserInternals.c: patch from
	  johan@evenhuis.nl for #107937 fixing some line counting
	  problems, and some other cleanups.
	* result/HTML/: this result in some line number changes

Fri Mar 21 22:19:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in Makefile.am: fixed Red Hat bug #86118 use libxml2.spec
	  instead of libxml.spec
	* relaxng.c: fixed some of the error reporting excessive
	  verbosity
	* catalog.c debugXML.c valid.c xmlreader.c xmlschemas.c xpath.c
	  xmlschemastypes.c: removed some warnings from gcc
	* doc/libxml2-api.xml: rebuilt

Fri Mar 21 17:25:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: another optimization, for choice this time
	* result/relaxng/spec1* result/relaxng/tutor12_1* 
	  result/relaxng/tutor3_7: cleanups.

Fri Mar 21 13:41:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed xmlRelaxNGNodeMatchesList
	* test/relaxng/testsuite.xml: augmented the test suite
	* result/relaxng/spec1* result/relaxng/tutor12_1*: this fixes
	  some schemas validation tests in the presence of foreign 
	  namespaces.

Fri Mar 21 02:23:34 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: added another interleave speedup.

Thu Mar 20 17:22:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: added integer and fixed one of the
	  IDREFS regression tests pbm
	* result/relaxng/docbook_0.err: updated

Wed Mar 19 21:58:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlschemastypes.c: attempt to cope with ID/IDREF(S)
	  declared both in the DTD and in the Schemas <grin/>
	* relaxng.c: more debug, added a big optimization for <mixed>
	* test/relaxng/testsuite.xml: augmented the testsuite
	* test/relaxng/ result/relaxng: added the RelaxNG spec and a 
	  DocBook example to the regression tests

Wed Mar 19 11:34:10 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py: cosmetic change for output
	* relaxng.c: try to minimize calls to malloc/free for states.

Tue Mar 18 17:50:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: removed a warning
	* xmlschemastypes.c: more cleanup, added ENTITY and ENTITIES
	  support
	* check-relaxng-test-suite.py check-xsddata-test-suite.py:
	  cleanup/improvements of the regression tests batch
	* test/relaxng/testsuite.xml: augmented libxml2 own testsuite

Tue Mar 18 12:36:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed error msg cleanup deallocation
	* xmlschemastypes.c: added a function to handle lists of
	  atomic types, added support for IDREFS

Tue Mar 18 01:28:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c valid.c xmlschemastypes.c: added Datatype ID
	  and IDREF, usable from RelaxNG now
	* include/libxml/xmlschemastypes.h: need to add a new interface
	  because the validation modifies the infoset
	* test/relaxng/testsuite.xml: extended the testsuite

Mon Mar 17 16:34:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed the last core RelaxNG bug known #107083,
	  schemas datatype ID/IDREF support still missing though.
	* xmlreader.c: fix a crashing bug with prefix raised by
	  Merijn Broeren
	* test/relaxng/testsuite.xml: augmented the testsuite with
	  complex inheritance tests

Sun Mar 16 18:45:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: switched back to the previous Relax-NG code base,
	  the derivation algorithm need severe constraining code to avoid
	  combinatorial explosion. Fixed the problem with Sebastian Rahtz
	  TEI based example and other bugs
	* result/relaxng/*err: updated the results
	* test/relaxng/testsuite.xml: started a new test suite 

Sat Mar 15 22:26:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: After coming to the conclusion
	  that the original RelaxNG validation code was un-fixeable, it got
	  rewritten to use the derivation algorithm from James Clark and
	  redebugged it (nearly) from scratch:
	  found 373 test schemas: 372 success 1 failures
	  found 529 test instances: 529 success 0 failures

Tue Mar 11 12:08:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c: fix some recursion problems introduced in the
	  last release.
	* relaxng.c: more debugging of the RNG validation engine, still
	  problems though.

Mon Mar 10 14:10:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: stop generating wrong result file with * in name
	* relaxng.c: fixing the include bug raised by Sebastian Rahtz
	* result/relaxng/demo* test/relaxng/demo: added the tests from
	  Sebastian reproducing the problem.

Sun Mar  9 18:02:31 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.1: regenerating man page from xmllint.xml to pick
	  up Aleksey's change

Sun Mar  9 13:53:16 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* xmllint.c doc/xmllint.xml: use $XMLLINT_INDENT environment
	variable to control the indentation for the xmllint "--format" 
	option

Sat Mar  8 14:27:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* encoding.c: applied Gennady's patch against buffer overrun

Fri Mar  7 19:29:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* test/xsdtest/xsdtest.xml uri.c: after and exchange with James
	  Clark it appeared I had bug in URI parsing code ...
	* relaxng.c include/libxml/relaxng.h: completely revamped error
	  reporting to not lose message from optional parts.
	* xmllint.c: added timing for RNG validation steps
	* result/relaxng/*: updated the result, all error messages changed

Fri Mar  7 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix bug #107804, the algorithm used for document order
	  computation was failing on attributes.

Thu Mar  6 22:35:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix bug #107764 , possibility of buffer overflow
	  in xmlValidDebug()

Wed Mar  5 17:41:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c include/libxml/nanoftp.h: adding xmlNanoFTPDele()
	  from Philipp Dunkel

Wed Mar  5 10:57:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastype.c: made powten array static it should not be exported
	* HTMLparser.c: fix bug #107361 by reusing the code from the XML 
	  parser function.
	* testHTML.c: get rid of valgrind messages on the HTML SAX tests

Fri Feb 28 00:23:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a node dump crash on attributes
	* test/xsdtest/xsdtest.xml test/xsdtest/xsdtest.xsl: fixed
	  an URI test bug and get better output.

Thu Feb 27 22:28:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py: give more infos
	* relaxng.c: fix a bug reported by Sebastian Rahtz and
	  REF->DEF in attribute values.

Thu Feb 27 21:09:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py test/xsdtest/xsdtest.xml
	  test/xsdtest/xsdtest.xsl: import of the XSD Datatype
	  regression tests from James Clark.

Thu Feb 27 18:40:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemas.c xmlschemastypes.c
	  include/libxml/xmlschemastypes.h: added param support for relaxng
	  type checking, started to increment the pool of simple types
	  registered, still much work to be done on simple types and
	  facets checkings.

Wed Feb 26 16:45:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixes again one of the problem raised by
	  James Clark in #106788

Wed Feb 26 15:46:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: Fixed a couple of problem raised by James Clark
	  in bug #107083, the support for ID/IDREF/IDREFS at the WXS
	  datatype level still not fixed though.

Mon Feb 24 21:09:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release 2.5.4
	* doc/*: updated and rebuilt the docs
	* relaxng.c: removed warnings
	* result/relaxng/*: updated the results

Mon Feb 24 20:53:17 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixes a DTD regexp generation problem.

Mon Feb 24 20:12:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixes bug #105998 about false detection of
	  attribute consumption loop.

Mon Feb 24 19:14:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: Fixes bug #106931 in XInclude entities merging.

Mon Feb 24 18:50:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed bug #105992

Mon Feb 24 18:14:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed xmlSetProp and al. when the node passed is not an
	  element.
	* relaxng.c: fixed bugs 7.3 (though not complete) and memory leaks
	  found 373 test schemas: 369 success 4 failures
	  found 529 test instances: 525 success 4 failures
	* check-relaxng-test-suite.py: added memory debug reporting

Mon Feb 24 12:41:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c parser.c: some warning removal on Igor's patch
	* tree.c: seems I messed up with #106788 fix
	* python/libxml.c: fixed some base problems when Python provides
	  the resolver.
	* relaxng.c: fixed the interleave algorithm 
	  found 373 test schemas: 364 success 9 failures
	  found 529 test instances: 525 success 4 failures
	  the resulting failures are bug in the algorithm from 7.3 and
	  lack of support for params

Sun Feb 23 14:49:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: another fix for nodeinfo in entities problem
	* tree.c entities.c: fixed bug #106788 from James Clark
	  some spaces need to be serialized as character references.

Sat Feb 22 18:28:16 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c uri.c: fixed the bug I introduced in the path
	  handling, reported by Sebastian Bergmann

Sat Feb 22 00:19:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing some nodeinfo in entities problem raised
	  by Glenn W. Bach
	* relaxng.c: implemented the first section 7.3 check
	* result/relaxng/*: updated the results

Fri Feb 21 18:12:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed some problems in the previous commit
	  and finished implementing 4.16 rules checking
	  found 373 test schemas: 353 success 20 failures
	  found 529 test instances: 519 success 6 failures
	* result/relaxng/*: updated the results

Fri Feb 21 16:37:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented checks from section 7.2

Thu Feb 20 16:00:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented the checks from section 7.1, fixed
	  some of the 4.20 and 4.21 problems.
	  found 373 test schemas: 338 success 35 failures
	  found 529 test instances: 519 success 6 failures
	* result/relaxng/*: updated the results

Thu Feb 20 01:09:24 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented the 4.20 and 4.21 simplification rules.
	* result/relaxng/*: updated the results

Wed Feb 19 18:30:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more bugfixes
	* result/relaxng/*: updated the results

Wed Feb 19 15:39:56 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* DOCBparser.c: obsoleted xmlNormalizeWindowsPath
	* HTMLparser.c: obsoleted xmlNormalizeWindowsPath
	* SAX.c: ensured xmlDoc.URL is always canonic
	* parser.c: obsoleted xmlNormalizeWindowsPath
	* uri.c include/libxml/uri.h: introduced xmlCanonicPath
	* xmlIO.c include/libxml/xmlIO.h: obsoleted xmlNormalizeWindowsPath
	* win32/libxml2.def.src: added few exports

Wed Feb 19 14:26:51 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: patched to have shared libraries
	  for Python regression tests and static binaries for gdb debug
	  in my development environment
	* relaxng.c: more bugfixes 
	  found 373 test schemas: 296 success 77 failures
	  found 529 test instances: 516 success 8 failures
	* result/relaxng/*: updated the results

Wed Feb 19 01:17:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: guess what ! Relax-NG bugfixing, what a surprise...

Tue Feb 18 22:09:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: float/double check bugfix
	* tree.c include/libxml/tree.h: exported a function for NMTOKEN
	  validation
	* xmlreader.c: add a TODO for Jody
	* relaxng.c: bugfix bugfix bugfix
	  found 373 test schemas: 300 success 73 failures
	  found 529 test instances: 507 success 10 failures
	* result/relaxng/*: updated the results

Tue Feb 18 00:33:17 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c check-relaxng-test-suite.py: more RelaxNG bug hunting

Mon Feb 17 18:23:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c check-relaxng-test-suite.py: more work on the
	  RelaxNG implementation conformance testing.
	  found 373 test schemas: 284 success 89 failures
	  found 529 test instances: 448 success 47 failures
	* result/relaxng/*: updated the results

Sun Feb 16 16:48:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* ChangeLog tree.c doc/libxml-doc.el doc/libxml2-api.xml: applied
	  a patch from Kjartan Maraas to fix some typos

Sun Feb 16 16:40:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more bug-hunting
	* testRelax.c include/libxml/relaxng.h: added --tree to dump the
	  intermediate rng tree
	* python/generator.py: patch from Stéphane Bidoul to fix the generator
	  on python < 2.2

Fri Feb 14 17:49:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-relaxng-test-suite.py relaxng.c: more testing on the
	  Relax-NG front, cleaning up the regression tests failures
	  current state and I forgot support for "mixed":
	  found 373 test schemas: 280 success 93 failures
	  found 529 test instances: 401 success 68 failures
	* tree.c include/libxml/tree.h xmlschemastypes.c: finished and
	  moved the Name, NCName and QName validation routine in tree.c
	* uri.c: fixed handling of URI ending up with #, i.e. having
	  an empty fragment ID.
	* result/relaxng/*: updated the results

Thu Feb 13 16:49:24 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py: improved the script accordingly
	  to the XInclude regression tests updates
	* xpointer.c: Implemented XPointer element() Scheme W3C PR of 13
	  November 2002
	* result/XPath/xptr/chapterschildseq result/XPath/xptr/vidchildseq
	  test/XPath/xptr/chapterschildseq test/XPath/xptr/vidchildseq:
	  augmented the Xpointer testsuite for the element() scheme

Thu Feb 13 12:00:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: added TODO for the DTD compatibility spec
	* xinclude.c: more bug fixes driven by the testsuite 

Tue Feb 11 19:01:02 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py xinclude.c: Work on the W3C/NIST
	  regression tests for XInclude, improved the script, improving
	  XInclude error reporting mechanism

Mon Feb 10 17:19:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/* configure.in: preparing release 2.5.3

Mon Feb 10 17:11:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: trying to fix #104934 about some XHTML1 serialization
	  issues.

Mon Feb 10 16:41:13 CET 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c xmlIO.c: fixing bug #104646 about iconv based
	  encoding conversion when the input buffer stops in the
	  middle of a multibyte char

Mon Feb 10 15:24:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* test/relaxng/OASIS/spectest.xml: OASIS RelaxNG testsuite
	* check-relaxng-test-suite.py: python script to run regression
	  against OASIS RelaxNG testsuite
	* relaxng.c: some cleanup tweaks
	* HTMLparser.c globals.c: cleanups in comments
	* doc/libxml2-api.xml: updated the API
	* result/relaxng/*: errors moved files, so large diffs but
	  no changes at the semantic level.

Mon Feb 10 01:00:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixing #105678 problem when dumping a namespace node.

Mon Feb 10 00:30:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed doc comment problems
	* python/generator.py python/libxml_wrap.h python/types.c: adding
	  RelaxNG wrappers
	* python/tests/Makefile.am python/tests/relaxng.py: added a specific
	  test of those early Python RelaxNG bindings

Sun Feb  9 15:18:43 CET 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixes a libtool problem on AMD 64bits builds
	* relaxng.c: found the validation problem I had with interleave
	  when not covering all remaining siblings
	* Makefile.am test.relaxng/* result/relaxng/*: augmented the
	  testsuite and check the RNG schemas against the RNG schemas
	  given in appendix A

Sat Feb  8 18:55:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.msvc: updates for RelaxNG
	* win32/Makefile.mingw: updates for RelaxNG
	* win32/libxml2.def.src: added RelaxNG exports

Fri Feb  7 14:00:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: applied another bug fix from Sean Chittenden

Fri Feb  7 13:34:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in xmllint.c: I f...ed up the default configuration
	  of schemas and --relaxng option display in xmllint, pointed by
	  Morus Walter.
	* xlink.c: Sean Chittenden pointed a couple of errors in the XLink
	  detection module, fixes bug #105374.

Fri Feb  7 01:43:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: added the boolean base type.

Thu Feb  6 10:23:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: started implementing some of the missing
	  default simple types
	* result/relaxng/*: updated the results

Wed Feb  5 15:28:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*: updated the docs, ready for 2.5.2 release

Wed Feb  5 14:15:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c tree.c xmlIO.c: comments cleanups
	* Makefile.am: use xmllint for doing the RelaxNG tests
	* configure.in: preparing 2.5.2 made schemas support default to
	  on instead of off
	* relaxng.c: removed the verbosity
	* xmllint.c: added --relaxng option
	* python/generator.py python/libxml_wrap.h: prepared the integration
	  of the new RelaxNG module and schemas
	* result/relaxng/*: less verbose output

Wed Feb  5 12:00:36 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: do not run content model validation if the
	  content is not determinist

Wed Feb  5 11:43:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: added the redefinition of namespaced attribute
	  check that was missing as Fabrice Desré pointed out.

Wed Feb  5 11:09:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c include/libxml/HTMLparser.h: applied HTML
	  improvements from Nick Kew, allowing to do more checking
	  to HTML elements and attributes.

Tue Feb  4 23:47:06 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixing bug #105137 about entities declaration
	  needing to be copied to the including document.

Tue Feb  4 20:26:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed bug #104817 with delegateURI
	* xpath.c: fixing bugs #104123 and #104125

Tue Feb  4 17:12:56 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in valid.c xmlreader.c python/libxml_wrap.h 
	  python/types.c: fixing #104096 to compile without regexps

Tue Feb  4 16:31:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing bug #103969 forgot to add an epsilon transition
	  when building the automata for elem*

Tue Feb  4 16:21:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from Arne de Bruijn fixing 
	  bug #103827

Tue Feb  4 16:17:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: updating a comment, fixing #103776

Tue Feb  4 16:05:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug 105049 for validity checking of content
	  within recursive entities.

Tue Feb  4 15:40:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: try to fix # 105049
	* relaxng.c xmlschemastypes.c: a couple of changes and extensions
	* tree.c: updated a function comment

Tue Feb  4 00:20:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: more work on grammars and refs/defs
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Mon Feb  3 14:16:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: more work on name classes, except support
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Mon Feb  3 11:56:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: more work on name classes, the "validate all" schemas
	  seems to work now.
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Mon Feb  3 09:50:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: removed an unprotedted debug message Aleksi Suhonen
	* parser.c: put a guard against infinite document depth, basically
	  trying to avoid another kind of DoS attack.
	* relaxng.c: some code w.r.t. nameClasses

Sun Feb  2 17:01:43 CET 2003 Daniel Veillard <daniel@veillard.com>

	* test/relaxng/* result/relaxng/*: check all the namespace support
	  was actually correct based on tutorial section 10.

Sun Feb  2 15:33:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: include seems to work okay now
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Sat Feb  1 19:44:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: a bit of work done in the train back.
	* test/relaxng/*: added one of the include tests

Thu Jan 30 14:06:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: more work done in the train
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Wed Jan 29 23:44:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: debugging of externalRef
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Wed Jan 29 22:06:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG, implementing externalRef
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests
	* Makefile.am: cleanup to Relaxtests target

Wed Jan 29 00:08:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG, implementing interleave
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Tue Jan 28 21:56:49 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG, implementing interleave
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Mon Jan 27 07:35:29 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/customfo.xsl
	* doc/tutorial/customhtml.xsl
	adding stylesheet customizations used to generate fo
	for pdf and html

Mon Jan 27 13:29:43 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests
	* xmlschemastypes.c: added a number of base type definition but not
	  the associated checks, those are still TODOs

Sun Jan 26 17:37:06 MST 2003 John Fleck <jfleck@inkstain.net>

	in docs/tutorial:
	* apa.html
	* apb.html
	* apc.html
	* apd.html
	* ape.html
	* apf.html
	* apg.html
	* ar01s02.html
	* ar01s03.html
	* ar01s04.html
	* ar01s05.html
	* ar01s06.html
	* ar01s07.html
	* ar01s08.html
	* index.html
	* xmltutorial.pdf
	* xmltutorial.xml
	add index to tutorial

Sun Jan 26 17:02:29 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog.1
	* doc/xmlcatalog_man.html
	* doc/xmlcatalog_man.xml
	belatedly fixing bug #93622 (adds rewriteURI type to
	"--add" option in xmlcatalog man page

Sun Jan 26 20:47:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c xmllint.c: applied patch for NetBSD by
	  Julio Merino, closing #104475

Sun Jan 26 20:38:43 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Sun Jan 26 01:49:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Sat Jan 25 18:59:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* README: updated the policy on private mail answers
	* relaxng.c: more work on Relax-NG
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Fri Jan 24 15:12:44 CET 2003 Daniel Veillard <daniel@veillard.com>

	* error.c parser.c tree.c: applied a documentation patch from
	  Stefan Kost

Fri Jan 24 02:00:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG
	* doc/*: regenerated the docs
	* test/relaxng/* result/relaxng/*: updated and augmented the
	  Relax-NG regression tests and results

Thu Jan 23 19:26:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in relaxng.c include/libxml/relaxng.h:
	  First commit of the new Relax-NG validation code, not generally
	  useful yet.
	* test/relaxng/* result/relaxng/*: current state of the regression
	  tests

Thu Jan 23 19:22:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: minimized the memory allocated for GetContent
	  and a bit of cleanup.

Thu Jan 23 17:41:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: seems there is no good reasons to
	  not generate bindings for XPointer

Tue Jan 21 13:19:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c doc/apibuild.py: applied a new patch from
	  Stéphane Bidoul for cleanups
	* doc/libxml2-api.xml: rebuilt the API description with
	  new entry points

Mon Jan 20 23:25:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/drv_libxml2.py python/generator.py
	  python/libxml.c python/libxml.py python/libxml_wrap.h
	  python/types.c: patch from Stéphane Bidoul for better per
	  context error message APIs
	* python/tests/ctxterror.py python/tests/readererr.py:
	  update of the tests

Sun Jan 19 17:09:28 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/guidelines.html
	grammar and spelling cleanup

Fri Jan 17 00:31:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h python/generator.py
	  python/libxml.c python/libxml.py win32/libxml2.def.src: applied
	  a patch from Stéphane Bidoul to allow per XMLtextReader error
	  and warning handling
	* python/tests/Makefile.am python/tests/readererr.py: adding the
	  specific regression test

Tue Jan 14 17:00:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Alexey Efimov pointed out that concat('a', 'b', )
	  should raise a syntax error

Tue Jan 14 15:39:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: cleanup patch from Stéphane Bidoul

Tue Jan 14 14:41:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fixing bug #103100 with a dummy UTF8ToUTF8 copy

Tue Jan 14 12:40:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml_wrap.h python/types.c: applied and fixed a patch
	  from Stéphane Bidoul to provide per parser error handlers at the
	  Python level.
	* python/tests/Makefile.am python/tests/ctxterror.py: added a
	  regression test for it.

Tue Jan 14 01:15:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed the streaming property of the reader,
	  it was generating tree faster than consuming it. Pointed out
	  by Nate Myers
	* tree.c: fixed a bug in xmlSaveFormatFileEnc if passed a NULL doc

Sun Jan 12 22:18:02 CET 2003 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: added more xmlreader and other exports

Fri Jan 10 18:04:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix to the XPath implementation for parent and
	  ancestors axis when operating on a Result Value Tree.
	  Fixes bug #100271

Fri Jan 10 17:07:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c xmlIO.c: patch from Stefano Zacchiroli
	  to fix some URI/file escaping problems

Fri Jan 10 16:20:34 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: fixed a bug raised by Raymond Wiker, 
	  docSetRootElement() should not raise an exception if the
	  return is None

Fri Jan 10 14:13:03 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py python/libxml.c python/libxml2-python-api.xml:
	  fixed bug #102181 by applying the suggested change and fixing
	  the generation/registration problem.

Fri Jan 10 13:47:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed bug #102960 by reusing the XML name parsing
	  routines.

Fri Jan 10 00:16:49 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: one more IsEmptyElement craziness, that time in
	  external parsed entities if substitution is asked.
	* python/tests/reader3.py: added a specific test.

Thu Jan  9 22:35:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/drv_libxml2.py: update from Stéphane Bidoul: python 2.1
	  support and improved error handler registration

Thu Jan  9 14:16:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c: fixes #102920 about namespace handling in
	  HTML output and section 16.2 "HTML Output Method" of XSLT-1.0
	* README: fixed a link

Wed Jan  8 18:32:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* NEWS: preparing 2.5.1 release
	* SAX.c parser.c: fixing XmlTextReader bug

Wed Jan  8 00:13:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fuck, I introduced a memory leak on external parsed
	  entities in 2.5.0 :-(

Tue Jan  7 12:12:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: another fix needed as pointed by Christophe Merlet
	  for --stream --debug if compiled without debug support.

Mon Jan  6 20:53:08 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1:
	update man page with --stream and --chkregister

Tue Jan  7 01:17:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c: fixed --with-threads compile
	* xmllint.c: fixed --without-debug compile
	* include/libxml/globals.h: cleanup
	* include/libxml/schemasInternals.h: add a missing include

Mon Jan  6 14:06:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing 2.5.0 release
	* SAX.c: only warn in pedantic mode about namespace name 
	  brokenness
	* globals.c: fix a doc generation problem
	* uri.c: fix #101520
	* doc/*: updated and rebuilt the doc for the release, including
	  stylesheet update
	* python/Makefile.am: fix a filename bug

Mon Jan  6 12:05:12 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/tutorial/* : fixed #101894 if doc == NULL xmlFreeDoc 
	  should not be called.

Mon Jan  6 11:59:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* libxml-2.0.pc.in: applied the patch to fix #101894

Sun Jan  5 23:35:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c : applied patch from Lukas Schroeder for register callbacks
	* valid.c: modified patch from Lukas Schroeder to test
	  register callbacks with --chkregister

Sun Jan  5 02:23:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: seriously changed the way data are pushed to
	  the underlying parser, go by block of 512 bytes instead of
	  tryng to detect tag boundaries at that level. Changed the
	  way empty element are detected and tagged.
	* python/tests/reader.py python/tests/reader2.py
	  python/tests/reader3.py: small changes mostly due to context
	  reporting being different and DTD node being reported. Some
	  errors previously undetected are now caught and fixed.
	* doc/xmlreader.html: flagged last section as TODO

Sat Jan  4 20:40:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: integrated the Python 2.2 optimizations
	  from Hannu Krosing, while maintaining compatibility with 
	  1.5 and 2.1

Sat Jan  4 17:33:17 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: a bit of cleanup
	* xmlreader.c: small fix
	* doc/xmlreader.html: more work on the XmlTextReader tutorial
	* python/libxml.py: a few fixes pointed out by Hannu Krosing

Sat Jan  4 13:46:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/setup.py.in: patch from Stéphane Bidoul to include
	  drv_libxml2.py in setup.py

Sat Jan  4 01:43:06 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/xmlreader.html: starting documenting the new XmlTextReader
	  interface.

Fri Jan  3 17:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added the --stream flag to use the TextReader API
	* xmlreader.c: small performance tweak

Fri Jan  3 13:50:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader2py: okay the DTD validation
	  code on top of the XMLTextParser API should be solid now.

Fri Jan  3 02:17:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader2py: Fixing some more mess
	  with validation and recursive entities while using the
	  reader interface, it's getting a bit messy...

Thu Jan  2 15:15:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: another couple of problem
	  related to IsEmptyElement reported by Stéphane Bidoul needed 
	  some fixes.

Thu Jan  2 13:57:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in python/Makefile.am python/drv_libxml2.py:
	  integrated drv_libxml2.py Python xml.sax driver from Stéphane Bidoul
	  based on the python XmlTextReader interface.

Wed Jan  1 22:05:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: backing out one change in the last patch which broke the
	  regression tests

Wed Jan  1 21:57:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* global.data globals.c tree.c include/libxml/globals.h: applied
	  an old patch from Lukas Schroeder to track node creation and
	  destruction. Probably missing a lot of references at the moment
	  and not usable reliably.

Wed Jan  1 20:12:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/Makefile.am doc/news.xsl: generate the NEWS file
	  from doc/news.html and a stylesheet

Wed Jan  1 16:09:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed another couple of
	  xmlreader bugs reported by Stéphane Bidoul and added tests.

Wed Jan  1 15:42:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader2.py: fixed another validity
	  checking in external parsed entities raised by Stéphane Bidoul
	  and added a specific regression test.
	* python/tests/reader3.py: cleanup

Tue Dec 31 15:44:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader2.py: fixed a problem with
	  validation within entities pointed by Stéphane Bidoul, augmented
	  the tests to catch those.

Tue Dec 31 12:15:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: modified the generator to allow keeping
	  class references when creating new classes, needed to fix a bug
	  pointed by Stéphane Bidoul where the input buffer of the
	  xmlTextReader instance gets destroyed if the python wrapper for
	  the input is not referenced anymore.

Mon Dec 30 19:39:36 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed another pair of problem
	  pointed by Stéphane Bidoul: depth start at 0 and a parse problem.

Mon Dec 30 13:36:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed another problem
	  pointed by Stéphane Bidoul

Mon Dec 30 12:39:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed a limit case problem
	  with "<a/>"

Mon Dec 30 11:53:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: warn on xmlns:prefix="foo"
	* xmlreader.c python/tests/reader.py: fixed a couple of problem
	  for namespace attributes handling.

Mon Dec 30 00:59:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* entities.c parser.c tree.c include/libxml/entities.h: Fixed
	  a really nasty problem raised by a DocBook XSLT transform
	  provided by Sebastian Bergmann

Sun Dec 29 12:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed a bug pointed out
	  by Stéphane Bidoul and integrated it into the tests

Sat Dec 28 23:49:12 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml:
	  extended the XmlTextReader API a bit, adding accessors for
	  the current doc and node, and an entity substitution mode for
	  the parser.
	* python/libxml.py python/libxml2class.txt: related updates
	* python/tests/Makefile.am python/tests/reader.py 
	  python/tests/reader2.py python/tests/reader3.py: updated a bit
	  the old tests and added a new one to test the entities handling

Sat Dec 28 22:11:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml2class.txt 
	  python/tests/reader.py python/tests/reader2.py: changed the
	  generator to provide casing for the XmlTextReader similar to
	  C# so that examples and documentation are more directly transposable.
	  Fixed the couple of tests in the suite.

Sat Dec 28 15:55:32 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/guidelines.html: added a document on guildeline for
	  publishing and deploying XML

Fri Dec 27 20:35:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlreader.c: final touch running DTD validation
	  on the XmlTextReader
	* python/tests/Makefile.am python/tests/reader2.py: added a
	  specific run based on the examples from test/valid/*.xml

Fri Dec 27 15:17:20 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: added a few predefined xmlTextReader parser
	  configuration values.

Fri Dec 27 12:57:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml_wrap.h: trying to fix #102037

Fri Dec 27 12:18:14 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixing bug #95296, when the predefined entities
	  are redefined in the DTD the default one must be used
	  instead anyway.

Wed Dec 25 19:22:06 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	Add discussion of XML_DEBUG_CATALOG to xmllint man
	page - bug #100907

Mon Dec 23 16:54:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: Fixed the empty node detection to avoid reporting
	  an nonexistent close tag.

Mon Dec 23 15:42:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/setup.py.in: patch from Stéphane Bidoul
	  for Python 2.1

Sun Dec 22 11:24:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* testC14N.c vms/config.vms: applied Craig A. Berry patches for VMS

Fri Dec 20 11:27:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml python/tests/reader.py: one really need
	  to provide the base URI information when creating a reader parser
	  from an input stream. Updated the API and the example using it.

Fri Dec 20 01:11:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* testReader.c xmlreader.c valid.c include/libxml/tree.h
	  include/libxml/valid.h include/libxml/xmlreader.h: working on
	  DTD validation on top of xml reader interfaces. Allows to
	  validate arbitrary large instances. This required some extensions
	  to the valid module interface and augmenting the size of xmlID
	  and xmlRef structs a bit.
	* uri.c xmlregexp.c: simple cleanup.

Wed Dec 18 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: more
	  work on the xml reader interfaces.
	* AUTHORS MAINTAINERS doc/* win32/*: updated Igor's mail and the
	  Web page for the Windows binaries.

Tue Dec 17 19:31:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied a patch for VMS following the report by
	  Nigel Hall

Tue Dec 17 11:29:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: the parseStartTag bug fix wasn't complete.

Mon Dec 16 23:00:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Vyacheslav Pindyura managed to trigger a bug in
	  parseStartTag, fixing it.
	* test/att4 result/att4 result/noent/att4: adding the test
	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
	  more methods to XmlTextReader.

Mon Dec 16 19:31:16 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: added more xml reader exports
	* win32/Makefile.msvc win32/Makefile.mingw: added xml reader interface
	  to the build

Mon Dec 16 06:36:54 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	plus generated html and pdf
	Updating tutorial again based on further comments from Niraj
	Tolia on the last iteration

Sun Dec 15 21:27:30 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/includekeyword.c
	* doc/tutorial/includegetattribute.c
	plus generated html and pdf
	Adding fix from Niraj Tolia to tutorial to properly free memory.

Mon Dec 16 00:34:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
	  more methods of XmlTextReader.
	* python/libxml2class.txt python/tests/reader.py: this increased the
	  methods in the bndings, augmented the test to check those new
	  functions.

Sat Dec 14 23:57:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c doc/libxml2-api.xml: added the close and getattribute
	  methods of XmlTextReader.
	* python/generator.py python/libxml_wrap.h python/types.c 
	  python/libxml2class.txt: added the reader to the Python bindings
	* python/tests/Makefile.am python/tests/reader.py: added a specific
	  test for the Python bindings of the Reader APIs
	* parser.c: small cleanup.

Fri Dec 13 11:39:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fallback was only copying the first child not the
	  full child list of the fallback element, closes #89684 as reopened
	  by Bernd Kuemmerlen

Thu Dec 12 13:34:59 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: exported htmlNodeDumpOutput

Thu Dec 12 10:59:11 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release of 2.4.30
	* doc/apibuild.py doc/libxml2-api.xml: fixups to the api builder,
	  gives enum values, fix functype return type, put back fields in
	  structs 
	* doc/*: updated the docs rebuilt

Thu Dec 12 01:09:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: patch from Mark Vakoc
	  about htmlNodeDumpOutput location.
	* xpath.c: removed an undefined function signature
	* doc/apibuild.py doc/libxml2-api.xml: the script was exporting
	  too many symbols in the API breaking the python bindings.
	  Updated with the libxslt/libexslt changes.

Wed Dec 11 20:26:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release of 2.4.29
	* doc/*: rebuilt the docs and API
	* xmlreader.c: a few more fixes for the XmlTextReader API

Wed Dec 11 18:01:15 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: applied mingw patch from Magnus Henoch

Wed Dec 11 16:58:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* catalog.c doc/libxml2-api.xml: a bit more cleanup

Wed Dec 11 14:54:47 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/apibuild.py doc/libxml2-api.xml doc/Makefile.am: new API
	  building Python script, does the C parsing directly, generates
	  a better API description including structure fieds defs and
	  enums. Still a couple of bugs, but good enough for the python
	  wrappers now.
	* DOCBparser.c SAX.c nanohttp.c parser.c parserInternals.c tree.c
	  valid.c xmlIO.c xmlmemory.c xmlreader.c xmlregexp.c xmlschemas.c
	  include/libxml/schemasInternals.h include/libxml/tree.h: more
	  cleanup based on the python analysis script reports.
	* libxml.spec.in: make sure the API XML description is part of the
	  devel package.

Tue Dec 10 16:16:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c debugXML.c encoding.c hash.c
	  nanoftp.c nanohttp.c parser.c parserInternals.c testC14N.c
	  testDocbook.c threads.c tree.c valid.c xmlIO.c xmllint.c xmlmemory.c
	  xmlreader.c xmlregexp.c xmlschemas.c xmlschemastypes.c xpath.c:
	  code cleanup, especially the function comments.
	* tree.c: fixed a small bug when freeing nodes which are XInclude ones.

Mon Dec  9 15:08:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlreader.c include/libxml/Makefile.am
	  include/libxml/xmlreader.h:  Adding a new set of APIs based on
	  the C# TextXmlReader API but converted to C. Allow to parse
	  in constant memory usage, far simpler to program and explain
	  than the SAX like APIs, unfinished but working.
	* testReader.c: test program

Sun Dec  8 18:36:01 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: applied YALDSP from Mark Vakoc

Wed Dec  4 16:08:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Chip turner indicated that XHTML1 serialization
	  rule for style actually break on both IE and Mozilla, 
	  try to avoid the rule if escaping ain't necessary

Wed Dec  4 12:43:28 CET 2002 Daniel Veillard <daniel@veillard.com>

	* nanhttp.c: handle HTTP URL escaping, problem reported by
	  Glen Nakamura and Stefano Zacchiroli

Sat Nov 30 12:19:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c parser.c valid.c xpath.c: code cleanup

Thu Nov 28 12:53:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* uri.c: Johann Richard pointed out some XPointer problems for
	  URN based URI references in XInclude. Modified the URI parsing
	  and saving routines to allow correct parsing and saving of 
	  XPointers, especially when attached to "opaque" scheme accordingly
	  to RFC 2396

Wed Nov 27 20:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: applied the same kind
	  of refactoring to the HTML saving code.
	* doc/libxml2-*.xml doc/API*.html: slight API changes got reflected
	  in the doc.

Wed Nov 27 12:40:16 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: refactored the XML dump of a node
	  to a buffer API to reuse the generic dump to an OutputIO layer,
	  this reduces code, fixes xmlNodeDump() for XHTML, also made
	  xmlNodeDump() now return the number of byte written.

Wed Nov 27 09:00:00 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/setup.py.in: another patch from Stéphane Bidoul for 
	  Python bindings on Windows
	* doc/parsedecl.py: small cleanup

Mon Nov 25 17:28:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in configure.in: add a line in %changelog for releases

Mon Nov 25 14:18:27 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Marcus Clarke fixing a problem in entities
	  parsing that was detected in KDe documentations environment.

Mon Nov 24 14:13:21 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>

	* python/libxml.c (libxml_prev): Return the previous as opposed to
	the next node (I guess this is the result of some cut & paste programming:)

Sat Nov 23 17:22:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: Jan Rafaj pointed a bug in the Makefile.

Sat Nov 23 12:21:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/setup.py.in: trying
	  to fix the Python bindings build on Windows (Stéphane Bidoul)

Fri Nov 22 22:41:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: added option for python bindings
	* win32/libxml2.def.src: added more exports

Fri Nov 22 18:50:34 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.mingw: fixed unresolved symbols when linking with
	  pthreads
	* win32/wince/*: applied updates to Windows CE port from Javier

Fri Nov 22 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.28
	* libxml.spec.in doc/Makefile.am: some cleanup
	* doc/*: updated the news and regenerated.

Fri Nov 22 14:15:14 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: final touch at closing #87235 </p> end tags
	  need to be generated.
	* result/HTML/cf_128.html result/HTML/test2.html result/HTML/test3.html:
	  this change slightly the output of a few tests
	* doc/*: regenerated

Fri Nov 22 13:26:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixing bug #99190 when UTF8 document are
	  parsed using the progressive parser and the end of the chunk
	  is in the middle of an UTF8 multibyte character.

Fri Nov 22 13:13:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* threads.c: fixed initialization problem in xmlNewGlobalState
	  which was causing crash.
	* globals.c: removed duplicate call to initxmlDefaultSAXHandler
	  in xmlInitializeGlobalState.
	* parserInternals.c: cleaned up ctxt->sax initialisation.

Thu Nov 21 15:05:45 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: modified the existing APIs
	  to handle XHTML1 serialization rules automatically, also add
	  xmlIsXHTML() to libxml2 API. Some tweaking to make sure
	  libxslt serialization uses it when needed without changing
	  the library API.
	* test/xhtml1 result/noent/xhtml1 result/valid/xhtml1.xhtml
	  result/xhtml1: added a new test specifically for xhtml1 output
	  and updated the result of one XHTML1 test

Wed Nov 20 14:24:56 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c parserInternals.c encoding.c: fixed #99082
	  for xi:include encoding="..." support on text includes.
	* result/XInclude/tstencoding.xml test/XInclude/docs/tstencoding.xml
	  test/XInclude/ents/isolatin.txt : added a specific regression test
	* python/generator.py python/libxml2class.txt: fixed the generator
	  the new set of comments generated for doc/libxml2-api.xml were
	  breaking the python generation.

Tue Nov 19 23:25:47 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: repair some problem if gtk-doc fail or such
	* configure.in: patch for Solaris on new autoconf closes #98880 
	* doc/parsedecl.py: repair the frigging API building script,
	  did I say that python xmllib sucks ?
	* doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated, reordering
	  and some comment are no more truncated.

Tue Nov 19 09:09:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Martin Stoilov pointed out a potential leak in
	  xmlCreateMemoryParserCtxt

Mon Nov 18 16:05:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed bug #98879 a corner case when 0 is
	  included in HTML documents and using the push parser.

Mon Nov 18 00:11:24 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>

	* configure.in (PYTHON_SITE_PACKAGES): If --with-python is
	  specified, look for the Python interpreter not just in the
	  specified root but also in the specified location. Fixes #98825

Sun Nov 17 23:36:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fixing bug #98792 , node may have no doc
	  and dereferencing without checking ain't good ...

Sun Nov 17 10:25:43 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release 2.4.27
	* doc/* : updated and rebuilt the docs
	* doc/Makefile.am libxml.spec.in: try to make sure the tutorial
	  and all the docs are actually packaged and in the final RPMs
	* parser.c parserInternals.c include/libxml/parser.h: restore
	  xmllint --recover feature.

Sat Nov 16 16:30:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c xpath.c: fixing #96925 which was also dependent on the
	  processing of parsed entities, and XPath computation on sustitued
	  entities.
	* testXPath.c: make sure entities are substituted.

Fri Nov 15 16:22:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #96594, which was totally dependent on the 
	  processing of internal parsed entities, which had to be changed.

Fri Nov 15 12:16:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am python/Makefile.am python/tests/Makefile.am:
	  trying to fix bug #98517 about building outside the source tree
	* doc/xml.html doc/FAQ.html: fixed the link to libiconv #94585

Thu Nov 14 18:41:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: cleanup
	* win32/Makefile.mingw: integrated mingw in JScript configure
	* win32/Makefile.msvc: modified to allow mingw coexistence
	* win32/configure.js: integrated mingw
	* win32/Readme.txt: cleanup

Tue Nov 12 22:06:45 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: strengthen the guard in the Pop macros,
	  like in the XML parser, closes bug #97315

Tue Nov 12 21:56:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h: fixed bug #98338 , fatalError SAX
	  callback is never used.

Tue Nov 12 13:32:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixed the initialization of the SAX structure
	  which was breaking xsltproc
	* xpath.c: patch from Petr Pajas for CDATA nodes
	* tree.c: patch from Petr Pajas improving xmlGetNodePath()
	* parser.c include/libxml/parser.h: patch from Peter Jones
	  removing a leak in xmlSAXParseMemory() and adding the
	  function xmlSAXParseMemoryWithData()

Mon Nov 11 20:47:03 MST 2002 John Fleck <jfleck@inkstain.net>

	adding pdf of tutorial, changing web page to link to it
	* doc/tutorial/xmltutorial.pdf
	* doc/xml.html
	* doc/docs.html

Sun Nov 10 20:48:57 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/ar01s08.html
	adding file what I forgot for tutorial

Sun Nov 10 20:33:13 MST 2002 John Fleck  <jfleck@inkstain.net>

	Adding encoding discussion to tutorial
	Added:
	* doc/tutorial/images/*.png: DocBook admonition image files
	* doc/tutorial/apf.html, apg.html: new generated html
	* doc/tutorial/includeconvert.c: conversion code entity file
	changed:
	* doc/tutorial/xmltutorial.xml: DocBook original
	* doc/tutorial/*.html: generated html

Fri Nov  8 17:59:32 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/libxml/*.h: retired xmlwin32version.h
	* doc/Makefile.am: retired xmlwin32version.h
	* win32/configure.js: retired xmlwin32version.h

Fri Nov  8 16:55:47 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: exported additional symbols
	* include/libxml/xmlmemory.h: exported the rest of the xmlMem* 
	  sisterhood

Fri Nov  8 16:08:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* globals.c: fixed a typo pointed out by Igor
	* xpath.c: try to speed up node compare using line numbers
	  if available.

Thu Nov  7 15:16:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: make xmlFreeNode() handle attributes correctly.

Wed Nov  6 23:51:11 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* catalog.c: completed the #96963 fix, as reported by Karl
	  Eichwalder

Wed Nov  6 16:48:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpointer.c: tried to fix bug #97852 reported by Nicolas Noffke

Sun Nov  3 10:43:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: switched the order of a couple of includes
	  to fix bugs #97100

Thu Oct 31 17:11:46 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* catalog.c: fixed bug #96963, reverted to the old behaviour of
	  xmlLoadCatalogs that used to separate directories with a ':'.

Thu Oct 31 16:55:21 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* threads.c: improvements to the Windows-side of thread handling
	* testThreads.c: conditionally excluded unistd.h
	* testThradsWin32.c: broke overlong lines
	* include/win32config.h: adapted thread-related macros to the new
	  scheme and for pthreads on Windows
	* win32/Makefile.msvc: introduced a more flexible thread build, 
	  added testThreads[Win32].c to the build
	* win32/configure.js: introduced a more flexible thread config

2002-10-31  John Fleck  <jfleck@inkstain.net>

	* doc/xml.html (and, by implication, FAQ.html)
	added UTF-8 conversaion FAQ from Marcus Labib Iskander

Tue Oct 29 18:32:33 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* configure.in: removed xmlwin32version.h
	* include/libxml/Makefile.am: removed xmlwin32version.h

Mon Oct 28 14:01:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Brian Stafford to fix a bug
	  in xmlReconciliateNs()

Mon Oct 28 13:51:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Christian Glahn to allow
	  xmlNewChild() on document fragment nodes

Sat Oct 26 15:27:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Christian Glahn found a problem with a recent
	  patch to xmlParseBalancedChunkMemoryRecover()
	* xmlschemas.c: Charles Bozeman fixed some Schemas validation
	  problems
	* result/schemas/elem* result/schemas/seq* test/schemas.elem*
	  test/schemas/seq*: added the test cases from Charles

Wed Oct 23 16:42:29 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am config.h.in libxml.spec.in doc/Makefile.am:
	  serious cleanup of the spec file and associated changes
	  in the Makefiles.
	* valid.c: try to remove some warnings on x86_64

Wed Oct 23 10:53:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/Makefile.am: added winsockcompat.h to EXTRA_DIST to
	  fix bug #96586

Tue Oct 22 21:13:06 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Mikhail Sogrine pointed out a bug in HTML
	  parsing, applied his patch
	* result/HTML/attrents.html result/HTML/attrents.html.err
	  result/HTML/attrents.html.sax test/HTML/attrents.html:
	  added the test and result case provided by Mikhail Sogrine

Tue Oct 22 19:33:20 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* vms/build_libxml.com vms/config.vms vms/readme.vms
	  include/libxml/parser.h include/libxml/parserInternals.h
	  include/libxml/tree.h include/libxml/xmlIO.h
	  HTMLparser.c catalog.c debugXML.c parser.c parserInternals.c
	  tree.c triodef.h trionan.c uri.c xmlIO.c xpath.c:
	  Applied the VMS update patch from Craig A. Berry
	* doc/*.html: update

Tue Oct 22 16:27:31 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/encoding.h encoding.c: made xmlGetUTF8Char public

Tue Oct 22 16:25:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: adding a grep command to --shell in xmllint
	  for T.V. Raman

Tue Oct 22 16:23:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: tried to fix some of the problem with --sgml

Mon Oct 21 09:57:10 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: tried to fix bug #91500 where doc->children may
	  be overridden by a call to xmlParseBalancedChunkMemory()

Mon Oct 21 09:04:32 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* catalog.c: tried to fix bug #90945 w.r.t. parsing of system
	  identifiers in SGML catalogs containing '&'

Sun Oct 20 23:31:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/types.c: fixed bugs when passing result value tree
	  to Python functions.

Fri Oct 18 13:18:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing the release of 2.4.26
	* doc/*: updated and rebuilt the documentation

Wed Oct 16 20:01:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a XML Namespace compliance bug reported by
	  Alexander Grimalovsky

Wed Oct 16 17:18:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed serialization of script and style when
	  they are not lowercase (i.e. added using the API to the tree).

Wed Oct 16 16:31:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: make xmlValidateDocument emit a warning msg if there
	  is no DTD, pointed by Christian Glahn

Wed Oct 16 16:05:38 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: fixed the validation of sequences
	  content model when some of the blocks have min or max, and a couple
	  of bugs found in the process.
	* result/schemas/list0* test/schemas/list0*: added some specific
	  regression tests

Tue Oct 15 12:41:01 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* README: updated the contact information

Tue Oct 15 10:35:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: use test -f instead of test -e since Solaris /bin/sh
	  misses it, reported by Peter Bray.

Mon Oct 14 17:37:32 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: investigating xmlNodeGetContent() on namespace nodes
	  and removed a few warnings

Mon Oct 14 13:12:55 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Christian Glahn found a small bug in the push parser.
	* xmlIO.c include/libxml/xmlIO.h: cleaned up and made xmlCheckFilename
	  public

Wed Oct  9 23:11:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h: added
	  xmlSchemaNewMemParserCtxt to parse a schemas from a memory area
	* testSchemas.c: added --memory to test the new interface

Wed Oct  9 16:22:54 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/index.py doc/search.php: integrated the XSLT indexing,
	  a few fixed in the indexer, added a scope selection at the
	  search level.

Wed Oct  9 12:18:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: Joe Marcus Clarke reported a segfault on FBsd 
	  this was due to uninitialized parts of the validation context

Tue Oct  8 23:24:20 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: applied patch from Mark Vakoc except the API
	  change, preserved it.
	* doc/*: updated the docs to point to the search engine for
	  information lookup or before bug/help reports.

Tue Oct  8 18:53:31 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/index.py doc/search.php: added mailing-list archives
	  indexing and lookup

Tue Oct  8 10:25:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: patch from Mark Vakoc to fix xmlNodeGetPath()

Mon Oct  7 13:12:03 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/index.py: improved HTML indexing
	* doc/search.php: make the queries also lookup the HTML based indexes

Sun Oct  6 23:50:29 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/index.py: added HTML page indexing 

Fri Oct  4 15:33:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* xmlIO.c: extended Windows path normalisation to fix the base
	  problem in libxslt.
	* catalog.c: fixed list handling in XML_CATALOG_FILES

Fri Oct  4 13:43:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: typo/bug found by Christian Glahn

Sun Sep 29 19:44:10 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* xmlIO.c: applied Windows CE patch from Javier.
	* win32/wince: new directory, contains support for the PocketPC
	  with Windows CE from Javier.
	* include/win32config.h: reorganised, removed duplicate 
	  definitions and applied WinCE patch from Javier.
	* include/wsockcompat.h: new file, now contains WinSock
	  compatibility macros.
	* win32/Makefile.msvc: introduced double-run compilation.

Thu Sep 26 19:48:06 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing release
	  of 2.4.25
	* doc/*: updated and regenerated the docs and web pages.

Thu Sep 26 17:33:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c valid.c include/libxml/valid.h: fixed bug #92518 validation
	  error were not covering namespace declarations.
	* result/valid/dia.xml test/valid/dia.xml: the test wasn't valid,
	  it was missing the attribute declaration for the namespace
	* result/VC/NS3: the fix now report breakages in that test

Thu Sep 26 14:39:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixing bug #94241 on HTML boolean attributes

Thu Sep 26 14:25:33 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*: added the 3 new modules xmlregexp xmlautomata and xmlunicode
	  and regenerated the docs and web site

Thu Sep 26 11:45:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmlschemas.c xmlschemastypes.c xpath.c: make sure
	  ATTRIBUTE_UNUSED is always put after the attribute declaration,
	  not before

Thu Sep 26 11:33:28 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml2class.txt: fixed a stupid error
	  breaking the python API

Thu Sep 26 00:31:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* trio.c trio.h triodef.h trionan.c trionan.h triop.h
	  triostr.c triostr.h: applied a trio update patch from 
	  Bjorn Reese which should work with MinGW

Thu Sep 26 00:21:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: improving some documentation comments
	* xmlregexp.c: found and fixed a mem leak with python regression tests
	* doc/*: rebuilt the doc and the API XML file including the 
	  xmlregexp.h xmlautomata.h and xmlunicode.h headers
	* python/generator.py python/libxml2class.txt python/libxml_wrap.h
	  python/types.c: added access to the XML Schemas regexps from
	  python
	* python/tests/Makefile.am python/tests/regexp.py: added a 
	  simple regexp bindings test

Tue Sep 24 08:10:48 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/xml.html:
	  fixing ftp links - thanks to Vitaly Ostanin

Tue Sep 24 16:08:17 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixed the data callback on transition functionality
	  which was broken when using the compact form
	* result/schemas/*: updated the results, less verbose, all tests
	  pass like before
	* DOCBparser.c testAutomata.c testC14N.c testSchemas.c testThreads.c
	  testXPath.c valid.c xinclude.c xmllint.c xmlregexp.c xmlschemas.c
	  xmlschemastypes.c xpath.c python/libxml.c: removed a bunch of
	  annoying warnings
	* xpath.c: try to provide better error report when possible

Sat Sep 21 14:56:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: fixed a breakage raised by Jacob

Fri Sep 20 20:08:18 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: added HAVE_ERRNO_H definition for parts
	  which don't use sockets

Fri Sep 20 18:40:50 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: applied zlib patch from Daniel Gehriger
	* win32/configure.js: applied zlib patch from Daniel Gehriger

Fri Sep 20 15:40:14 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: applied the patch from Mark Vakoc for 
	  regexp support
	* win32/libxml2.def.src: applied the patch from Mark Vakoc
	  for regexp support

Fri Sep 20 15:35:33 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: as pointed by Igor Float and Double
	  parsing ain't finished yet

Fri Sep 20 14:00:16 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: trying to fix #88412 by bypassing
	  all the python subdir if python ain't detected

Thu Sep 19 21:46:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in include/libxml/xmlversion.h.in:
	  made configuring with regexps/automata/unicode the default
	  but without schemas ATM
	* testRegexp.c valid.c xmlregexp.c include/libxml/xmlregexp.h:
	  fixed the regexp based DTD validation performance and memory
	  problem by switching to a compact form for determinist regexps
	  and detecting the determinism property in the process. Seems
	  as fast as the old DTD validation specific engine :-) despite
	  the regexp built and compaction process.

Wed Sep 18 18:27:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: determinism is debugged, new DTD checking code now works
	  but xmlFAComputesDeterminism takes far too much CPU and the whole
	  set usues too much memory to be really usable as-is

Wed Sep 18 00:54:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed another stupid bug in xmlGetNodePath()
	* xmllint.c: --version now report the options compiled in

Tue Sep 17 23:48:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: small cleanup
	* valid.c xmlregexp.c: switched DTD validation to use only regexp
	  when configured with them. A bit of debugging around the determinism
	  checks is still needed

Tue Sep 17 21:22:25 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml_wrap.h: stupid bug found by mattam@netcourrier.com

Tue Sep 17 19:58:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: small portability glitch fixed.

Mon Sep 17 12:38:08 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: incomplete steps for real/double support
	* testAutomata.c include/libxml/xmlautomata.h
	  include/libxml/xmlregexp.h: avoiding a compilation problem
	* valid.c include/libxml/valid.h: starting the work toward using
	  the regexps for actual DTD validation

Fri Sep 13 16:46:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: cosmetic cleanup
	* valid.c include/libxml/tree.h include/libxml/valid.h: started 
	  integrating a DTD validation layer based on the regexps

Thu Sep 12 18:01:29 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: fixed a bug reported by Jeff Goff,
	  the determinism was tested before eliminating the epsilon
	  transitions :-(

Thu Sep 12 16:57:45 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml2-python-api.xml python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: updated the python
	  bindings, added code for easier File I/O, and the ability to
	  define a resolver from Python fixing bug #91635
	* python/tests/Makefile.am python/tests/inbuf.py
	  python/tests/outbuf.py python/tests/pushSAXhtml.py
	  python/tests/resolver.py python/tests/serialize.py: updated
	  and augmented the set of Python tests.

Tue Sep 10 21:05:28 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: added more readme info for the binary
	  package.

Tue Sep 10 14:15:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fixed a stupid out of bound array error

Tue Sep 10 13:09:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlIO.h xmlIO.c parser.c HTMLparser.c DOCBparser.c:
	  messing around with support for Windows path, cleanups,
	  trying to identify and fix the various code path to the
	  filename access. Added xmlNormalizeWindowsPath()

Thu Sep  5 16:19:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* error.c valid.c: working on better error reporting of validity
	  errors, especially providing an accurate context.
	* result/valid/xlink.xml.err result/valid/rss.xml.err: better
	  error reports in those cases.

Thu Sep  5 13:29:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c entities.c list.c
	  parser.c parserInternals.c xmlIO.c: get rid of all the 
	  perror() calls made in the library execution paths. This
	  should fix both #92059 and #92385

Thu Sep  5 13:13:17 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: memory leak reporting was broken after a change
	  of the preprocessor symbol used to activate it.

Thu Sep  5 13:10:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: try to make the copy function work for node of
	  type XML_DOCUMENT_FRAG_NODE, they are only created by the
	  DOM layers though, not libxml2 itself.

Thu Sep  5 12:57:38 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: try to provide file and line information, not all
	  messages are covered, but it's a (good) start

Thu Sep  5 12:49:35 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: reimplemented a large part of the XInclude
	  processor, trying to minimize resources used, James Henstridge
	  provided a huge test case which was exhibiting severe memory
	  consumption problems.

Thu Sep  5 10:07:13 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: applied patch from Christophe Merlet to
	  reestablish DESTDIR

Wed Sep  4 14:13:34 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixes library path for x86_64 AMD

Tue Sep  3 21:14:19 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/includekeyword.c
	* doc/tutorial/xmltutorial.xml:
	(plus resulting generated html files)
	fixing one spot I missed in the tutorial where I hadn't freed
	memory properly

Sat Aug 31 19:31:17 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/includeaddattribute.c
	* doc/tutorial/includeaddkeyword.c
	* doc/tutorial/includegetattribute.c
	* doc/tutorial/includekeyword.c
	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/*.html:
	update tutorial to properly free memory (thanks to Christopher
	R. Harris for pointing out that this needs to be done)
	* doc/tutorial/images/callouts/*.png:
	added image files so the callouts are graphical, making it
	easier to read ( use "--param callout.graphics 1" to generate
	html with graphical callouts)

Wed Aug 28 13:44:54 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Libxml2-Logo-180x168.gif doc/Libxml2-Logo-90x34.gif:
	  nice logos generated by Marc Liyanage
	* doc/site.xsl *.html: changed the stylesheet to show the new
	  logo and regenerated the pages

Sun Aug 25 16:38:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: handle Windows specific file://localhost/ semantic ...

Thu Aug 22 22:03:19 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: possible mem leak patch from Jason Adams

Thu Aug 22 17:27:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: integrated xf:escape-uri() from Wesley Terpstra
	  in the XQuery namespace
	* configure.in: preparing 2.4.24
	* doc/*.html: updated the web pages

Thu Aug 22 16:19:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: closing bug #85258 by generating conditional
	  compile check to avoid linking to routines not configured in.

2002-08-22  Havoc Pennington  <hp@pobox.com>

	* autogen.sh: update error message for missing automake

Thu Aug 22 11:45:50 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: typo in target name resulted in libxml2.py
	  to not be rebuilt. fixed DESTDIR similarly to the libxslt one.

Thu Aug 22 09:15:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* win32/win32/Makefile.mingw: updated with version from 
	  Elizabeth Barham at http://soggytrousers.net/repository/

Tue Aug 20 16:40:48 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: added the prefix location to the include
	and lib search path.

2002-08-18  Havoc Pennington  <hp@pobox.com>

	* autogen.sh: hardcode aclocal-1.4/automake-1.4 so that users with
	both automake 1.6 and 1.4 installed get the right automake. Means
	compilation from CVS will now require the latest automake 1.4
	release, or manually creating symlinks called "automake-1.4" and
	"aclocal-1.4"

Wed Aug 14 18:54:19 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in python/Makefile.am: more AMD 64 induced changes from
	  Frederic Crozat

Wed Aug 14 16:43:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: oops I was missing the xml:base fixup too
	* result/XInclude/*.xml: this adds xml:base attributes to most
	  results of the tests

Wed Aug 14 16:05:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: quick but apparently working implementation of
	  xi:fallback, should close bug #89684
	* Makefile.am test/XInclude/docs/fallback.xml 
	  result/XInclude/fallback.xml: added a basic test for fallback,
	  and run with --nowarning to avoid a spurious warning
	* configure.in: applied patch from Frederic Crozat for python
	  bindings on AMD 64bits machines.

Wed Aug 14 10:47:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: xmlSAXUserParseMemory() really ought to fail if
	  the caller don't pass a SAX callback block.

Wed Aug 14 10:29:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied the same fix for the XML-1.0 namespace to
	  xmlSearchNsByHref() as was done for xmlSearchNs()

Mon Aug 12 16:52:08 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.3: small cleanup of the man page
	* HTMLtree.c: fixed a potential problem raised by Petr Vandrovec
	  when serializing HREF attributes generated by XSLT.

Mon Aug 12 15:24:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: integrated a cleaned up
	  version of Marc Liyanage' patch for boolean attributes in HTML
	  output

Mon Aug 12 14:11:59 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/tests/serialize.py: fixed the test results, indenting
	  behaviour changed slightly

Thu Aug  8 11:00:26 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* win32/dsp/libxml2.def.src win32/libxml2.def.src: added
	new c14n function to Windows def files

Fri Aug  2 16:46:46 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* c14n.c: fixed a memory leak in c14n code

Sat Aug  3 00:15:06 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: adding a new API for Christian
	  Glahn: xmlParseBalancedChunkMemoryRecover
	* valid.c: patch from Rick Jones for some grammar cleanup in
	  validation messages
	* result/VC/* result/valid/*: this slightly change some of the
	  regression tests outputs

Thu Aug  1 14:50:28 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: trying to fix a problem in namespaced attribute handling
	  raised by Christian Glahn

Thu Aug  1 12:17:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* encoding.c include/libxml/encoding.h: Opening the interface
	  xmlNewCharEncodingHandler as requested in #89415
	* python/generator.py python/setup.py.in: applied cleanup
	  patches from Marc-Andre Lemburg
	* tree.c: fixing bug #89332 on a specific case of losing 
	  the XML-1.0 namespace on xml:xxx attributes

Wed Jul 31 23:27:42 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* c14n.c include/libxml/c14n.h: fixed one more c14n + namespaces
	corner case from new Merlin's test suite and added a callback
	that will be used to improve xmlsec performance

Mon Jul 29 18:22:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: trying to fix the <style> escaping problem in
	  HTML serialization bug #89342

Thu Jul 25 01:33:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/*.html: applied syntax patch from Rick Jones
	  and rebuilt the web site.

Mon Jul 22 11:04:48 PDT 2002  Aleksey Sanin <aleksey@aleksey.com>

	* include/libxml/tree.h: added _private member to xmlNs struct

Sun Jul 21 17:48:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixing bug #84876 based on the xml working
	  code.

Sun Jul 21 19:15:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* python/Makefile.am: enhanced to fix bug 72012 (errors
	  when using '-jX' make parameter)

Fri Jul 19 16:35:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: small additional enhancement for booleans
	  compared to nodesets

Wed Jul 17 19:48:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: changed the order of the encoding declaration
	  attributes in the meta tags due to a bug in IE/Mac

Fri Jul 12 08:45:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: enhanced handling of booleans (especially '='
	  and '!=' for nodesets) - fixes bug 85256.  Added new
	  routine xmlXPathNotEqualValues for more proper handling
	  of '!=' when nodesets are involved.

Thu Jul 11 21:45:52 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: fixing Red Hat bug #68614 by adding the
	  doc/xmlcatalog_man.xml to the source distribution

Wed Jul 10 21:26:13 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: Added a copy *.pdb to install, few have
	  asked for this.

Sat Jul  6 21:55:59 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.23
	* doc/*: rebuilt the docs

Sat Jul  6 21:11:20 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #84169 by fixing the
	  comment of xmlCreatePushParserCtxt to describe the 
	  encoding detection parameters better.

Sat Jul  6 19:44:56 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing bug #79331 in one path the lookup for
	  ID attributes on a namespaced node wasn't handled correctly :-\

Fri Jul  5 20:07:43 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: trying to fix 87235 about discarded white
	  spaces in the HTML parser.
	* result/HTML/*: this changes the output of a number of HTML
	  regression tests

Mon Jul  1 23:23:41 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied patch from Richard Jinks for the namespace
	  axis + fixed a memory error.
	* parser.c parserInternals.c: applied patches from Peter Jacobi
	  removing ctxt->token for good.
	* xmlschemas.c xmlschemastypes.c: fixed a few memory leaks
	  popped out by the regression tests.
	* Makefile.am: patch for threads makefile from Gary Pennington

Fri Jun 28 19:38:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: enhanced behaviour of position() after usage of
	  expressions involving preceding-sibling (et al).

Tue Jun 18 09:58:48 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: applied a patch from Peter Jacobi to solve a problem
	  when compiling with the Watcom C on Win32 
	* result/schemas/*.err: the change of hashing algo generated
	  permutations in the output

Mon Jun 17 19:02:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: applied patch from Sander Vesik improving the quality of
	  the hash function.

2002-06-14  Aleksey Sanin  <aleksey@aleksey.com>

	* DOCBparser.c HTMLparser.c debugXML.c encoding.c
	nanoftp.c nanohttp.c parser.c tree.c uri.c xmlIO.c
	xmllint.c xpath.c: replaced sprintf() with snprintf()
	to prevent possible buffer overflow (the bug was pointed
	out by Anju Premachandran) 

Thu Jun 13 17:30:25 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed an uninitialized data error popped by valgrind
	  on PE references

Wed Jun 12 21:38:46 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/xml.html
	adding tutorial reference to the web page

Wed Jun 12 21:26:08 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/ar01s07.html
	* doc/tutorial/ape.html
	* doc/tutorial/includegetattribute.c
	adding section to tutorial about retrieving an attribute
	value

Tue Jun 11 12:07:04 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied a couple of patches from Peter Jacobi to start
	  to get rid of ctxt->token, with a possible significant speed
	  improvement to be gained once done. Better compliance with PE
	  references constructs in DTDs too.
	* test/valid/t[0-9]* result/valid/t[0-9]*: added a set of tests
	  from Peter too

Tue Jun 11 09:25:12 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Babak Vahedipour-Kunze reported that openTag in 
	  xmlParseElement was likely to have been deallocated at the
	  time of the report, possibly leading to segfault. Just report
	  the tag name now.

Mon Jun 10 18:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks for XPath substring() function
	* result/XPath/expr/strings test/XPath/expr/strings: new set of tests

2002-06-06  Aleksey Sanin  <aleksey@aleksey.com>

	* xmlIO.c: patch from Rachel Hestilow to fix bug #84340

Wed Jun  5 19:14:49 MDT 2002 John Fleck <jfleck@inkstain.net>

	*doc/FAQ.html
	fixing typos in FAQ, thanks to Robert Funnell for the
	editing help

Wed Jun  5 14:50:24 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* NEWS: got complaints from rpmlint that it was empty

Tue Jun  4 09:09:18 MDT 2002 John Fleck <jfleck@inkstain.net>

	* added doc/tutorial, including:
	apa.html
	apb.html
	apc.html
	apd.html
	ar01s02.html
	ar01s03.html
	ar01s04.html
	ar01s05.html
	ar01s06.html
	includeaddattribute.c
	includeaddkeyword.c
	includekeyword.c
	includestory.xml
	index.html
	xmltutorial.xml
	libxml tutorial, including generated html

Mon Jun  3 21:21:26 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* result/c14n/exc-without-comments/merlin-c14n-two-*
	  result/c14n/without-comments/merlin-c14n-two-*
	  test/c14n/exc-without-comments/merlin-c14n-two-*
	  test/c14n/without-comments/merlin-c14n-two-*
	  testC14N.c Makefile.am: added merlin-c14n-two.tar.gz tests for 
	c14n/exc-c14n and slightly modified test script to handle
	these test cases
	* c14n.c: fixed bugs for complicated nodes set (namespace
	without node and others from merlin-c14n-two.tar.gz)
	* include/libxml/xpathInternals.h win32/dsp/libxml2.def.src
	win32/libxml2.def.src: "opened" xmlXPathNodeSetFreeNs() function
	for xmlsec performance patch
	* xpath.c: fixed self::node() for namespaces and attributes

Mon Jun 03 00:04:21 2002 Chema Celorio <chema@ximian.com>

	* tree.h: added xmlDocFormatDump which is just as xmlDocDump
	  but with the format parameter
	* tree.c: made xmlDocDump a wrapper around xmlDocFormatDump

Fri May 31 12:16:48 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* Makefile.am: updated c14n tests suite
	* c14n.c: performance improvement for previous c14n patch

Fri May 31 11:47:12 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: another peroformance patch from Peter Jacobi, that
	  time on parsing attribute values.

Thu May 30 23:34:27 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* Makefile.am result/c14n/* test/c14n/*: C14N tests integrated
	into LibXML2 test suite

Thu May 30 21:23:06 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* c14n.c: propagating xpath ancesstors node fix to c14n
	plus small performance improvement to reduce number of
	mallocs
	* xpath.c: fixed ancestors axis processing for namespace nodes

Wed May 29 10:21:39 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c tree.c include/libxml/tree.h: performance patch from
	  Peter Jacobi

Mon May 27 23:18:33 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.22

Mon May 27 16:44:04 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c win32/libxml2.def.src win32/dsp/libxml2.def.src
	  include/libxml/HTMLparser.h: fixing #79334 making htmlParseDocument
	  a public entry point.
	* doc/*: rebuilt the API and docs

Mon May 27 14:16:28 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks to fix a problem introduced
	  in the previous patch and pointed by Norm

Fri May 24 13:10:22 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixing bug #81112

Fri May 24 13:03:24 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* uri.c: fixing bug #82848

Fri May 24 09:54:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* result/catalogs/mycatalog.full: Aleksey's commit changed the
	  output of one catalog test

Fri 24 May 2002 12:17:45 AM PDT Aleksey Sanin <aleksey@aleksey.com>

	* global.data globals.c tree.c include/libxml/globals.h 
	win32/libxml2.def.src win32/dsp/libxml2.def.src: changed
	default value for global parameter xmlIndentTreeOutput to 1 and
	introduced new global parameter xmlTreeIndentString (the string
	used to do one-level indent) with default value "  " (as it was
	in tree.c)

Thu May 23 13:55:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Merijn Broeren pointed out a problem when compiling
	  with trio and schemas.

Wed May 22 11:57:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks to fix the problem raised in
	  http://mail.gnome.org/archives/xml/2002-April/msg00246.htm

Wed May 22 08:38:19 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: a bit of work on import.
	* xmlschemastypes.c: Charles Bozeman provided a compare function
	  for date/time types so min/max facet restrictions should work,
	  indeterminate comparisons return an error instead of equal.
	* test/schemas/date_0* result/schemas/date_0_0: specific test
	  from Charles Bozeman too

Sat May 18 09:54:12 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.3 doc/buildDocBookCatalog: apply a couple of patches
	  from Christian Cornelssen fixing the man pages and the Catalog
	  building script.
	* xmlschemas.c include/libxml/schemasInternals.h: nothing new yet
	  next step is <xs:import> I now have a reasonable understanding
	  of how it works.

Thu May 16 10:43:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied a small buffer performance patch from Gary Pennington

Wed May 15 00:25:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: exported xmlXPathNodeSetAddNs()

Tue May 14 13:00:48 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing an XPath function evaluation bug pointed out
	  by Alexey Efimov where the context was lost when evaluating
	  the function arguments

Mon 13 May 2002 11:37:39 PM PDT Aleksey Sanin <aleksey@aleksey.com>

	* xpath.c include/libxml/xpathInternals.h: made xmlXPathNodeSetAddNs() 
	  function public for XMLSec performance optimizations

Mon May 13 12:32:22 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml2class.txt : fixed a problem
	  with the HTML parser pointed by Gary Benson
	* python/tests/Makefile.am python/tests/pushSAXhtml.py: sdding the
	  example

Thu 09 May 2002 11:19:00 AM PDT Aleksey Sanin <aleksey@aleksey.com>
	* parser.c: fixed bug #81159 (memory growth in SAX)

Tue 07 May 2002 09:20:21 AM PDT Aleksey Sanin <aleksey@aleksey.com>
	* xpath.c: fixed bug #78858 (the real fix)

Sat 04 May 2002 11:56:31 PM PDT Aleksey Sanin <aleksey@aleksey.com>
	* xpath.c: fixed bug #78858 (quick and durty fix to hide the problem)

Sun May  5 08:57:08 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: modified xmlNodeSetBase to allow changing the
	  base of a document.

Fri May  3 09:20:41 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: patch Charles Bozeman for validation of
	  all the date, time, and duration types
	* test/schemas/dur_0* result/schemas/dur_0*: associated tests
	* configure.in: fixed an error pointed by an user
	* xml2-config.in: fixed an error pointed by an user

Wed 01 May 2002 11:29:27 AM PDT Aleksey Sanin <aleksey@aleksey.com>

	* include/libxml/xmlIO.h win32/dsp/libxml2.def.src
	win32/libxml2.def.src xmlIO.c: exported default
	'file:', 'http:' and 'ftp:' protocols input handlers 
	and made protocols comparison case insensitive

Tue Apr 30 16:29:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: Neven Has detected a typo

Tue Apr 30 08:48:11 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* AUTHORS HACKING: added Aleksey Sanin <aleksey@aleksey.com>
	  as one of the persons allowed to commit directly to the
	  module.

Mon Apr 29 17:48:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.21
	* valid.c: raised a too low limit
	* doc/*: rebuilt the docs 

Wed Apr 24 13:41:03 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* test/XPath/expr/floats test/XPath/expr/functions
	  result/XPath/expr/floats result/XPath/expr/functions
	  xpath.c: another XPath conformance patch from Richard Jinks

Tue Apr 23 19:50:40 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed validation of attribute groups.
	* test/schemas result/schemas: added an example from the primer

Tue Apr 23 09:11:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlschemas.c xmlschemastypes.c: more work on Schemas
	* test/schemas result/schemas: updated the test list

Mon Apr 22 17:59:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* TODO: updated a bit
	* parser.c: made a comment more specific
	* xmlregexp.c xmlschemas.c xmlschemastypes.c: more work on the
	  Schemas conformance.
	* test/schemas result/schemas: updated the test list

Sat Apr 20 19:36:39 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h:
	  implementing xs:all with minOccurs = 0
	* tes/schemas/* result/schemas/*: added more tests covering
	  xs:all

Sat Apr 20 09:22:50 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: first implementation of the all particle, this
	  may need to be revisited for case where not all transitions
	  must be crossed.

Fri Apr 19 18:26:04 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: another entity processing update from Markus Henke

Fri Apr 19 17:14:24 CEST 2002 Bjorn Reese <breese@users.sourceforge.net>

	* trionan.c: fixed crash on OSF/1

Fri Apr 19 09:00:56 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more Schemas work
	* test/schemas/* result/schemas/*: added more tests coming
	  from the spec.

Thu Apr 18 23:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: patch from Aleksey Sanin reflecting a change in the
	  ExcC14N specification

Thu Apr 18 18:38:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: patch from Markus Henke, fix for recursive entities.

Thu Apr 18 17:49:24 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix a problem with string() on a document node.

Thu Apr 18 16:40:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlschemas.c: more Schemas work
	* test/schemas/* result/schemas/*: added more tests coming
	  from the spec.

Thu Apr 18 13:52:52 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed & serialization bug introduced in 2.4.20
	* result/HTML/*: this changes a few things in the results

Wed Apr 17 20:34:37 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/libxml/tree.h: eliminated 'declaration different than
	 prototype' warning
	* include/win32config.h: "resolved" conflicts with errno.h

Wed Apr 17 18:26:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: more work
	  on the automata interfaces and debug of counted choices
	* test/schemas/* result/schemas/*: added a number of tests

Wed Apr 17 11:03:03 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
	  a bit of work on Schemas
	* testSchemas.c: try to make it more useful
	* test/schemas/* result/schemas/* Makefile.am: changed the
	  Schemas regression test procedure, started adding a few samples

Tue Apr 16 19:52:01 CEST 2002 Igor Zlatkovic <izlatkovic@stud.fh-frankfurt.de>

	* include/libxml/encoding.h: Patch for the Borland C++ builder
	* include/libxml/tree.h: Patch for the Borland C++ builder
	* threads.c: Patch for the Borland C++ builder
	* win32/bcb5: New directory for the Borland C++ builder
	 project files       

Tue Apr 16 19:46:55 CEST 2002 Igor Zlatkovic <izlatkovic@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: Update for XML Schema support
	* win32/configure.js: Update for XML Schema support
	* win32/libxml2.def.src: Update for XML Schema support

Tue Apr 16 17:46:43 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am TODO_SCHEMAS configure.in genUnicode.py testAutomata.c
	 testRegexp.c testSchemas.c xmlregexp.c xmlschemas.c xmlschemastypes.c
	 xmlunicode.c include/libxml/Makefile.am
	 include/libxml/schemasInternals.h include/libxml/xmlautomata.h
	 include/libxml/xmlregexp.h include/libxml/xmlschemas.h
	 include/libxml/xmlschemastypes.h include/libxml/xmlunicode.h
	 include/libxml/xmlversion.h.in : merged the current state of
	 XML Schemas implementation, it is not configured in by default,
	 a specific --schemas configure option has been added.
	* test/automata test/regexp test/schemas Makefile.am
	  result/automata result/regexp result/schemas:
	  merged automata/regexp/schemas regression tests

Tue Apr 16 09:48:44 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Gary found a compile time problem, fixes #78823

Mon Apr 15 19:11:36 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: release of 2.4.20
	* doc/*: updated and rebuilt the docs

Mon Apr 15 14:55:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: patch from Cristian Gafton to build on
	  Red Hat 6.2, should also fix #75779

Mon Apr 15 12:14:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: first part of fixing #78729

Sun Apr 14 23:44:58 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c uri.c: fixing bug #78662 i.e. add proper
	  escaping of URI when saving HTML files.
	* result/HTML/*: this impacted some tests

Sun Apr 14 14:55:15 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: trying to fix #77441

Fri Apr 12 23:02:16 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlIO.h: Hallski complained it could not be
	  included by itself.

Thu Apr 11 10:23:36 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied an IEEE flag patch for OSF/1 #77825

Wed Apr 10 23:31:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: patch from Nilo for the c14n option
	* win32/Makefile.msvc: fixed libxml2.def generation with threads

Wed Apr 10 21:24:16 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c include/libxml/xmlwin32version.h.in: Silvan Minghetti
	  pointed erroneous use of LIBXML_THREADS_ENABLED instead of
	   LIBXML_THREAD_ENABLED

Wed Apr 10 18:12:52 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: another patch from Richard Jinks for substring conformance
	* test/XPath/expr/floats test/XPath/expr/strings
	  result/XPath/expr/floats result/XPath/expr/strings: update of the
	  test suite to check those.

Wed Apr 10 13:29:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks for .x float parsing.

Tue Apr  9 18:09:31 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Markus Henke when an encoding ain't recognized

Tue Apr  9 15:47:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: got a report that #include <string.h> was needed

Tue Apr  9 11:51:25 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied a fix from Anthony Jones for -o /--output

Tue Apr  2 20:27:11 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/example.html: fixing typo

Mon Apr  1 10:02:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a bug in the nodeset to boolean comparison code
	  pointed out by Melvyn Sopacua.

Fri Mar 29 23:41:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: Frédéric Crozat gave a patch related to the change
	  of Include paths breaking the libxml.m4

Fri Mar 29 18:25:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Fix bug #76927 forgot to save some context
	  when evaluating binary expressions

Thu Mar 28 19:22:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: fixed configure for MPE/iX from Markus Henke
	* xmlmemory.c: fixed initialization problems
	* xpath.c: another set of patches from Richard Jinks this
	  fixes "make XPathtests" on linux

Wed Mar 27 17:09:43 CET 2002 Daniel Veillard <daniel@veillard.com>

	* trionan.c trionan.h xpath.c: more patches from Richard Jinks
	* test/XPath/expr/compare test/XPath/expr/equality
	  test/XPath/expr/floats test/XPath/expr/functions
	  test/XPath/expr/strings result/XPath/expr/compare
	  result/XPath/expr/equality result/XPath/expr/floats
	  result/XPath/expr/functions result/XPath/expr/strings: Updated
	  tests though they show a divergence on Linux

Wed Mar 27 10:06:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c trionan.c: previous commit also included patches
	  from Richard Jinks on some IEEE support corner case

Wed Mar 27 10:03:11 CET 2002 Daniel Veillard <daniel@veillard.com>

	* AUTHORS HACKING: Added Igor Zlatkovic as official maintainer
	* python/Makefile.am python/tests/Makefile.am: Albert Chin pointed
	  that $(datadir) should be used for docs

Tue Mar 26 13:43:16 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: Thomas Steinborn pointed out #76404 that libxml2
	  could leak filedescriptors

Tue Mar 26 08:55:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in nanohttp.c: applied patch from Allan Clark for
	  UnixWare/OpenServer

Mon Mar 25 17:45:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.19
	* doc/*: rebuilt the docs

Mon Mar 25 17:34:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: fixing #76043, got fed up with non-portability
	  of that piece of code.

Mon Mar 25 13:08:21 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c SAX.c: Never commit without running "make tests" :-(
	  fix a couple of stupidities in the previous commit
	* result/*: a few changes in some attribute order result of previous
	  commit.

Mon Mar 25 11:46:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c SAX.c: fixed bug #76168, attribute redeclared in
	  the internal subset should not raise duplicate ID errors,
	  also there was a small bug in conjunction to namespace
	  declarations defaulted and xml:xxx attributes DTD definitions.

Fri Mar 22 15:13:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Richard Jinks also raised some rounding problems
	  this tries to fix them

Fri Mar 22 13:22:09 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Richard Jinks spotted an incoherent memory allocation
	  behaviour in xmlXPathCastToString()

Thu Mar 21 14:25:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fixed a bug in the ISO-Latin 1 to UTF8 encoder
	  raised by Morus Walter

Thu Mar 21 14:07:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c include/libxml/xmlversion.h.in: applied 2 fixups
	  from Igor

Thu Mar 21 13:30:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing #75619, related to a problem when trying
	  to evaluate condition when the current node set resulting
	  from that sub-step evaluation is empty. Also fixes 2 potential
	  problem with previous-sibling and next-siblings axis.

Thu Mar 21 09:03:59 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: patch from Mark Vakoc to build C14N if DocBook and
	  HTML support is not configured in.

Wed Mar 20 22:42:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c error.c parser.c parserInternals.c tree.c xmlIO.c
	  include/libxml/tree.h: dohh I really didn't intended to commit
	  this test version :-(

Wed Mar 20 20:20:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: I wanted to see the real speed at the SAX interface
	  after a little too many Ximianer started complaining about the
	  parser speed.
	  added a --quiet option:
	  paphio:~/XML -> ls -l db100000.xml 
	  -rw-rw-r--    1 veillard www      20182040 Mar 20 10:30 db100000.xml
	  paphio:~/XML -> time ./testSAX --quiet db100000.xml 
	  3200006 callbacks generated
	  real	0m1.270s
	  Which means 16MBytes/s and 3Mcallback/s

Tue Mar 19 19:33:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: valgrind spotted another error that time when running
	  on libxslt regression tests

Tue Mar 19 15:24:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: adding "make valgrind" running the full regression
	  tests (except python ones) under Valgrind (using valgrind -q
	  which was kindly added by the author).
	* valid.c: stupid bug pinpointed by Valgrind, the regression tests
	  passes cleanly now except an obcure floating point initialization
	  raised in log10() in one XPath regression test ???
	* tree.c: edited some comments to close #75244

Tue Mar 19 12:15:20 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: pretty insane thing, the xmlXPathFormatNumber()
	  was not serializing 1 as "1" if LC_ALL=sv_SE :-( and in the
	  context of ScrollKeeper, made sure that if the number is
	  an integer, the serialization follows the description at
	  http://www.w3.org/TR/xpath#section-String-Functions

Mon Mar 18 19:18:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.18
	* doc/*: updated and rebuilt the web site
	* *.c libxml.h: implement the new IN_LIBXML scheme discussed with
	  the Windows and Cygwin maintainers.
	* parser.c: humm, changed the way the SAX parser work when
	  xmlSubstituteEntitiesDefault(1) is set, it will then 
	  do the entity registration and loading by itself in case the
	  user provided SAX getEntity() returns NULL.
	* testSAX.c: added --noent to test the behaviour.

Mon Mar 18 12:44:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Wilfried Teiken provided a hackish but working
	  way to get context reported back on entities when parsing
	  with SAX and without breaking the DOM build.

Sun Mar 17 11:31:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: applied a new patch from Aleksey Sanin
	* doc/site.xsl doc/xml.html doc/*.html: updated the documentation
	  to reference Aleksey implementation of XML digital Signatures

Sat Mar 16 23:01:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: small fix to avoid potential problem due to
	  ordering of freeing data
	* python/Makefile.am: people were complaining about 
	  the generated file in python dir not being built

Fri Mar 15 23:21:40 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in python/Makefile.am python/tests/Makefile.am
	  python/generator.py python/libxml.c python/types.c: Cleanup
	  of the python Makefiles based on Jacob and James feedback,
	  fixed the spec file accordingly, fixed the number of warning
	  that passing my pedantic CFLAGS was generating. Conclusion
	  is that Python includes are real crap.

Fri Mar 15 19:41:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure,in: it was reported quite a few times that
	  xml2-config --cflags should not output
	  -I$includeprefix/libxml2/libxml because libxml2 header names
	  clashes with existing names like list.h from C++ stl.
	  Includes should be #include<libxml/xxx.h> so ...

Fri Mar 15 10:41:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: another patch from Aleksey Sanin

Fri Mar 15 08:55:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: applied patch from Aleksey Sanin fixing a problem in the
	  canonicalization algorithm
	* doc/xml.html doc/index.html: added the C14N references on the 
	  index page.

2002-03-13  jacob berkman  <jacob@ximian.com>

	* python/Makefile.am: remove LDADD and CFLAGS as this is broken
	usage, redundant, and gcc specific

Wed Mar 13 11:00:59 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: speedup some node selection operations, this can
	  have a significant impact on DocBook Norm's stylesheets
	* nanohttp.c: someone reported that SOCKLEN_T may not be defined
	  make sure it's always the case
	* debugXML.c: distinguish CDATA and comments in ls operations

Tue Mar 12 19:45:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/*.h: Heiko W. Rupp fixed a lot of comments
	  to generate better API descriptions etc...

Mon Mar 11 10:10:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: Fixing #74186, made sure all boolean expressions
	  get fully parenthesized, ran indent on the output
	* configure.in HTMLtree.c SAX.c c14n.c debugXML.c tree.c xpointer.c
	  include/libxml/tree.h: also #74186 related, removed the
	  --with-buffers option, and all the preprocessor conditional
	  sections that were resulting from it.

Sun Mar 10 17:47:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: applied patch from Dodji Seketeli fixing an
	  uninitialized variable in xmlValidGetValidElements()

Sat Mar  9 15:10:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: fixed a few comments
	* doc/*.html doc/*/*.html: regenerated the docs and added
	  the C14N API
	* doc/api.xsl doc/gnome-xml.sgml: fixups and added IDs

Sat Mar  9 11:16:11 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: fix to adapt varaiations in the
	  bindings
	* configure.in python/setup.py python/setup.py.in: fixed to
	  have the version of the python scripts automatically updated

Fri Mar  8 16:45:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a bug newly introduced and pointed by Uwe Fechner
	  in xmlCopyProp()

Fri Mar  8 15:49:10 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.17 release
	* doc/*: updated and rebuilt the docs
	* xpath.c: fixed a comment
	* python/libxml.c: fixed a possible reentrancy problem

Thu Mar  7 23:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c python/tests/Makefile.am python/tests/attribs.py:
	  fixed xmlHasNsProp() bugs for defaulted from DTD attribs,
	  added a specific regression test
	* python/generator.py: xmlHasNsProp() and xmlHasProp() shall
	  not raise exceptions when failing to find the attribute.

Thu Mar  7 16:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in xmllint.c: owen pointed out a problem with the
	  ftme fix, gettimeofday() was not detected by configure and
	  the ftime header wasn't included, dohhh

Thu Mar  7 12:19:36 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in xmllint.c: trying to fix #71457 for timing
	  precision when gettimeofday() is not available but ftime() is

Thu Mar  7 11:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in doc/Makefile.am: Fixed #73408 missing images
	  are now copied on install and part of the -devel RPM

Thu Mar  7 09:34:16 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: trying to avoid bug #72150 which was apparently
	  caused by a gcc bug (or a processor problem) as detailed
	  at http://veillard.com/gcc.bug

Thu Mar  7 01:02:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c python/tests/Makefile.am python/tests/cutnpaste.py:
	  fixed xmlReconciliateNs(), added a Python test/example for
	  inter-document cut'n paste
	* python/libxml.py: fixed node.doc on document nodes and added
	  xpathEval() onto node objects

Wed Mar  6 22:38:03 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed some htmlSetMetaEncoding() problems
	* python/libxml.c python/tests/Makefile.am python/tests/serialize.py:
	  fixup and integrated tests for the serialization stuff

Wed Mar  6 19:40:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am libxml.3 libxml.4 libxml.spec.in: Fixed bug #72570
	  moved the libxml man page to section 3

Wed Mar  6 18:34:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix bug #72490
	* python/libxml.c python/libxml.py: added methods serialize()
	  and saveTo() to all node elements.

Tue Mar  5 21:27:03 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: closed #73430, don't read from an input source
	  which indicated an end-of-file or an error.

Tue Mar  5 16:33:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: make sure SAX endDocument is always called as
	  this could result in a Python memory leak otherwise (it's
	  used to decrement ref-counting)
	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml2-python-api.xml python/libxml2class.txt
	  python/tests/error.py python/tests/xpath.py: implemented
	  the suggestions made by Gary Benson and extended the tests
	  to match it.

Tue Mar  5 10:35:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: applied patch fixing #73450

Mon Mar  4 17:59:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing #61290 "namespace nodes have no parent"
	  long standing divergence from the XPath REC. NodeSets
	  simply hold a copy of namespace nodes and those node ->next
	  points to the parent (which may not be the node carrying the
	  definition).
	* include/libxml/xpath.h: flagged but didn't added a possible
	  speedup
	* DOCBparser.c HTMLparser.c: removed some warnings from push
	  parser due to new state being added.
	* tree.c: new fix from Boris Erdmann
	* configure.in c14n.c include/libxml/c14n.h testC14N.c: added
	  the XML Canonalization support from Aleksey Sanin

Sun Mar  3 15:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: patch from Boris Erdmann fixing some namespace odities
	  with xmlCopyNode()

Sat Mar  2 10:33:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix bug #72706 when loading a NULL entity

Fri Mar  1 17:14:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: Fixed #72346, about handling of xmlns:foo="", this could
	  actually change in a future XML Namespace revision.

Fri Mar  1 17:12:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/types.c python/tests/Makefile.am python/tests/xpathret.py:
	  added the possibility of returning nodesets from XPath extension
	  functions written in Python

Fri Mar  1 13:56:12 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/*: committing some Python bindings work done while travelling

Fri Mar  1 10:11:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: close #72663 and #72658, don't memdump unless compiled
	  explicitly with memory debugging switched on

Sat Feb 23 11:08:09 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/types.c:
	  Added wrapper for the xmlURIPtr type, provided accessors, fixed
	  the accessor generator for strings
	* python/tests/Makefile.am python/tests/tstURI.py: added a specific
	  regression test.

Fri Feb 22 23:44:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/README python/generator.py python/libxml.c python/setup.py:
	  added the 'usual' setup.py to allow building a libxml2-python
	  module based on the same code. The initialization is however
	  different the 2 .so files fo libxml2 and libxslt are identical and
	  they entry point initialize both libraries. this is done to avoid
	  some possible nasty problem since the Python don't merge the maps
	  of all shared modules.

Wed Feb 20 23:16:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a push/encoding bug reported by Michael
	  on librsvg

Wed Feb 20 19:54:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parserInternals.h: fixes a misplaced #endif

Wed Feb 20 17:47:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c valid.c: found and fixed a couple of allocation bugs

Wed Feb 20 15:36:03 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/python.html doc/*: added a Python and binding
	  page describing the current state of the Python bindings and 
	  giving pointers to the other languages wrappers.

Wed Feb 20 11:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.16
	* doc/* python/libxml2class.txt: updated and rebuilt the docs,
	  rebuilt the API and web site
	* xpath.c: fixed #71978 portability bugs

Tue Feb 19 22:49:36 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: oops broke automatic defaulting of namespaces attributes.

Tue Feb 19 22:01:35 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parserInternals.h parser.c: had to change
	  2 internal parsing API when processing document content
	  to check the start and end of element content are defined
	  in the same entity
	* valid.c include/libxml/valid.h: attribute normalization can
	  generate a validity error added xmlValidCtxtNormalizeAttributeValue()
	  with the context to report it.
	* SAX.c: fixed the last known bugs, crazy validation constraints
	  when a document is standalone seems correctly handled. There
	  is a couple of open issues left which need consideration especially
	  PE93 on external unparsed entities and standalone status. 
	  Ran 1819 tests: 1817 succeeded, 2 failed and 0 generated an error in 8.26 s.
	  The 2 tests left failing are actually in error. Cleanup done.

Tue Feb 19 15:17:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: implemented E59 spaces in CDATA does not match the
	  nonterminal S

Tue Feb 19 14:44:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c valid.c: more validation test fixups
	* check-xml-test-suite.py: added duration info for the tests

Mon Feb 18 23:25:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c valid.c: a couple of errors were reported but not
	  saved back as such in the parsing context. Down to 1% failure rate
	  Ran 1819 tests: 1801 succeeded, 18 failed and 0 generated an error

Mon Feb 18 20:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlInternald.c: isExtender was missing a char 
	* parser.c include/libxml/parser.h: % are acceptable in the
	  internal subset if within a PUBLIC ID

Mon Feb 18 19:27:32 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c parserInternals.c valid.c: more work on the conformance
	  suite. Took the step to finally block documents with encoding
	  errors. It's a fatal error per the spec, people should have fixed
	  their documents by now.

Mon Feb 18 15:30:14 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: fixed the test script after some discussion
	  on the semantic of TYPE="error"
	* Makefile.am: added the script to the distrib

Mon Feb 18 12:17:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c entities.c: fixed a couple of conformances issues deep
	  into the validation code (standalone and undeclared Notations)

Mon Feb 18 00:17:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #71741 supid typo an a bug about encoding parsing
	  stayed there for years !

Mon Feb 18 00:06:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c SAX.c: fixed #71740 NotationDecl with a required field
	  missing

Sun Feb 17 23:45:40 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: improved the behaviour a bit as
	  well as the logs
	* parser.c valid.c SAX.c: fixed a few more bugs 
	  "Ran 1819 tests: 1778 succeeded, 41 failed, and 0 generated an error"

Sun Feb 17 20:41:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: python script to run regression tests
	  against the XML Test suite of W3C/OASis
	* SAX.c: fixed a validation bug
	* parser.c: fixed 3 errors pointed by the test suite
	* doc/buildDocBookCatalog: fixed a typo pointed by drake
	* python/Makefile.am: fixed a dependendy

Fri Feb 15 21:47:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: avoid a warning bug #71594

Wed Feb 13 22:13:33 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: Jesse Perry provided a patch to remove a few
	  warning on alpha/Tru64

Wed Feb 13 14:30:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/entities.h: fixing a comment
	* valid.c: fixing some troubles with validity check on namespaces
	* result/VC/NS3 test/VC/NS3: added a specific regression test

Wed Feb 13 14:05:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Fixing #71342 serializing '\n' in attribute values
	* result/noent/att3 result/att3 test/att3: added a specific
	  test.

Tue Feb 12 14:45:32 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: couple of bug fixes

Mon Feb 11 19:41:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/*.py: removed tabs and used spaces.

Mon Feb 11 19:25:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.15
	* doc/news.html doc/xml.html doc/xmlio.html: rebuilt some docs

Mon Feb 11 14:53:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xmlcatalog_man.xml: trying to close Red Hat bug #58707
	  https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=58707

Mon Feb 11 09:53:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/encoding.h include/libxml/entities.h
	  include/libxml/globals.h include/libxml/parser.h
	  include/libxml/threads.h include/libxml/tree.h
	  include/libxml/xmlmemory.h: trying to fix the include mess

Mon Feb 11 08:53:33 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlmemory.h: reverted part of the previous
	  attempt to provide #69655, this was breaking the build.

Sun Feb 10 14:13:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c Makefile.am build_glob.py configure.in debugXML.c
	  globals.c parser.c threads.c tree.c valid.c xmlmemory.c
	  xpath.c xpointer.c include/libxml/globals.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/tree.h
	  include/libxml/xmlmemory.h include/libxml/xpathInternals.h:
	  Tentatively fixed #69655 , make compiling with -Wredundant-decls
	  clean.
	* python/libxml.c: fixed a warning.

Sun Feb 10 12:02:59 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c valid.c xinclude.c: fix #68882, cleanup the XInclude
	  copying of node, merge back IDs in the target document.
	* result/XInclude/docids.xml test/XInclude/docs/docids.xml
	  test/XInclude/ents/ids.xml: test case
	* result/VC/ElementValid4: output changed due to a typo fix

Sat Feb  9 23:15:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: seems some version of automake didn't
	  generate the dependencies right as Jacob found out. Add
	  an extra dependency rule.

Sat Feb  9 18:59:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c valid.c: Justin Fletcher found some parts
	  of the code needing cleanup
	* libxml.spec.in python/Makefile.am python/generator.py
	  python/libxml.c python/libxml.py: Fixed the python Makefiles
	  corrected a bug showing up on ia64, changed the name of the
	  python internal module too

Fri Feb  8 15:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: applied patch from Andris Pavenis for binary
	  name suffixes

Fri Feb  8 14:43:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c win32/win32config.h: fixing #68748

Fri Feb  8 14:37:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing #70166

Fri Feb  8 14:31:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing #70077

Fri Feb  8 14:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Copyright Makefile.am README configure.in libxml.spec.in:
	  Changed to the MIT Licence
	* doc/FAQ.html doc/catalog.html doc/intro.html doc/xml.html
	  doc/xmlio.html: updated the doc accordingly
	* include/libxml/xmlwin32version.h configure.in: preparing
	  2.4.14 release
	* python/generator.py python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/types.c:
	  fixed the const xmlChar * wrapper and generator, XPath extension
	  functions now use the context as first argument
	* python/tests/tstxpath.py python/tests/xpath.py
	  python/tests/xpathext.py: Updated the tests accordingly
	* tree.c: fixed bug #70067

Thu Feb  7 17:33:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* debugXML.c: always use stdout if output is NULL
	* xmlIO.c: don't close filedescriptors passed to outputBuffers
	* python/Makefile.am python/generator.py python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: augmented the number of bindings
	  handling FILE * and XPath contexts
	* python/tests/Makefile.am: avoid a stupid problem due to the
	  use of TEST.

Wed Feb  6 23:37:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: fixed stupid bug #70738 found by alfons hoogervorst

Wed Feb  6 17:04:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/libxml.c: cleanup the extension function lookup
	* xmlmemory.c include/libxml/xmlmemory.h: always compile the list

Tue Feb  5 17:33:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in python/Makefile.am: do not install outside
	  of prefix

Mon Feb  4 15:05:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/libxml.c: started adding SAX interfaces
	* python/tests/Makefile.am python/tests/pushSAX.py: added a basic
	  SAX test

Mon Feb  4 01:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: hardened the addChild function
	* python/generator.py python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/TODO:
	  added accessors needed for xmlNode, a bit more testing and
	  extension of interfaces
	* python/tests/Makefile.am python/tests/build.py: added a test
	  build from scratch/save/load/check

Sun Feb  3 21:10:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: change a small bit in the way valididy
	  error messages get initialized
	* python/TODO python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/types.c:
	  added some memory debugging to track leaks at the libxml2 level
	* python/tests/*.py: changed all tests to check for leaks,
	  there is just one left in XPath extension registrations.

Sun Feb  3 17:50:46 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/generator.py python/libxml2-python-api.xml
	  python/libxml2class.txt: more accessor classes for the parser
	  context, allow to switch on and check validity
	* python/tests/Makefile.am python/tests/error.py
	  python/tests/invalid.xml python/tests/valid.xml
	  python/tests/validate.py: added more test and added error.py
	  which I forgot to commit in the last step

Sun Feb  3 16:03:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/types.c: cleanup
	* python/libxml.c python/libxml.py python/libxml_wrap.h
	  python/generator.py python/libxml2-python-api.xml 
	  python/libxml2class.txt: added class for parser context, added
	  first cut for push mode support. Added a framework to generate
	  accessors functions.
	* python/tests/Makefile.am python/tests/push.py: added a push
	  test

Sun Feb  3 00:17:26 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/TODO python/libxml.py: fixed a small
	  bug a bit of cleanup.

Sat Feb  2 22:47:10 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt: adding error redirections and preformat
	  to a python handler
	* python/tests/Makefile.am python/tests/*.py: cleanup made all
	  tests self checking

Sat Feb  2 13:18:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: fixed a stupid bug when renaming
	  a function

Sat Feb  2 11:25:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in python/Makefile.am python/TODO python/generator.py
	  python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt: Progressing through the TODOs, class
	  description output, extra XML API, RPM now builds the wrappers
	  for all python installed versions

Sat Feb  2 10:13:52 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.spec.in python/Makefile.am python/TODO
	  python/generator.py python/libxml2class.txt: added more information
	  in the libxml2-python package including docs. Slightly changed
	  the class hierarchy
	* python/tests/*: added basic regression tests infrastructure too

Fri Feb  1 23:11:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.spec.in example/Makefile.am python/Makefile.am:
	  added libxml2-python as part of the packages installed

Fri Feb  1 18:48:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/generator.py python/libxml.c
	  python/libxml.py: more work, now able to extend the
	  XPath interpreter with functions written in python.

Fri Feb  1 10:28:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: Jacob sent a patch to allow building from
	  tarfile.

Fri Feb  1 00:40:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/libxml.c configure.in Makefile.am:
	  inserted the python wrappers build, I hope this won't be too
	  unportable

Thu Jan 31 21:27:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: minor optimization
	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml_wrap.h: more work on the python bindings,
	  they now support XPath and there is no evident leak

Thu Jan 31 00:48:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py:
	  more work on the python bindings generator.

Wed Jan 30 21:51:26 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml_wrap.h:
	  more work on the python bindings.

Wed Jan 30 17:35:33 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml_wrap.h: committed early version of a python binding
	  for private use only ATM

Sat Jan 26 22:41:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* entities.c tree.c include/libxml/entities.h: applied patch
	  from Anthony Jones to implement copy of DTD subtree too. Had
	  just to keep 2 function private which really ought to become
	  public ones.

Fri Jan 25 15:14:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added pointers to the web pages in the usage()

Thu Jan 24 17:04:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: more fixes from Petr Kozelka for attribute handling
	  in the tree API to align the semantic with DOM.

Thu Jan 24 16:00:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c tree.c entities.c: another set of patches from
	  Anthony Jones for copy operations cleanup and robustness

Wed Jan 23 18:53:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/APIchunk*.html doc/parsedecl.py doc/api.xsl: generated
	  an alphabetic index based on comments content
	* doc/*: rebuilt the web site with the new references

Wed Jan 23 15:14:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.h: Greg Sjaardema suggested to use an
	  exponential buffer growth policy in xmlParserAddNodeInfo()

Wed Jan 23 13:32:40 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/api.xsl doc/APIconstructors.html doc/APIfiles.html
	  doc/APIfunctions.html doc/APIsymbols.html doc/libxml2-refs.xml
	  doc/parsedecl.py doc/Makefile.am: updated the python extractor
	  to generate cross-references, and added/updated the stylesheets
	  to generate and link API indexes. The generic keyword index
	  is not done yet.
	* doc/*.html: regenerated all the usual docs too

Tue Jan 22 23:11:26 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added an xpath function to the shell for T. V. Raman

Tue Jan 22 22:42:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: patch from Anthony Jones to catch NULL nodes in
	  debug routines.

Tue Jan 22 22:38:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: apply an patch from Petr Kozelka for unlink and replace 
	  support of attribute nodes

Tue Jan 22 19:12:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/parsedecl.py: Build a new version
	  hopefully near complete and fully documented of the API in XML
	* HTMLtree.c SAX.c debugXML.c error.c globals.c parser.c tree.c
	 xmlIO.c xmlmemory.c include/libxml/catalog.h include/libxml/hash.h
	 include/libxml/list.h include/libxml/parser.h include/libxml/tree.h
	 include/libxml/parserInternals.h include/libxml/valid.hi
	 include/libxml/xmlIO.h include/libxml/xmlerror.hi
	 include/libxml/xmlmemory.h include/libxml/xmlversion.h.ini
	 include/libxml/xpath.h include/libxml/xpathInternals.h:
	  Cleaned up the doc comments a lot in the process, the interface
	  coverage is now 100%

Tue Jan 22 00:12:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/parsedecl.py: improved the script to
	  extracts comments from the gtk-doc DocBook output (a bit
	  convoluted but seems to work).

Mon Jan 21 18:29:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/Makefile.am doc/libxml2-api.xml doc/parsedecl.py:
	  added an XML description of the API, moved the script generating
	  it here. Added a "make api" target

Mon Jan 21 14:34:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Adam Lounds pointed out a bug in xmlSearchNs()

Mon Jan 21 09:55:21 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c include/libxml/xpathInternals.h: the change made to
	  xmlXPathFuncLookupFunc was incompatible roll it back

Sun Jan 20 23:03:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: cleanup patch from Anthony Jones
	* doc/Makefile.am: fix the headers to avoid in make scan
	* parserInternals.c xpath.c include/libxml/*.h: cleanup of the
	  includes, * vs Ptr and general cleanup
	* parsedecl.py: first version of a script to extract the
	  module interfaces, the goal will be to provide .decl or XML
	  specification of the interfaces to build wrappers.

Sun Jan 20 13:38:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xmlcatalog_man.xml xmlcatalog.c: Fixed bug #68830, xmlcatalog
	  now provides return codes in case of errors

Sat Jan 19 16:36:21 CET 2002 Bjorn Reese <breese@users.sourceforge.net>

	* trio.h trio.c triodef.h triop.h trionan.h trionan.c Makefile.am:
	  Upgraded to trio baseline 1.6
	* strio.h strio.c: Replaced by triostr.h and triostr.c

Fri Jan 18 17:22:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlIO.c xmlcatalog.c: removed the last occurrences
	  of strdup usage in the code

Fri Jan 18 12:47:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c error.c: Keith Isdale complained rightly that 
	  xmlInitParser() did not preserve value set by xmlSetGenericErrorFunc

Thu Jan 17 09:44:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed the funxtion to set the xml: attributes
	* debugXML.c: added "setbase" to test it.

Wed Jan 16 16:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: update xmlNodeSetContent() and xmlNodeSetContentLen()
	  to allow updating an attribute content

Tue Jan 15 18:09:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.h: try to avoid problems when compiling on Windows

Mon Jan 14 18:56:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: patch from Anthony Jones for hash.c allocation size
	* Makefile.am: trying to work around Yet Another Libtool Madness
	  and build the 2.4.13 release finally ...

Mon Jan 14 18:27:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: updated to 2.4.13
	* doc/* : update of the documentation

Mon Jan 14 17:53:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c tree.c: some cleanup after an unsuccessful attempt
	  at fixing #61290 :-(

Sun Jan 13 21:30:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed xmlSaveFormatFileEnc() when encoding == NULL
	  Fixes bug #67229

Sun Jan 13 17:14:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: trying to avoid troubles when a subtree is copied
	  and coalesced in part with the target tree. Should fix 
	  bug #67407

Sun Jan 13 16:37:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed validation of attributes content of type
	  NAME NAMES NMTOKEN and NMTOKENS to accept internationalized
	  values, very old bug. Fixes #67671

Sun Jan 13 15:07:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parserInternals.h tree.c: integrated
	  a couple of fixes and a new API function xmlSetEntityReferenceFunc()
	  from Keith Isdale and dedicated to xsldbg the XSLT debugger.

Sun Jan 13 14:23:21 CET 2002 Daniel Veillard <daniel@veillard.com>

	* threads.c: applied Serguei Narojnyi's patch to add native
	  thread support on the Win32 platform
	* testThreadsWin32.c Makefile.am: added the test program also
	  from Serguei, Win32 specific
	* include/win32config.h include/libxml/xmlwin32version.h.in:
	  added patch from Igor for the Windows thread specific defines.

Wed Jan  9 12:50:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* entities.c: Anthony Jones pointed a bug in xmlCopyEntity()

Tue Jan  8 14:23:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*.html doc/site.xsl doc/Makefile: renamed XML.html
	  output page into XMLinfo.html. Close bug #66951 and
	  raised by Robert Collins too.

Tue Jan  8 14:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>

	* encoding.c: Paul Keogh pointed out a possibility of segfault
	  on repeted xmlAddEncodingAlias() / xmlCleanupEncodingAlias().
	  Closes bug # 68238

Tue Jan  8 12:48:27 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*.html: updated the Gdome2 links

Tue Jan  8 11:32:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.h: Applied following patches from Robert Collins
	  and make sure IN_LIBXML is defined when compiling it
	-------
	* include/libxml/xmlversion.h.in (LIBXML_DLL_IMPORT): Use on Cygwin
	  as well as Visual C.
	* parser.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
	* parserInternals.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
	* strio.c (PLATFORM_UNIX): Define for Cygwin.
	* triodef.h (TRIO_PLATFORM_UNIX): Define for Cygwin.
	* xmlIO.c (xmlFileOpen): Use unix behaviour for Cygwin.
	  Use binary mode opens for Cygwin (xmlFileOpenW xmlParserGetDirectory
	  xmlSysIDExists xmlNoNetExists).
	* xmllint.c: Don't include winsock2.h for Cygwin.

Mon Jan  7 17:52:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Jirka Kosek pointer out a bug in xmlParseTextDecl()
	  when the version info is not present.

Mon Jan  7 00:03:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Anthony Jones  pointed out a problem in
	  xmlStringGetNodeList() and provided a fix for it

Sun Jan  6 13:45:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Frank J Franklin to remove a bug in
	  xmlCreatePushParserCtxt() when the initial buffer passed
	  is large.

Sat Jan  5 19:24:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* win32/*: big cleanup of the Windows/MSVC project files
	  from Igor Zlatkovic

Wed Jan  2 14:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: should fix #67674 and avoid troubles if 
	  xsltproc is not available or fails in the prefix provided

Tue Jan  1 17:48:56 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: one more doc patch from Charlie Bozeman.

Mon Dec 31 17:35:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c parser.c valid.c include/libxml/parserInternals.h
	  include/libxml/xmlerror.h include/libxml/xpathInternals.h:
	  Fixed a few other problems raised by Charlie Bozeman.
	* result/VC/ElementValid[5-7]: fixed the output

Mon Dec 31 17:13:34 CET 2001 Daniel Veillard <daniel@veillard.com>

	* *.c include/libxml/*.h doc/html/*: applied 42 documentation
	  patches from Charlie Bozeman. Regenerated the HTML docs.

Thu Dec 20 14:59:52 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/debugXML.h win32/dsp/libxml2.def.src: fixes
	  for Windows from Igor

Tue Dec 18 12:13:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Justin Fletcher patch for --output or -o

Tue Dec 18 08:52:32 CET 2001 Daniel Veillard <daniel@veillard.com>

	* win32/libxml2/libxml2.def.src: close #67019

Tue Dec 18 08:08:51 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Justin Fletcher generic timing patch
	  similar to the one already applied to xsltproc.

Mon Dec 17 16:29:08 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h tree.c: applied documentation patches
	  from Charlie Bozeman

Thu Dec 13 21:24:16 MST 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmllint.xml, xmllint.1 - document --dropdtd

Thu Dec 13 23:19:50 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix the xmlStrdup() used in the previous patch.
	* valid.c: added --dropdtd
	* tree.c: fixed xmlUnlinkNode so it also removes the references
	  from the document if the node is a DTD

Thu Dec 13 15:54:35 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c valid.c: cleanup some static declarations

Thu Dec 13 15:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: removed another strdup()
	* doc/FAQ: removed the HP/UX entry

Thu Dec 13 09:44:58 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix bug #66816 when validating.
	* xmllint.c: don't use sys/time.h if configure did not found it

Mon Dec 10 21:39:55 MST 2001 John Fleck <jfleck@inkstain.net>

	* docs/xmllint.1, xmllint.xml, xmlcatalog.1, xmlcatalog_man.html,
	xmlcatalog_man.xml

Mon Dec 10 22:06:16 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlmemory.h: Hietaniemi Jarkko pointed out that
	  xmlInitMemory() was declared twice

Sun Dec  9 14:59:23 CET 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c: do not reference strdup() !
	* configure.in libxml-2.0.pc.in: trying to fix the libs
	  of the various config extraction modules

Fri Dec  7 15:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in : preparing 2.4.12
	* doc/* : updated and rebuilt the docs

Fri Dec  7 12:32:00 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: closed bug #66159
	* testURI.c: added --escape option
	* configure.in: some cleanup for xml2-config --cflags

Thu Dec  6 15:31:30 CET 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c testThreads.c: removed some misplaced includes
	  of xmlversion.h

Thu Dec  6 09:06:08 EST 2001 Daniel Veillard <daniel@veillard.com>

	* threads.c: patch from Gary Pennington fixing a possible
	  problem at initialization time.

Wed Dec  5 13:01:37 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.h parser.c testThreads.c macos/: integrated
	  Eric Lavigne contribution to build libxml2 on MacOS using
	  CodeWarrior.

Tue Dec  4 14:13:44 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Geert Kloosterman's patch to fix
	  --repeat --timing output

Thu Nov 29 17:10:22 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: Robin Berjon <robin@knowscape.com> found a case
	  where non-wellformed XML declaractions were not detected.

Wed Nov 28 15:41:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xpointer.c: fixed a compilation bug pointed by Danny Jamshy

Wed Nov 28 10:09:51 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: as robert pointed again, xmlInputCallbackInitialized
	  gets reset by xmlCleanupInputCallbacks() and this makes the
	  function useless. Same for output.

Tue Nov 27 17:22:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: robert pointed out a loop error in callback cleanups

Mon Nov 26 16:56:00 CET 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c debugXML.c include/libxml/tree.h include/libxml/debugXML.h:
	  moved xmlGetLineNo() and xmlGetNodePath() into the main tree module,
	  they are not really tied to debugging

Mon Nov 26 11:31:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.11
	* xmllint.c: better --catalogs description

Sun Nov 25 11:34:24 CET 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a couple of problems in xmlSetProp()

Thu Nov 22 19:19:10 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c tree.c xmlIO.c xmlmemory.c: some cleanups when chasing
	  unappropriate stdout output.

Thu Nov 22 13:58:14 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: Fixed a couple of macro errors pointed out
	  by Denis Beurive, closes #65111

Tue Nov 20 10:34:01 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: in case of content model validity error, don't
	  print it if validity warnings were not requested.

Tue Nov 20 09:30:02 CET 2001 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied a couple of patches from Brian D Ripley.
	* parserInternals.c: removed the last exit() call. Print an
	  unmaskable error on stderr instead (library mismatch detection)

Sat Nov 17 17:16:51 MST 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, doc/xmllint.1 - update xmllint man page with
	shell instructions from Heiko Rupp

Thu Nov 15 14:53:42 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: use the URL notation file:// for default catalog paths

Wed Nov 14 16:03:02 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: better comments for _private fields
	* tree.c: removed a problem when copying an entity reference.

Tue Nov 13 16:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>

	* vms/*: updated instructions and diffs from John A Fotheringham

Mon Nov 12 23:43:22 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlerror.h: avoid an include problem if
	  #include <libxml/xmlerror.h> happens first in code
	  seems to be the case in KDE libs

Mon Nov 12 22:32:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/* include/libxml/xmlwin32version.h.in: update
	  from Igor for Windows

Mon Nov 12 10:19:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Gary Pennington pointed out a missing prefix

Sat Nov 10 12:55:42 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.10
	* doc/*: upgraded and rebuilt the docs

Sat Nov 10 12:33:38 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fix comment in scripts element parsing.
	* result/HTML/doc3*: updated the results.

Sat Nov 10 11:18:18 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: another URI bug fix #63336, using Joel Young patch.

Sat Nov 10 11:07:26 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h: add xmlGetNodePath()
	  a cleaned up version of the Pwd shell string generation.

Fri Nov  9 00:34:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/tree.h: trying to fix namespaces +
	  validation problems for good, closing #63619 in the process
	* result/valid/dia.xml test/valid/dia.xml: the Dia test was
	  wrong in this respect, fixed it.

Thu Nov  8 18:31:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: Morus Walter patch to allow --format and --encode

Thu Nov  8 14:52:18 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: Stefan Kost provided an help command for the shell

Wed Nov  7 14:32:55 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: Heiko Rupp pointed that the shell would crash
	  on empty nodesets returns.

Wed Nov  7 13:52:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Weiqi Gao pointed out that xmlcatalog
	  migh need the history libraries

Tue Nov  6 23:49:09 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c test/HTML/lt.html result/HTML/lt.html*:
	  handle the case of < in quoted attributes, Bastian Kleineidam

Tue Nov  6 16:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: releasing 2.4.9
	  fixing catalog breakages
	* Makefile.am catalog.c result/catalogs/catal 
	  result/catalogs/mycatalog.* test/catalogs/catal*:
	  fixed more problems in catalog support, added more regression tests
	  for both XML and SGML catalog handling

Mon Nov  5 20:26:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: applied an improvement to xmlGetLineNo() from
	  Keith Isdale

Mon Nov  5 15:20:16 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: dohhhh XML catalog add and remove ops were broken too.
	  Side effect of the progressive catalog loading

Mon Nov  5 12:40:54 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: confexecdir and confexec_DATA were defined twice
	  pointed out by Karl Eichwalder

Sun Nov  4 23:18:34 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: avoid unlink() and use remove() instead.

Sun Nov  4 23:12:38 CET 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: cleanup
	* include/libxml/xmlwin32version.h: updated with 2.4.8

Sun Nov  4 21:17:24 CET 2001 Daniel Veillard <daniel@veillard.com>

	* encoding.c global.data globals.c testThreads.c: fix bug #63752
	  of compiling libxml with a non standard set of options

Sun Nov  4 13:11:41 MST 2001 John Fleck <jfleck@inkstain.net

	* doc/xmllint.xml, xmllint.1 - updating xmllint man page to
	document --sgml option, fixing gnome bugzilla #63382

Sun Nov  4 20:56:53 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c: Fixed SGML catalogs
	  breakage of 2.4.7, added a couple of really needed APIs
	  like xmlCatalogIsEmpty() and xmlNewCatalog()
	* xmlcatalog.c: updated --sgml --noout to be a suitable replacement
	  for install-catalog
	* configure.in: preparing 2.4.8

Thu Nov  1 15:29:31 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c include/libxml/HTMLtree.h
	  include/libxml/tree.h include/libxml/xmlIO.h: more include
	  cleanups, export cleanly one html output + format function.

Thu Nov  1 14:12:12 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed initGenericErrorDefaultFunc call from
	  xmlInitParser() since it could destroy previous calls to
	  xsltSetGenericErrorFunc() effects

Thu Nov  1 09:37:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h: bool can be a reserved
	  keyword.

Wed Oct 31 18:50:08 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* threads.c: cleanup too
	* xmlIO.c include/libxml/xmlIO.h: added xmlNoNetExternalEntityLoader()
	  from xsltproc
	* include/libxml/tree.h include/libxml/parser.h: trying to break a
	  dependency loop.

Tue Oct 30 18:38:53 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: Justin Fletcher pointed out that xmlParseXMLCatalog
	  was not used anymore !

Tue Oct 30 13:33:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.7
	* Makefile.am doc/Makefile.am: switched to the latest xmllint
	  manual page from John
	* doc/*: updated the doc and rebuilt the generated pages

Tue Oct 30 11:31:19 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: closing bug #62711, the library should never
	  close stdin or stdout.

Tue Oct 30 10:46:12 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: second pass at fixing #63336, using Joel Young
	  final patch. looks okay.

Tue Oct 30 00:56:05 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c include/libxml/uri.h: trying to clear #63336
	  allowing the escaping routine to parse unconformant
	  URI-References.

Mon Oct 29 19:09:46 CET 2001 Daniel Veillard <daniel@veillard.com>

	* vms/readme.vms vms/build_libxml.com nanoftp.c 
	  include/libxml/xmlversion.h.in: a few VMS updates from
	  John A Fotheringham
	* include/libxml/xmlIO.h xmlIO.c: added xmlCleanupInputCallbacks()
	  and xmlCleanupOutputCallbacks() for the Perl binding people.

Mon Oct 29 12:44:17 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c globals.c DOCBparser.c HTMLparser.c error.c:
	  apply fixes to close #63271 and avoid segfaults when
	  the error routine gets callbed before xmlInitParser()
	  get called.
	* nanoftp.c error.c: Applied patches from Justin Fletcher
	  correcting some xmlGenericError misuses.

Sat Oct 27 14:04:45 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmllint.xml, doc/xmllint.1
	New and improved man page for xmllint - .xml is the original, .1
	is the generated man page

Wed Oct 24 14:34:25 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* doc/site.xsl doc/*.html doc/Makefile.am: now autogenerate
	  the web site from the main HTML document.

Tue Oct 23 14:32:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed an erroneous validation bug when PE refs
	  occurs in external parsed entities referenced from the
	  internals subset
	* test/valid/index.xml test/valid/dtds/nitf-2-5.dtd
	  test/valid/dtds/NewsMLv1.0.dtd result/valid/index.xml*:
	  added the associated testcase, it's a nice one.
	* HTMLparser.c: generate the DTD node as HTML still ...
	* HTMLtree.c: fixed errors in Set/GetMetaEncoding 

Mon Oct 22 14:20:17 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed a bug in htmlNewDoc()

Mon Oct 22 11:32:36 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* test/threads/*: added entities testing to the Thread test
	* testThreads.c: make the test reasonable
	* DOCBparser.c: fix the DTD public and system ID
	* xmllint.c: added --sgml for SGML DocBook importing
	* Makefile.am: added Docbtests target

Fri Oct 19 11:47:13 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: use only "anonymous@" string for anonymous passwds
	* testThreads.c: removed bogus include

Thu Oct 18 16:56:23 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c valid.c result/valid/rss.xml result/valid/rss.xml.err:
	  fixed a very serious (looping) validation bug

Wed Oct 17 11:56:25 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h include/libxml/threads.h threads.c
	  testThreads.c: far more testing, cleaning up bugs
	* *.c : make sure globals.h is always included.

Wed Oct 17 17:41:41 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: try to get rid of parser loops for good.

Wed Oct 17 13:29:02 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: fixed some bugs in CFLAGS passing.
	* test/threads Makefile.am testThreads.c: added a specific
	  threaded test case (really nasty, guaranteed).

Tue Oct 16 23:01:49 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: serious cleanup on the management of the
	  XML catalog tree, more tests done, especially with
	  the catalog PI.

Tue Oct 16 08:43:43 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: avoid a problem in catalog cleanup on SMP if
	  catalogs were not initialized.

Tue Oct 16 14:33:19 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xpath.c: trying to cleanup the not thread safe
	  parts of the library.

Mon Oct 15 14:30:11 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h configure.in global.data: make
	  the allocation be per-thread a configure option
	* encoding.c include/libxml/parser.h: fixed compilation
	  errors

Mon Oct 15 12:45:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h: Norm reported that a few lines
	  added were breaking libxslt compile, removed them for now

Sun Oct 14 05:55:01 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c threads.c: debugged and fixed
	  initialization problems which were giving troubles on SMP
	  boxes.

Sat Oct 13 16:17:13 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: missing globals.h

Sat Oct 13 14:15:00 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c: added a couple of standard includes.

Sat Oct 13 11:08:20 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/SAX.h include/libxml/globals.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/tree.h
	  include/libxml/xmlerror.h HTMLparser.c SAX.c error.c globals.c
	  nanoftp.c nanohttp.c parser.c parserInternals.c testDocbook.c
	  testHTML.c testSAX.c tree.c uri.c xlink.c xmlmemory.c:
	  Applied the last patches from Gary, cleanup, activated threading
	  all user accessible global variables are now handled in globals.[ch]
	  Still a bit rought but make tests passes with either 
	  --with-threads defined at configure time or not.
	* Makefile.am example/Makefile.am: added globals.[ch] and threads
	  linking options

Fri Oct 12 19:25:55 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am include/libxml/Makefile.am
	  include/libxml/globals.h globals.c  include/libxml/threads.h
	  threads.c build_glob.py global.data xmlcatalog.c acconfig.h
	  configure.in: started integrating the core of the thread support
	  not activated yet but half integrated. The code should still
	  compile and work anyway.

Fri Oct 12 00:53:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c catalog.c debugXML.c entities.c nanoftp.c
	  parser.c valid.c xmlmemory.c xpath.c xpointer.c: started
	  integrating the non-controversial parts of Gary Pennington
	  multithread patches
	* catalog.c: corrected a small bug introduced

Thu Oct 11 20:58:15 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c include/libxml/catalog.h: very serious cleanup,
	  isolating unportable code and as much as possible the accesses
	  to the global shared catalog. May need more testing !

Thu Oct 11 11:10:31 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/debugXML.h debugXML.c tree.c: integrating
	  Keith Isdale patches for the XSLT debugger interfaces. Some
	  cleanup

Thu Oct 11 08:44:01 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.mingw: update from Tobias Peters for 2.4.5
	* DOCBparser.c: generate line nubers in elements

Wed Oct 10 11:35:45 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.6 release
	* doc/xml.html doc/html/*: updated and rebuilt the docs
	* include/libxml/*.h *.c: fixed a number of teh/the widht/width typos

Mon Oct  8 20:38:27 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog.1, xmlcatalog_man.html
	adding documentation for DV's supercatalog support

Mon Oct  8 17:00:16 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c xmlcatalog.c: adding SGML
	  super catalog support adding one API and one flag --sgml to
	  xmlcatalog

Sun Oct  7 16:43:57 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog.1
	One more crack at
	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392 

Sun Oct  7 18:47:02 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* xpath.c: implemented xmlXPathObjectCopy for external objects
	* include/libxml/xpathInternals.h: added xmlXPathStackIsExternal

Sat Oct  6 16:25:52 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
	finishing up fix to
	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392, making
	the xmlcatalog man page display more elegantly

Sat Oct  6 15:27:12 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: closing bug #61832
	* HTMLparser.c: removed a warning

Sat Oct  6 15:07:14 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing #61673 part I, do not lose doc information
	  when copying result value trees.

Sat Oct  6 11:58:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: trying to harden the XPath interpreter

Fri Oct  5 20:37:51 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog.1 updated using a new stylesheet to address, in
	part, https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392

Fri Oct  5 23:35:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* HTMLparser: repaired another loop problem

Fri Oct  5 11:16:21 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied fix from Mathias Hasselmann about a bug in URI
	  parsing.
	* xpath.c: fix bug #61291 the default XML namespace node is
	  missing from the namespace axis.
	* tree.c: refuse to create namespaces nodes with prefix "xml"

Thu Oct  4 16:47:44 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: ouch a non-defined namespace could lead to a crash,
	  fixed #61215

Thu Oct  4 16:24:26 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: closed bug #61054

Wed Oct  3 15:19:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: closing #60708

Tue Oct  2 15:52:05 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src include/libxml/parser.h parser.c:
	  adding xmlSAXParseFileWithData following Marco Stipek suggestion

Tue Oct  2 11:27:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: close bug #61550 when xml: wasn't considered a namespace

Tue Oct  2 11:18:32 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: Igor Zlatkovic patches
	* DOCBparser.c HTMLparser.c parser.c: fixed typos

Mon Oct  1 09:34:51 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: Justin Fletcher provided cleaup code in case
	  HAVE_STAT is not defined
	* include/win32config.h: Igor Zlatkovic suggested to have
	  HAVE_STAT defined there

Sat Sep 29 00:15:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* catalog.c - fixed typing error reported by M. Barros

Sun Sep 23 21:02:39 MDT 2001 John Fleck <jfleck@inkstain.net>

	* xmllint.c - fixing typo

Sat Sep 22 10:00:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: small enhancement to prevent loop on
	  unrecognizable data

Fri Sep 21 11:45:53 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: applying patch from bug #60757 this
	  should close it

Thu Sep 20 15:54:29 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xmlcatalog.c: removed a couple of warning
	* xpath.c: try to solve the linking problem on platforms
	  needing trio to compile

Wed Sep 19 10:01:37 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am libxml.spec.in: backing up non-documented changes
	  committed without review or approval by Jens Finke <jens@gnome.org>
	* HACKING: made 100% clear that no commit should be done directly

Mon Sep 17 18:52:37 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: Joe Orton provided a patch fixing a problem
	  when iconv is specified to be in a non-standard directory
	  but wasn't exported in xml2-config --cflags

Fri Sep 14 19:32:43 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: let's ship 2.4.5 before getting too much
	  troubles with 2.4.4 errors.

Fri Sep 14 12:26:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* encoding.c entities.c: do not output hexadecimal charrefs
	  when serializing HTML since some version of Netscape can't
	  grok it, generate decimal ones.
	* result/HTML/doc3.htm: output changed due to previous test
	* parserInternals.c: repair xmlKeepBlanksDefault() broken in 2.4.4

Thu Sep 13 13:34:27 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml-2.0.pc.in: dohh generated the wrong include path :-(
	* doc/Makefile.am libxml.spec.in: re-dohh forgot the new manpage :-(

Wed Sep 12 22:14:55 CEST 2001 Daniel Veillard <daniel@veillard.com>
	Released 2.4.4

	* config.h.in configure.in libxml.spec.in include/libxml/Makefile.am
	  libxml-2.0.pc.in: moved includes to includedir/libxml2/libxml,
	  updated the configuration scripts systems accordingly

Wed Sep 12 20:49:32 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing for 2.4.4
	* doc/xml.html doc/html/*: updated and rebuilt the docs

Wed Sep 12 16:58:16 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: tried to incorporate comments
	  from bug #59220

Tue Sep 11 11:25:36 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c result/noent/wml.xml: fixed bug #59981 related
	  to handling of '&' in attributes when entities are substituted

Mon Sep 10 22:14:42 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.h include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h include/libxml/xmlwin32version.h.in:
	  Tried to close bug #60131

Mon Sep 10 20:46:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed a bug in the HTML parser introduced Sep  9

Mon Sep 10 20:13:09 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixing bug #59946 on xmlns=""

Mon Sep 10 16:39:42 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlerror.h SAX.c: fixing bug 59732, simple
	  but allocates a new error code.

Sun Sep  9 10:33:15 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: John Fleck fixed typos in the options output
	* parser.c SAX.c: fix ignorable white space SAX selection

Sat Sep  8 11:43:53 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* entities.c: Steve Underwood found the possibility of an
	  ininite loop in case of error.

Fri Sep  7 11:35:00 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Need $(ICONV_LIBS) in libxml2_la_LIBADD

Wed Sep  5 17:47:43 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: warn if version is not 1.0 but it's not
	  strictly speaking an error after analyzing the spec

Mon Sep  3 10:07:03 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/catalog.html - add link to the html version of the
	man page, other linguistic cleanups

Mon Sep  3 09:10:08 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
	adding documentation for xmlcatalog. Note: xmlcatalog.1, the man
	file, has not yet been included in the build.

Sat Sep  1 18:17:47 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: removed a duplicate affectation Justin Fletcher

Fri Aug 31 22:02:10 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: Armin Sander pointed a possible text coalescing 
	  problem, completed his patch.

Fri Aug 31 18:30:28 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* trionan.c: Fixed const and volatile re-definition problem

Fri Aug 31 16:51:28 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.4 parser.c: doc updates from Heiko Rupp
	* parserInternals.c: 2 sanity checks from Heiko Rupp

Tue Aug 28 22:38:45 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Armin Sander to make some pointers
	  const in xmlCopyNode()
	* include/libxml/tree.h: added fix to the header

Mon Aug 27 16:24:47 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: hum, restrict the integer usage gcc bug workaround
	  to only gcc compilers so that other architecture don't get
	  penalized by this limitation.
	* include/libxml/xpath.h: small typo fix from Heiko W. Rupp

Sun Aug 26 20:45:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed a Windows compiler warning (Chris Poblete)
	* xpath.c: fix for mod when dividend is 0 (Chris Poblete)

Sat Aug 25 15:30:17 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c xmlcatalog.c: added a 
	  --convert option to xmlcatalog to convert SGML ones to
	  the XML syntax.
	* xmllint.c: small cleanup for $SGML_CATALOG_FILES support.

	2.4.3 got released at that point
Thu Aug 23 23:16:32 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xmlIO.c: started some serious testing and fixed
	  a few bug and optimization needs.

Thu Aug 23 17:26:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in include/libxml/xmlwin32version.h:
	  preparing for a 2.4.3 release even if it may not be ready yet
	* catalog.c parser.c xmlIO.c include/libxml/catalog.h: redirected
	  all file parsing lookup to go through the entity resolver, add
	  to add an API to bypass it (needed to load catalogs themselves),
	  some cleanup on the catalog code too.
	* nanoftp.c: small cleanup
	* doc/catalog.html: small update

Thu Aug 23 12:22:26 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed bugi #59406 in SGML catalog parsing reported by
	  Jun Kuriyama

Thu Aug 23 02:51:29 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* doc/catalog.html: finished the catalog documentation

Thu Aug 23 01:38:42 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* doc/catalog.html doc/xml.html: added documentation about
	  Catalog support, misses an API description 
	* doc/html/*: reextracted the API pages

Wed Aug 22 18:27:47 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c xmlIO.c HTMLparser.c:
	  Added the part about section 7.2 on URI resolution,
	  fixed a side effect in the HTML parser, look complete
	  and ready to rock except the URI/SystemID part!

Wed Aug 22 16:27:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h include/libxml/parser.h
	  include/libxml/xmlerror.h catalog.c parser.c parserInternals.c
	  xmlIO.c: added support and APIs needed for the catalog PI
	* include/libxml/xmlIO.h: cleanup

Wed Aug 22 02:03:31 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c parser.c xmlIO.c xmlcatalog.c xmllint.c 
	  include/libxml/catalog.h: starts to look okay, really
	  plugged the new framework, cleaned a lot of stuff,
	  added some APIs, except the PI's support missing this
	  should be mostly complete
	* result/catalogs/* test/catalogs/*: added new test, enriched
	  the existing one with URN ID tests

Tue Aug 21 14:56:18 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed nextCatalog
	* result/catalogs/docbook test/catalogs/*: started adding
	  a small regression test

Tue Aug 21 12:52:38 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am catalog.c xmlcatalog.c include/libxml/catalog.h:
	  more work on the XML catalog support.
	* parser.c include/libxml/parser.h: small cleanup seems using
	  list as a public parameter name can give portability troubles
	* trionan.c trionan.h xpath.c include/libxml/trionan.h
	  include/libxml/xpath.h include/libxml/Makefile.am: removed
	  trionan from the libxml API, added xmlXPathIsInf and xmlXPathIsNaN
	  wrappers

Tue Aug 21 11:18:45 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* Makefile.am trio.c triodef.h trionan.c xpath.c
	  include/libxml/Makefile.am include/libxml/trionan.h:
	  Re-worked Not-A-Number and Infinity support.
	* xmlcatalog.c: added readline include files

Mon Aug 20 02:04:13 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlcatalog.c libxml.spec.in: renaming 
	  testCatalog as xmlcatalog, making it an installed app
	  adding a shell, and preparing it to be a /etc/xml/catalog
	  management tool, though not ready yet
	* catalog.c include/libxml/catalog.h: adding support for
	  XML Catalogs http://www.oasis-open.org/committees/entity/
	  not finished, there is some interesting tradeoffs and a
	  few open questions left.

Sun Aug 19 14:59:56 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: fixed a line formatting problem

Fri Aug 17 11:35:31 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: removed a couple of unused variable (Albert Chin)

Fri Aug 17 01:25:21 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c HTMLtree.c include/libxml/HTMLparser.h:
	  trying to fix some troubles w.r.t. function returning
	  const xxxPtr.

Thu Aug 16 21:33:20 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: another set of symbols conditionally
	  defined

Thu Aug 16 21:31:14 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpointer.c: removed unused var

Thu Aug 16 18:26:40 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* testXPath.c: another small cleanup closing bug #59110

Thu Aug 16 17:59:18 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: small cleanup closing bug
	  #59108

Wed Aug 15 22:46:01 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* example/gjobread.c: add xmlCleanupParser() before leaving

Wed Aug 15 14:57:08 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in include/libxml/xmlwin32version.h:
	  released 2.4.2

Wed Aug 15 13:56:22 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/valid.h debugXML.c valid.c: deprecate
	  the non-boundchecking Sprintf functions, add Snprintf
	  this should close bug #57984

Wed Aug 15 10:46:07 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: xmlOutputBufferCreateFilename() didn't unescaped
	  URIs before doing the lookups (pointed by Mark Vakoc)

Tue Aug 14 18:37:23 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: serious changes on Result Value Trees and NodeSets
	  w.r.t. deallocation and collect operations. Probably not
	  100% clean (merge of allocated trees smells like a problem).
	  Seems sufficient to close #58943

Tue Aug 14 16:12:00 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: adding a --format option

Tue Aug 14 14:16:24 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: count() was broken on Result Value Tree
	* xmlIO.c: fixed file:/// accesses on _WIN32

Mon Aug 13 13:22:53 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: s/LIBXML_VERSION_NUMBER/LIBXML_VERSION/ seems the
	  macro was renamed, this should close bug #58683

Mon Aug 13 12:33:40 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: small fix fixing bug #58539 reported by coolo, in
	  entity substitution mode text at the end of the entity might
	  be added due to text coalescing.
	* nanoftp.c parser.c: small cleanup

Wed Aug  8 22:57:05 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HACKING: added John Fleck right to commit in the doc subdir

Tue Aug  7 03:05:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c testXPath.c valid.c xmllint.c include/libxml/valid.h:
	  allow to inherit attributes from the DTD directly in the
	  tree, this is needed for XPath and can be a useful feature.
	  Inherited namespaces are always provided at the tree level now
	* test/defattr* result/defattr* result/noent/defattr*: added a couple
	  of tests for this feature (XSLT being the prime user).

Fri Aug  3 14:02:20 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c Makefile.am nanohttp.c parser.c testHTML.c
	  testSAX.c xmlIO.c xmllint.c include/win32config.h
	  include/libxml/xmlversion.h.in include/libxml/xmlwin32version.h
	  include/libxml/xmlwin32version.h.in win32/README.MSDev
	  win32/dsp/*: applied Win32 Facelift No.2 patches from 
	  Igor Zlatkovic for Windows/MSC

Wed Aug  1 23:21:06 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: unparsedEntityDecl() the URI computation of the
	  entity wasn't done breaking XSLT unparsed-entity-uri()

Wed Aug  1 17:44:57 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a bug when walking the descendants and
	  the current node has no children
	* debugXML.c: show up when a text node is supposed to not be escaped

Wed Aug  1 01:33:35 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* xpath.c: fixed a bug in xmlXPathNodeTrailingSorted (for now it
	  worked like the set:leading() function)
	* include/libxml/xpathInternals.h: added xmlXPathNodeSetContains

Tue Jul 31 18:24:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* nanohttp.c: protected an use of EAGAIN, Brian Stafford

Tue Jul 31 17:48:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xmlIO.h: apply change to close #58141 
	* win32/libxml2/*: update of the MSC projects from Igor  Zlatkovic

Tue Jul 31 17:09:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: when the internal subset uses a PE, then the
	  included entity can use conditional sections.

Mon Jul 30 12:58:39 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c include/libxml/xpath.h: fixed a serious memory problen
	  when walking the namespace axis showing up in
	  libxst/tests/general/bug-12
	* xmlmemory.c: added the possibility to trace a given block
	  defined by its address

Sun Jul 29 07:18:53 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: don't override existing encoding specified before
	  starting xmlParseDocument()

Sat Jul 28 13:33:10 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xmlwin32version.h: reinserted, needed for
	  Windows users of CVS

2001-07-27  Darin Adler  <darin@bentspoon.com>

	* encoding.c: (xmlIconvWrapper): Add cast to fix warning.
	* testCatalog.c: Add include of <libxml/parser.h>.

2001-07-27  Darin Adler  <darin@bentspoon.com>

	* include/libxml/.cvsignore:
	* include/libxml/xmlwin32version.h:
	Remove this file from CVS because it's generated.

Fri Jul 27 10:03:56 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c include/libxml/parser.h: applied const patches from
	  Tom Moog #58002

Thu Jul 26 18:55:52 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* xpath.c include/libxml/xpath{,Internals}.h: added a function
	  lookup framework

Fri Jul 27 01:50:20 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlCopyNode() for documents

Thu Jul 26 12:40:35 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed bugs #58073 reported by Greg Shtilman

Thu Jul 26 11:38:37 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixes bug #57652 reported by Morus Walter

Thu Jul 26 10:24:34 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* nanohttp.c: John Kroll provided a small fix to xmlNanoHTTPSave

Thu Jul 26 07:16:04 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parserInternals.c: fixed the xmlLineNumbersDefault()
	  errors, lesson don't add new functions at 1am before a release
	* xpath.c: integrated fix from Bjorn to avoid divide by zero
	  from XPath initialization when possible.

Tue Jul 24 15:39:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* result/scripts/base*: removing history/readline changed
	  this slightly
	* include/libxml/parser.h SAX.c parser.c parserInternals.c
	  xmllint.c: make element content line number generation
	  optional to avoid breaking old apps added interface to switch

Tue Jul 24 15:06:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: get rid of the readline and libhistory
	  dependencies by default, release 2.4.1 with IA64 fix
	* nanohttp.c tree.c xmlIO.c include/libxml/nanohttp.h
	  include/libxml/tree.h include/libxml/xmlIO.h: incorporated
	  John Kroll fixes to allow saving to HTTP via PUT (or
	  POST of needed).
	* doc/html/*.html: regenerated the docs

Sun Jul 22 05:56:16 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* hash.c include/libxml/hash.h: added xmlHashScannerFull,
	  xmlHashScanFull and xmlHashScannFull3 to get passed the
	  three keys as arguments to the callback function

Thu Jul 19 15:29:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in Makefile.am: removed libxml softlink for good
	* include/libxml/*.h *.c doc/Makefile.am: cleanup to get
	  100% coverage by gtk-doc

Tue Jul 17 17:36:46 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlmemory.c include/libxml/xmlmemory.h: debugging on IA64,
	  fixed serious troubles due to size_t vs. int mismatch

Tue Jul 17 16:04:36 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c xmlIO.c: cleaned up some warning on the Alpha

Mon Jul 16 06:32:44 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* include/libxml/xpath{,Internals}.h xpath.c: added a more
	  convenient extension API for value and context managing
	  Now handles external objects through xmlXPathPopExternal,
	  xmlXPathWrapExternal and xmlXPathReturnExternal.
	  Added functions for sets operations (intersection, etc.)

Mon Jul 16 20:05:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/parserInternals.h include/libxml/HTMLparser.h
	  xmlIO.c tree.c parserInternals.c entities.c encoding.c
	  HTMLparser.c: cleanup of global variables, marking some
	  const or private.

Mon Jul 16 00:17:15 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* include/libxml/xpath.h: exported xmlXPath{NAN,PINF,NINF}
	  fixed xmlXPathNodeSetItem when passing index=0

Sun Jul 15 17:58:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xmlwin32version.h.in: added xmlCheckVersion()

Sat Jul 14 19:31:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.c: fixed compilation under Cygwin #57503
	* TODO: update

2001-07-13  Peter Williams  <peterw@ximian.com>

	* config.h.in: add #undef HAVE_DLFCN_H

	* example/Makefile.am (INCLUDES): Compile fix when srcdir !=
	builddir.

Fri Jul 13 11:09:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* win32/libxml2/libxml2.def.src: added a couple of exported entries
	  raised by #57348 and #57381

Thu Jul 12 21:20:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c HTMLparser.c HTMLtree.c SAX.c debugXML.c parser.c
	  tree.c xpointer.c: store the line numbder in element->content,
	  may break some software, need a configuration mechanism

2001-07-10  Darin Adler  <darin@bentspoon.com>

	* .cvsignore:
	* example/.cvsignore:
	* include/.cvsignore:
	* include/libxml/.cvsignore:
	Various things that are generated and should be ignored.

Tue Jul 10 17:47:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in include/libxml/xmlwin32version.h: release of 2.4.0
	* doc/xml.html doc/html/*:  updated the docs

Mon Jul  9 22:06:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed "Internal: MIXED struct bad" when #CDATA elements
	  validation occurred on content with element child

Mon Jul  9 17:59:08 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed XML Base computation which was broken
	* debugXML.c: added a base function to the shell
	* Makefile.am result/scripts/* test/scripts/*: added scripts
	  based regression tests, and adding 2 XML Base tests

Mon Jul  9 12:31:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: set properties doc and call xmlSetListDoc for properties
	  content when grafting them in a different tree.
	* aclocal.m4: remove from CVS

Sun Jul  8 23:09:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* win32/libxml2/libxml2.def.src: added some missing entry point
	  for XPath (Mark Vakoc)

Sun Jul  8 20:34:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: fixed an old bug raised by Bernhard Zwisch, the I/O
	  layer should URI-Unescape before trying to open resources.

Sun Jul  8 16:26:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fix the name() bug for elements in the default 
	  namespace reported by Charlie Bozeman

Sun Jul  8 15:11:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c parser.c testXPath.c xpath.c: trying to fix #56948, this
	  led to an XPath fix, improvements of SAX initialization, and
	  an added option --nocdata to testXPath

Sat Jul  7 21:09:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: Felix Natter provided anew version working
	  with XEmacs too

Sat Jul  7 02:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xpath.h: small cleanup
	* doc/xml.html: update

Fri Jul  6 01:40:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am configure.in include/libxml/xmlwin32version.h:
	  released 2.3.14

Fri Jul  6 00:47:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/html/*: rebuilt the docs for the release
	* doc/xml.html: added 2.3.14 release.

Thu Jul  5 22:01:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: a bug reported by Stephan Kulow empty nodesets
	  were not equal to empty strings

Thu Jul  5 00:52:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c: fixed a URI-Reference computation problem when validating
	* xmlIO.c: small cleanup

Thu Jul  5 00:04:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: improved the description of a couple of interfaces
	  upon Larry Stamper suggestion

Wed Jul  4 21:42:24 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c entities.c parser.c: changed completely the way entities
	  are handled when running the parser in entity substitution mode.
	  This fixes a bug reported by Stephan Kulow and nearly divides
	  by 3 the amount of memory required by libxslt to load and process
	  DocBook TDG.

Wed Jul  4 18:02:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: fixing a too early root closing problem raised
	  byt Prashanth Naidu

Wed Jul  4 01:42:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a missing copy in xmlXPathVariableLookupNS() 
	  raised by Mark Vakoc.

Tue Jul  3 18:35:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* example/Makefile.am: fixed the include path to add srcdir/include
	* Makefile.am configure.in: fix from Albert Chin for iconv detection
	  and some cleanup

Tue Jul  3 10:12:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c include/libxml/xpath.h include/libxml/xpathInternals.h:
	  lot of optimization work, results in significant improvements
	  when handling really complex XPath queries. Add a small optimizer
	  for unions, improve [n] and [last()], avoid some costly ops.

Fri Jun 29 23:26:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/parser.h parser.c: xmlStrstr args are both const
	* xpath.c: small cleanup
	* xmlGetNsList: reformated, fixed problems if used on Entities

Thu Jun 28 18:19:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: added 1.8.14 and 2.3.13 releases

Thu Jun 28 18:16:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in include/libxml/xmlwin32version.h: released 2.3.13
	* Makefile.am example/Makefile.am: workaround automake generating
	  erroneous deps

Thu Jun 28 15:08:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: bug #56801 Yon Derek provided a patch
	  to the windows config file.

Thu Jun 28 14:51:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpointer.c include/win32config.h win32/libxml2/libxml2.def.src
	  libxml.h : Yon Derek provided a set of changes to compile from
	  CVS on Windows/MSC

Thu Jun 28 14:11:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed UTF8 BOM support in push mode
	* test/utf8bom.xml result/utf8bom.xml result/noent/utf8bom.xml:
	  added a specific testcase

Wed Jun 27 18:33:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: added --push regression tests
	* parserInternals.c: the XML parser segfaulted in --push mode

Wed Jun 27 13:09:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: moved the symlinks detection within a CVS
	  check, this is not portable and will be removed soon.
	* xpath.c: small cleanup/speedup

Tue Jun 26 18:05:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in doc/xml.html include/libxml/xmlwin32version.h:
	  release of 2.3.12
	* parser.c: make an error message if unknown entities in all cases

Tue Jun 26 09:46:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.c: fixed 2 uri normalization bugs on '//' reduction

Mon Jun 25 18:06:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/Makefile.am: Laszlo Peter pointed out that
	  includes were installed in the wrong dir

Mon Jun 25 17:07:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/html.xml: warn against sending code to exhibit bugs.

Sun Jun 24 23:31:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: patch to xmlXPathFormatNumber for the optimizer on
	  Tru64 from Thomas Leitner

Sun Jun 24 14:05:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* AUTHORS: added William and Bjorn
	* include/libxml/*.h *.c README doc/*.html etc.: changed old email to
	  daniel@veillard.com hopefully I won't have to do this again
	* doc/Makefile.am doc/html/*.html: cleanup makefile, checked that
	  docs can be rebuilt cleanly now
	* include/libxml/xml*version.h*: removed include/libxml/xmlversion.h
	  from CVs it's generated, added include/libxml/xmlwin32version.h
	  also generated but which should change far less frequently.
	* catalog.c nanoftp.c: made sure to include libxml.h not
	  libxml/xmlversion.h directly
	* include/libxml/*.h: include xmlwin32version.h instead of xmlversion.h
	  when compiling on WIN32 and MSC

Sat Jun 23 23:54:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/Makefile.am include/libxml/Makefile.am configure.in:
	  fixed make distcheck and rebuilding the rpms

Sat Jun 23 20:50:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: should finish the migration of exported includes
	  into a real include/libxml in CVS, at least for CVS users.
	* removed the exported headers, added in include/libxml (as well
	  as xmlversion.h.in).

Sat Jun 23 20:37:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed the way to detect symlink

Sat Jun 23 20:30:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: updated, include/libxml is now a real CVS dir

Sat Jun 23 19:36:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: a new version of libxml-doc.el. This new
	  version works with both libxml1 and libxml2 (it autodetects
	  the prefix of the html-files) from Felix Natter.
	* doc/xml.html: updated doc accordingly

Sat Jun 23 18:30:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed the bug generating a template loop in libxslt
	  when using docbook-xsl-1.4, * should filter out document nodes
	* HACKING: added William
	* TODO: updated

Fri Jun 22 18:02:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/FAQ.html: added a warning about gcc-3.0
	* doc/xml.html: added reference to gdome2 and removed a confusing
	  sentence

Fri Jun 22 17:02:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h: okay this is a generated file, but Windows
	  users need it and they can't generate it, and I want CVS
	  Windows users ...
	* win32/libxml2/libxml2_so.dsp: Windows project file for 
	  the shared lib version of libxml2
	* win32/libxml2/libxml2.def.src: bug #56527 set of exported
	  resources needed for libxslt/xsltproc by Yon Derek

Fri Jun 22 16:39:36 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* trio.c: MSVC fix (provided by Igor Zlatkovic)

Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: another small fix for ATTRIBUTE_UNUSED

Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: Yon Derek provided a first fix
	  to be able to compile libxslt/xsltproc on Windows

Fri Jun 22 00:04:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: attempt to work around what seemed a gcc optimizer
	  bug when handling floats on i386 http://veillard.com/gcc.bug
	* tree.c entities.c encoding.c: doing some cleanups while
	  chasing it

Thu Jun 21 13:13:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: cleanup when --without-debug is specified
	* xinclude.c xpath.c xpathInternals.h xpointer.c: cleanup
	  w.r.t. --without-debug and other include points
	* catalog.h testCatalog.c: a bit of cleanup and prepare for XML
	  Catalogs
	* configure.in entities.h tree.h HTMLparser.c: removed
	  --without-corba, made the _private field mandatory

Wed Jun 20 19:37:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parserInternals.c encoding.c: Since Notepad on Win2k
	  outputs a BOM in UTF8, an errata has been issued to avoid the
	  problem, that was the most reasonable solution... Add support
	  for a leading UTF8 BOM in entities.

Wed Jun 20 15:38:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed a bug found when post validating an entity ref
	* xmllint.c: added --loaddtd and sligly changed --postvalid to
	  activate it too

Tue Jun 19 20:03:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c xinclude.c xpointer.c: bug #56402 exposed a number of
	  weakness in the node copy the XPointer and the XInclude
	  implementations. Serious cleanup.

Tue Jun 19 14:50:18 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: Kjartan Maraas provided a small patch to
	  add xml2-config.in to EXTRA_DIST

Tue Jun 19 13:04:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c tree.c parserInternals.c parser.c: Stephan Kulow
	  provided another failing case found in KDE, the way the
	  ctxt->vctxt.nodeTab was allocated and freed changed over
	  time but it wasn't completely cleaned up. This should fix it.

Sun Jun 17 19:56:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: Stephan Kulow also raised the fact that line number
	  could get miscounted making debug harder, fixed the problem
	  in xmlParseCharData()

Sun Jun 17 19:17:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: Stephan Kulow pointed out a problem when validating
	  and using an empty entity, forgot a 'break' in a case.

Sun Jun 17 16:47:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlHasNsProp() accordingly to bug #55683
	* doc/xml.html: updated with 2.3.11

Sun Jun 17 12:24:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* TODO: updated adding cleanup of generated doc
	* configure.in: prepared to release 2.3.11
	* xmllint.c: added --version for bug reporting
	* doc/html/*.html: rebuilt the doc

Sat Jun 16 23:23:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: first part of the work on selecting namespace to
	  fix bug #56115 

Sat Jun 16 00:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am example/Makefile.am: Laszlo PETER provided a fix
	  when using -liconv
	* TODO: updated

Fri Jun 15 07:08:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.[ch]: more work on the HTML serialization routnes,
	  cleanup, encoding support.

Thu Jun 14 10:31:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Thomas Broyer suggested a better patch for the / arg

Thu Jun 14 01:01:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: bug detected by Ankh when / is used as a function arg

Wed Jun 13 23:08:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.[ch] HTMLtree.c: stored the inline/block property
	  of element and use it to avoid outputting formatting spaces at
	  the wrong place. Implemented the format parameter for HTML save.
	* result/HTML/doc2.htm result/HTML/doc3.htm result/HTML/fp40.htm
	  result/HTML/script.html result/HTML/test2.html result/HTML/test3.html
	  result/HTML/wired.html: of course this impact the result of a
	  number of HTML tests

Thu Jun 14 09:49:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.[ch]: started augmenting the HTML save API with
	  encoding and formatting parameters

Wed Jun 13 09:44:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.h: cleanup and started evaluating the work needed on
	  revamping the HTML output code

Mon Jun 11 19:29:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: handling of PIs and <?sgml-declaration in entities.

Tue Jun 12 08:46:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed bug #56049, forgot one check in the
	  validation routine

Tue Jun 12 08:09:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch]: grrr ... namespace is a C++ reserved keyword

Tue Jun 12 06:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.h: fixed an error in last commit
	* doc/FAQ.html: added an entry for compilation from CVS

Mon Jun 11 10:07:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h.in libxml.h: Cygwin patches
	* tree.c: xmlFreeNodeList patch similar to xmlFreeNode one
	* tree.h: cleanup

Sat Jun  9 19:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: patched xmlFreeNode() to avoid freeing() a static
	  memory block in a strange case where libxml is linked twice
	  in the binary.

Sat Jun  9 18:39:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: (a? , b? , c? , ... , z?) was storing/restauring
	  state far too often, simple fix used to avoid it.

Sat Jun  9 16:10:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: Raphael Hertzog had a trouble with DTD nodes
	  being processed, applied his patch
	* tree.c: fixed a bug raised in xmlStaticCopyNodeList()

Sat Jun  9 15:50:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* nanoftp.c nanohttp.c uri.c include/win32config.h: Igor  Zlatkovic
	  provided fixes to compile on MSCC again
	* win32/libxml2/libxml2.def.src win32/libxml2/libxml2*.dsp: he
	  also provided an update for the project files.

Thu Jun  7 21:52:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: applied Steve Tinney patch to xmlNewNsProp to fix
	  bug #55810

Thu Jun  7 21:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlGetNsProp() to close bug #55683
	  Note this requires libxslt to use it's own function instead.

Thu Jun  7 18:06:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: when in a pre element no formatting space should
	  be added.
	* test/HTML/pre.html result/HTML/pre.html*: added a regression test

Thu Jun  7 17:29:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: added tests for signal() and signal.h

Fri Jun  8 10:17:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: robert pointed out xmlXPathNINF was not initialized

Fri Jun  8 10:01:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: Felix Natter provided a new version for
	  libxml2

Fri Jun  8 07:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: when in a pre element no formatting space should
	  be added.

Wed Jun  6 18:07:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: add -mieee to CFLAGS when compiling on Linux/alpha

Thu Jun  7 06:44:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: implemented the <?sgml-declaration encoding="xxx"?>
	  hack
	* tree.[ch]: added xmlHasNsProp as suggested in bug report #55653 
	* uri.c: fixed a warning

Tue Jun  5 22:54:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: trying to close bug #55772 escaping in script
	  elements
	* doc/xml.html: suggest to send mail to the list

Tue Jun  5 19:11:02 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: attempt to fix the xmlGetVarStr breakage once and for
	  good. Use a macro and based on the solution provided in 
	  vsnprintf manual page from GNU.

Tue Jun  5 14:46:10 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* error.c: Workaround for non-preserving variadic list.
	* trio.c trio.h triop.h strio.c strio.h: Upgraded to trio baseline 1.4

Sat Jun  2 06:12:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: added 2.3.10 release

Fri Jun  1 11:27:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: releasing 2.3.10

Thu May 31 20:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: Gary Pennington spotted a few troubles with file:///

Thu May 31 20:18:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* encoding.c: Robert Collins provided a patch to add the
	  "US-ASCII" encoding alias

Wed May 30 21:12:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c encoding.[ch]: William M. Brack provided a set of UTF8
	  string oriented functions and started cleaning the related areas
	  in xpath.c which needed fixing in this respect

Wed May 30 20:30:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: applied patch from Jaroslaw Kolakowski to close bug
	  #55380
	* tree.c: patch to xmlNodeGetContent() to get CDATA section content

Mon May 28 12:56:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* TODO: updated
	* nanohttp.[ch] : started adding APIs to get the redirected URL
	  when this occurs (needed for further base computation
	* tree.h: cleanup
	* encoding.c: cleanup
	* SAX.c: minor change around ctxt->loadsubset

Fri May 25 09:36:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am include/Makefile.am: small change to have
	  include/libxml rebuilt if working from CVS.
	* uri.c: applied another patch from Carl Douglas for URI escaping,
	  this should close bug #51876

Wed May 23 15:40:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: fixed XInclude recursive behaviour bug #54678
	* result/XInclude/recursive.xml test/XInclude/docs/recursive.xml
	  test/XInclude/ents/inc.txt test/XInclude/ents/sub-inc.ent:
	  added specific regression test
	* parser.h: preparing for the XSLT mode where DTD inherited
	  attributes are added to the tree.

Wed May 23 13:59:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.[ch]: Updated the namespace for the Last Call version
	* result/XInclude/include test/XInclude/include: updated the
	  testsuite accordingly

Wed May 23 12:27:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.[ch]: applied a patch from Carl Douglas for URI escaping,
	  related to bug #51876

Tue May 22 18:46:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed a gross mistake in base computation, xml:base is
	  not completely correct yet (need cascade).
	* xpath.[ch]: added the few things needed to find a function name
	  and URI from the XPath context when it is called.

Tue May 22 17:00:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* catalog.[ch]: fixes and add xmlLoadCatalogs()
	* DOCBparser.c: small cleanup
	* xmllint.c: added a --catalogs option to load catalogs from
	  $SGML_CATALOG_FILES
	* tree.c: cleanup
	* configure.in: iconv library fixup, ICONV_LIBS 

Mon May 21 16:05:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* catalog.c: handling of CATALOG entries. detection of recursion,
	  and a few bugfixes
	* xpath.c: fixing bug #54951 QNAME with no prefix should not match
	  against the default namespace

Mon May 21 10:14:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Joe Orton reported a bug found with IRIx compiler.

Sun May 20 15:15:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed propagation context info when parsing an
	  external entity.
	* doc/html/*.html: regenerated a couple of docs

Sat May 19 17:11:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: update with 2.3.9 information

Sat May 19 16:50:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.h debugXML.h parserInternals.h tree.h valid.c
	  xmlversion.h.in xpathInternals.h xpath.h: some cleanup for gtk-doc
	* doc/html/* : rebuilt the docs
	* valid.c: small patch which may improve some case when
	  validating.

Sat May 19 15:20:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: Closed bug #54891
	* result/HTML/cf_128.html* test/HTML/cf_128.html: added the test
	  to the suite

Thu May 17 14:15:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* encoding.h hash.c nanoftp.h parser.h tree.h uri.h xlink.h xpointer.c:
	  applied a documentation patch from LotR and filled in a few missing
	  descriptions

Wed May 16 23:02:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c tree.c parser.c: speed optimizations at the parser level
	  document tree freeing and xpath evaluation

Wed May 16 12:55:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parser.h parserInternals.h: fixed a couple of
	  interfaces for handling memory buffer input to const char *
	  upon suggestion of JamesH.

Tue May 15 17:22:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: LoTR sent a patch fixing the previous commit 

Tue May 15 14:40:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: trying to deal again with the stoopid -R linking
	  flag of Solaris

Tue May 15 12:49:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.h: two nodeset access macros from Thomas Broyer

Tue May 15 11:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c xpath.h xpathInternals.h: apply an XPath API cleanup
	  patch from Thomas Broyer

Tue May 15 10:52:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c test/VCM/v2[34].xml: Fixed bug #54631 added specific test
	  case
	* INSTALL: was empty added stuff from the FAQ

Fri May 11 19:37:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch]: fixing bug #54446, by cleaning some bugs in the
	  attributes handling and #54433 by adding xmlUnsetProp()
	  and xmlUnsetNsProp()

Fri May 11 16:07:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: Patch from Jonas Borgström
	(htmlGetEndPriority): New function, returns 
	the priority of a certain element.
	(htmlAutoCloseOnClose): Only close inline elements if they 
	all have lower or equal priority.
	* result/HTML: this of course changed a number of tests results.

Thu May 10 17:30:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c catalog.c: plugged in the default catalog resolution
	* doc/gnome-xml.sgml: linked in the Docbook parser and catalog
	  documentations
	* doc/html/libxml-*.html: rebuild added the missing ones to CVS

Thu May 10 16:14:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am xmlversion.h.in configure.in include/Makefile.am:
	  integrating catalogs
	* catalog.[ch] testCatalog.c: adding a small catalo API
	  (only SGML catalog support).
	* parser.c: restaured xmlKeepBlanksDefault(0) API

Wed May  9 12:50:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: zb@bisp.com reported an error in xmlNodeGetLang()

Tue May  8 12:31:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: added xmlParseExternalEntityPrivate() to allow
	  propagation of ctxt->_private when parsing external entities

Tue May  8 10:26:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: fixed the bug reported by Bjorn in htmlNodeDump

Tue May  8 09:30:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed a small portability problem with AM_CONDITIONAL

Mon May  7 22:44:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: warn when indeterminist content model is detected
	* result/VC/ElementValid8: this adds a message
	* Makefile.am: add --novalid for VCM tests
	* parserInternals.c: added a call to Init memory 

Fri May  4 19:51:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: fixed htmlNewDoc SYSTEM and PUBLIC ID inversion
	  when both parameters are NULL.

Fri May  4 17:19:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: applied small patch from Gary Pennington, reindented
	  some part of the code.

Thu May  3 13:10:43 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in doc/xml.html doc/html/*: preparing for 2.3.8
	  release, updated and regenerated the docs

Thu May  3 12:47:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c result/XPath/expr/floats : clarified and cleanup
	  printing of abnormal floats in tests.

Thu May  3 10:25:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: trying to fix the problem reported by Jonas Borgström
	* results/HTML/ : a few changes in the output of the HTML tests as
	  a result.
	* configure.in: tying to fix -liconv where needed

Wed May  2 19:10:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: fixed a stupid error

Wed May  2 18:39:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in Makefile.am: make the inclusion of the trio
	  modules in the library conditional

Wed May  2 14:39:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: patche from  László Kovács, fixed entities refs
	  in attributes handling

Wed May  2 12:56:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: Bjorn Reese provided a fix for a problem on buffer
	 flushing

Mon Apr 30 22:29:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fix of an XSLT namespace bug reported on the list
	  general/bug-8-

Mon Apr 30 19:42:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* strio.h trio.c: Dan McNichol suggested a couple of small
	  fixes for AIX 4.3.3 using Visual Age 5.0.2 compiler

Mon Apr 30 13:44:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c parser.c encoding.c: spent a bit more time looking
	  at the parsing speed and DOM handling. Added a few more
	  speedups.

Sun Apr 29 21:53:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: small but effective parsing speed improvement

Sun Apr 29 19:02:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: default on the DocBook parser inclusion (for Gnome)
	* DOCBparser.h: fixed a header reference

Sat Apr 28 19:00:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in xpath.c: applied Bjorn patches for FPE on the
	  alpha

Sat Apr 28 18:54:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch] xmlIO.h: applied patch from Joe McAlerney to add
	  xmlSaveFormatFileTo()

Sat Apr 28 16:33:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: simple and efficient optimization, XPath functions
	  always bind to the same code, cache this
	* TODO: updated (by saying some is obsolete)

Sat Apr 28 14:23:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: more cleanup work on XPath name parsing routines

Fri Apr 27 19:06:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parserInternals.c xpath.[ch]: some UTF8 cleanup on
	  xmlXPathParseName
	* xpath.c: Igor Zlatkovic suggested a change for NAN and MSC
	* debugXML.c: avoid compilation problems if compiling without
	  HTML support, Igor Zlatkovic
	* win32/libxml2/libxml2.def.src: being able to compile without
	  XPath on Windows

Thu Apr 26 22:53:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.m4: yet another patch from Toshio Kuratomi

Thu Apr 26 21:27:43 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.m4 libxml2-spec.in: new patches from Toshio Kuratomi

Thu Apr 26 20:53:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch]: added xmlSaveFormatFile interface for saving
	  and indenting a file.

Thu Apr 26 16:35:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed bug #53689 related to processing-instruction()

Thu Apr 26 12:57:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: patche from  László Kovács

Thu Apr 26 11:31:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: applied fixes from Christian Glahn bug report #53391

Thu Apr 26 11:14:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: Jean François Lecomte provided a complete description
	  and a fix to bug #53537

Thu Apr 26 09:42:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.m4: added AM_PATH_XML2 provided by Toshio Kuratomi

Wed Apr 25 21:05:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c SAX.c: a bit more work on entities processing.
	  Still Need to cleanup XML output and references in attributes

Wed Apr 25 17:52:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c include/Makefile.am: two patches from László Kovács

Wed Apr 25 14:56:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: trying to fix #53574, not completely complete,
	  I would like xmllint --copy --debug test/ent1 and
	  xmllint --debug test/ent1 to show the same result.
	* xpath.c: fix a bug when trying to sort namespace nodes

Wed Apr 25 12:28:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: real fix for  #53402

Tue Apr 24 17:36:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c HTMLtree.h : closing #53402 i.e. output of
	  PIs when using xsl:output
	* valid.c: closing #53537 some case generate segfaults if there
	  is validity errors

Tue Apr 24 15:19:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c testDocbook.c DOCBparser.c: more work on the support
	  of external parsed entities, added --noent to testDocbook
	* valid.c: Garry Pennington found an uninitialized variable
	  access in xmlValidateElementContent()

Tue Apr 24 14:41:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c : HTML parsing still sucks ... trying to deal
	  with madness
	* result/HTML/ : this modified the result of the regression tests
	  a lot.

Tue Apr 24 14:10:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* entities.c: xmlEncodeEntitiesReentrant fixed a few accesses
	  to doc where it wasn't checked against NULL reported by
	  Jens Laas

Tue Apr 24 13:21:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: Jonas Borgström patch, the <td>, and <th> elements
	  now means the end of any open <span>,<font>,<a>,<b>,<i>,<u>.

Mon Apr 23 15:40:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c DOCBparser.h testDocbook.c configure.in Makefile.am
	  xmlversion.h.in: started (re)integrating the DocBook SGML parser.
	* SAX.[ch]: cleanup and updates for DocBook
	* debugXML.c parser.h tree.[ch] valid.c xpath.c: small macro or
	  ex SGML identifier changes
	* valid.c: removed a static unused function.

Mon Apr 23 11:05:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: applied change for Paul Sponagl on script saving
	* Makefile.am: the warning about entity title.xml are normal.

Sun Apr 22 22:09:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: release of 2.3.7
	* Makefile.am: fixing make distcheck

Sun Apr 22 21:29:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/html/* doc/xml.html: updated and regenerated the docs

Sun Apr 22 21:11:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed the XPointer problem introduced in 2.3.6

Sun Apr 22 14:11:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed #53388 with the provided patch

Sun Apr 22 12:34:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: Bjorn detected an invalid memory access. Fixed
	  vstateVPush()

Sun Apr 22 10:49:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed xmlXPathCompile to detected unproperly ended expr

Sat Apr 21 18:27:51 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* libxml.h: new header used only for the compilation of libxml
	* HTMLparser.c HTMLtree.c SAX.c debugXML.c encoding.c entities.c
	  error.c hash.c list.c nanoftp.c nanohttp.c parser.c
	  parserInternals.c testHTML.c testSAX.c testURI.c testXPath.c
	  tree.c uri.c valid.c xinclude.c xlink.c xmlIO.c xmllint.c
	  xmlmemory.c xpath.c xpointer.c: libxml.h integration
	* trio.[ch] triop.h strio.[ch]: upgraded to the latest trio
	  baseline (version 1.2 plus a single patch).
	* xpath.c result/XPath/expr/floats test/XPath/expr/floats: parses
	  scientific notation for numbers. Tests added.
	* xpath.c: formatting of numbers changed to use sprintf
	  (contribution from William Brack)

Sat Apr 21 16:12:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: cleanup, more useful debugging
	* parserInternals.c: cleanup vctxt.nodeTab (de)allocation
	* xmlIO.c: entity loading is printed as an error when validating

Sat Apr 21 12:25:49 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed to validate within entities
	* test/VCM/v22.xml: added a specific testcase

Fri Apr 20 17:45:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: forgot an epsilon transition in for ()+
	* test/VCM/v21.xml : added a specific test case

Fri Apr 20 15:46:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: removed a state explosion exhibited by RSS
	* test/valid/rss.xml result/valid/rss.xml*: added the testcase
	  from bug #51872

Fri Apr 20 14:52:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.[ch] tree.h: worked *hard* to get non-determinist content
	  validation without using an ugly NFA -> DFA algo in the source.
	  Made a specific algorithm easier to maintain, using a single
	  stack and without recursion.
	* Makefile.am test/VCM/*.xml: added more tests to "make Validtests"
	* hash.c: made the growing routine static
	* tree.h parser.c: added the parent information to an
	  xmlElementContent node.

Wed Apr 18 23:33:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c parser.c xpath.c: generating IDs when not validating
	  from an external parsed entity was poisoning the ID has table
	  with removed values. This was killing XSLT on the KDE help
	  browser.

Wed Apr 18 17:09:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* entities.h: andrew@ugh.net.au detected a double declaration

Wed Apr 18 15:06:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* debugXML.c hash.c tree.h valid.c : some changes related to
	  the validation support to improve speed with DocBook
	* result/VC/OneID2 result/VC/OneID3 : this slightly changes
	  the way validation errors get reported

Wed Apr 18 11:42:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c HTMLtree.c: applied part of the patches provided
	  by P C Chow and William M. Brack for XSLT HTML output

Mon Apr 16 19:44:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h.in win32config.h win32/libxml2/*: applied 
	  Igor Zlatkovic patches for MSC compilation and added his
	  updates

Tue Apr 17 10:08:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed xmlXPathNodeCollectAndTest() to do proper
	  prefix lookup.
	* parserInternals.c: fixed the bug reported by Morus Walter
	  due to an off by one typo in xmlStringCurrentChar()

Thu Apr 12 17:41:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c result/HTML/*: revamped the way the HTML
	  parser handles end of tags or end of input

Thu Apr 12 10:50:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch] : added xmlDocCopyNode for gdome2 support

Wed Apr 11 16:37:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.h: include xmlmemory.h this seems to havoid a nasty glibc
	  bug where the linktime versions of free() won't work ...

Wed Apr 11 14:21:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* config.h.in configure.in xmlversion.h.in: added ansidecl.h test

Wed Apr 11 13:50:42 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: added 2.3.6 release

Wed Apr 11 13:26:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlStringGetNodeList() to handle charrefs
	* result/wml.xml: resulted in a small output change

Wed Apr 11 09:47:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: xmlNewDoc was missing the charset initialization
	* xmllint.c: added --auto to autogenerate a doc, allow to
	  reproduce the problem fixed on xmlNewDoc

Tue Apr 10 18:13:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: trying to get 52979 solved
	* tree.c result/ result/noent/: trying to get 52712 solved, this
	  also made me clean up the fact that XML output in general should
	  not add formatting blanks by default, this changed the output of
	  a few tests

Tue Apr 10 16:30:20 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Bill Brack pointer an error in detecting a null nodeset

Sun Apr  8 15:07:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: finally released 2.3.6

Sun Apr  8 11:39:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: checking for null pointer generated by new code

Fri Apr  6 12:53:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a [] evaluation problem reported
	* test/XPath/tests/simpleaddr: extended test
	* result/XPath/simpleaddr: updated result

Wed Apr  4 02:07:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.c: Dan Timis reported a portability problem
	  on Macs without mmap, fixed it.

Tue Apr  3 20:20:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* testXPath.c : added a --tree option allowing to display the
	  tree dump of the XPath expression

Mon Apr  2 17:13:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a memleak when comparing nodesets
	* HTMLtree.c: don't invent the HTML doctype if not available (XSLT)
	* tree.c: added a TODO

Tue Mar 27 14:32:06 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in Makefile.am config.h.in xmlversion.h.in: detect if
	  we need string functions
	* trio.[ch] strio.[ch]: embedded the Trio-0.23 string functions
	  to be able to use them where needed. Applied some changes
	  to reduce name linking pollution and compile in only what's
	  needed.
	* HTMLtree.c debugXML.c entities.c error.c nanoftp.c valid.c
	  xlink.c xmlversion.h.in xpath.c: got rid of the #ifdef 
	  for the string manipulation functions
	* xmlmemory.[ch]: removed DEBUG_MEMORY_FREED and added it automatically
	  to the free() function of xmlmemory.c
	* entities.c HTMLtree.c parserInternals.c tree.c uri.c valid.c
	  xinclude.c xmlIO.c xpath.c xpointer.c: removed the MEM_CLEANUP
	  usage.

Tue Mar 27 02:30:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: applied the context output patch of the error
	  handling submitted by Chuck Griffith
	* error/VC/*: this slightly change some error logs

Tue Mar 27 00:51:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed line number reporting on error

Mon Mar 26 23:21:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: Sullivan and Darin found a parser bug,
	  applied the patch.

Mon Mar 26 18:24:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c HTMLtree.c SAX.c debugXML.c error.c parserInternals.c
	  testHTML.c testSAX.c tree.c valid.c xmlIO.c xmlmemory.c
	  xmlversion.h.in xpointer.c: of course the way I defined
	  UNUSED breaks on old gcc version. Try to be smart and
	  also define it directly in xmlversion.h
	* configure.in: removed -ansi flag from the pedantic set

Sat Mar 24 17:45:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
	Huge cleanup, I switched to compile with
	-Wall -g -O -ansi -pedantic -W -Wunused -Wimplicit
	-Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat
	-Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow
	-Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return
	-Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline
	* HTMLparser.[ch] HTMLtree.c SAX.c debugXML.c encoding.[ch]
	  encoding.h entities.c error.c list.[ch] nanoftp.c
	  nanohttp.c parser.[ch] parserInternals.[ch] testHTML.c
	  testSAX.c testURI.c testXPath.c tree.[ch] uri.c
	  valid.[ch] xinclude.c xmlIO.[ch] xmllint.c xmlmemory.c
	  xpath.c xpathInternals.h xpointer.[ch] example/gjobread.c:
	  Cleanup, staticfied a number of non-exported functions,
	  detected and cleaned up a dozen of problem found this way,
	  avoided a lot of public function name/typedef/system names clashes
	* doc/xml.html: updated
	* configure.in: switched private flags to the really pedantic ones.

Thu Mar 22 22:44:15 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: 2.3.5
	* doc/html/*: rebuilt the docs

Thu Mar 22 15:36:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed a reported bug in NOTATION parsing
	* uri.c: accepted but not fixed bug 51876, added TODO 
	* Makefile.am: fixed bug 51876

Thu Mar 22 13:41:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* config.h.in configure.in error.c: fix a compilation problem
	  on platforms without vsnprintf (xml@thewrittenword.com)

Wed Mar 21 19:04:34 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed a function name header typo
	* SAX.c: notations can also occur in external subset.

Tue Mar 20 14:21:28 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: removed a C++ like comment

Tue Mar 20 12:22:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixing bug 52299 strange condition leading
	  to a parser crash due to a buffer overflow
	* result/noent/attrib.xml result/attrib.xml test/attrib.xml:
	  added the specific test case

Mon Mar 19 16:50:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch]: still a lot of cleanup based on XSLT, added
	  xmlXPathConvert{String,Number,Boolean} to be able to make
	  type casts without a context stack, fixed some implementation
	  problems related to the absence of context at parse-time,
	  added xmlXPathEvalPredicate() and xmlXPathFreeCompExpr()
	  in the public API too
	* xpointer.c xpathInternals.h: we need to know at parse time
	  whether we are compiling an XPointer

Mon Mar 19 11:54:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch] xpointer.c: restaured the Binary and API compatibility
	  cleaned up the parser internals, refactored XPath code, added
	  new compilation based APIs and cleanly separated public and
	  private APIs.

Mon Mar 19 00:59:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.h: the comp field must be added at the end to avoid
	  killing binary compat.

Mon Mar 19 00:11:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: detect XPath memleaks in regreson tests
	* error.c: fixed and error w.r.t. error reporting still using
	  stderr
	* hash.c: added new line at end of file
	* tree.h: minor cleanup
	* xpath.[ch] xpointer.[ch]: Major changes ! Separated XPath
	  expression parsing from evaluation, resulted in a number of
	  changes internally, and in XPointer. Likely to break stuff
	  using xpathInternals.h but should remain binary compatible,
	  new interfaces will be added.

Wed Mar 14 20:34:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed a couple of problems reported by 
	  okiddle@yahoo.co.uk and allanc@chickenandporn.com when compiling
	  without gcc on non linux platforms.

Wed Mar 14 20:13:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/Makefile.am configure.in: yearke@eng.buffalo.edu suggested
	  a fix for --with-html-dir= configure support. I hope it won't
	  break rpm generation

Wed Mar 14 17:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: one function comment cleanup.

Wed Mar 14 14:55:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c: external subset notations were improperly registered
	  in the internal subset.

Tue Mar 13 10:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* README.cvs-commits: added, pointing to HACKING
	* HACKING: updated

Mon Mar 12 22:09:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: and Matt Sergeant found one in the XML push
	  parser (erroneous check I forgot to remove when I fixed the
	  main parser).

Mon Mar 12 19:19:04 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: ptittom found a small bug in UnaryExpr

Sat Mar 10 13:09:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.4
	* error.c: fixed bug #51860
	* tree.c: fixed bug #51861
	* valid.c: cleanup, more debug, failed to fix one bug crap ...
	* tree.[ch] : added xmlDefaultBufferSize
	* nanoftp.c: typo in function name header block
	* doc/xml.html : updated, added link to XML::LibXSLT
	* doc/html/* : rebuilt the docs

Wed Mar  7 20:43:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c SAX.c: the new content parsing code raised an
	  ugly bug in the characters() SAX callback. Found it
	  just because of strangeness in XSLT XML Rec output :-(

Wed Mar  7 16:50:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: Martin Baulig suggested to add -lm
	* tree.c: found another bug in xmlNodeGetContent()

Tue Mar  6 09:21:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Bjorn found the error related to strictness of comparison.

Mon Mar  5 21:47:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: trying to fix the Dtd parsing problem reported
	  by Gary, side effect of last week speed optimizations.

Sat Mar  3 19:45:59 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xml2Conf.sh.in: fixes pointed out by Fredrik Hallenberg
	* parserInternals.c: removed unneeded test raised by Stric

Sat Mar  3 13:04:37 CET 2001 Bjorn Reese <breese@users.sourceforge.net>

	* xpath.c: Fixed xmlXPathNodeCollectAndTest (problem reported
	  and fixed by William Brack). Added xmlXPathFormatNumber.
	  Changed the sorting slightly.
	* configure.in Makefile.am example/Makefile.am: Added -lm.
	  Please note that applications linking with libxml2, must
	  also like with the math library from now on.

Sat Mar  3 07:38:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: fixed loop reported by Marc Sanfacon

Sat Mar  3 02:10:24 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: one must report spaces even if the Dtd element
	  content proves that this is not part of the element content.
	* result/valid/*.xml: this changed the ouptu slightly

Thu Mar  1 17:53:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.3
	* doc/xml.html: updated

Wed Feb 28 00:43:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: minor doc fix
	* xpath.c: deallocation issues when a result tree has been
	  converted to a node-set

Mon Feb 26 22:09:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: oops corrected dates s/2000/2001

Mon Feb 26 12:48:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: new patch from Gary Pennington

Mon Feb 26 09:30:23 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: applied patch from Ankh

Mon Feb 26 03:34:43 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: fixed a problem building on Mac

Sun Feb 25 21:52:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: more work on increasing parsing ferformances

Sun Feb 25 18:03:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlmemory.h HTMLparser.c HTMLtree.c entities.c parser.c
	  xpath.c xpointer.c tree.c uri.c valid.c xinclude.c xmlIO.c:
	  avoiding memcpy in production builds MEM_CLEANUP macro use
	* parser.[ch] parserInternals.c: optimizations of the tightest
	  internal loops inside the parser. Better checking of I/O
	  flushing/loading conditions
	* xmllint.c : added --timing

Sun Feb 25 05:48:51 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.2
	* doc/xml.html: updated for release

Sat Feb 24 14:07:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: found a memleak and fixed a nasty bug

Sat Feb 24 03:35:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.[c1] : added return code errors for xmllint
	* xpath.c: specific debug dump function for result value trees

Thu Feb 22 07:52:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: finally implemented xmlXPathCompareNodeSets
	* test/XPath/expr/floats results/XPath/expr/floats: added 
	  a test for float expressions

Tue Feb 20 18:57:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlNodeGetContent, it was not recursing on child
	* parserInternals.[ch]: trying to speed up parsing
	* xpath.c : speeded up node set equality op

Mon Feb 19 19:01:57 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am valid.c list.[ch]: Gary Pennington provided a
	  better handling of ID/IDREF and the list modules associated
	* configure.in: small CFLAGS cleanup

Mon Feb 19 16:13:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed iconv detection on AIX (stric)

Mon Feb 19 10:59:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed "*" (unbelievable !) and a couple of warnings

Sun Feb 18 17:52:37 MET 2001 Bjorn Reese <breese@users.sourceforge.net>

	* xpath.c: fixed whitespace handling in xmlXPathStringEvalNumber,
	  and optimized xmlXPathNodeSetSort

Sat Feb 17 14:18:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: bug fix when context size is 0
	* parser.c: I like Norm's Dtd because they still manage to break
	  the parser occasionally

Fri Feb 16 14:20:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: xmlXPathEqualNodeSetFloat the arg is really a double now

Fri Feb 16 01:10:06 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch] parser.c xpath.c: fixed the problem of addressing
	  attributes within the XML-1.0 namespace

Thu Feb 15 16:53:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpathInternals.h: exported a few axis functions
	* doc/xml.html: updated the doc

Thu Feb 15 15:57:14 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: applied patch from Daniel van Balen for OpenBSD
	  and bumped version to 2.3.1
	* HTMLtree.c result/HTML/doc3.htm result/HTML/wired.html: the
	  attempt to find autoclosing was simply broken, removed it,
	  updated the examples, this is better

Wed Feb 14 11:35:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* hash.[ch]: added Paolo Casarini patch to provide Delete from
	  hash functionalities.
	* doc/html/* : rebuild the doc

Tue Feb 13 18:01:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c result/XPath/tests/chaptersprefol: bugfixes on order and
	  on predicate
	* HTMLparser.[ch] HTMLtree.c result/HTML/doc3.htm.err
	  result/HTML/doc3.htm.sax result/HTML/wired.html: sometimes one
	  really want to have tags closed on output even if we accept
	  unclosed ones on input

Mon Feb 12 18:33:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: ouch don't free NULL, rare case fixed
	* tree.c: don't coalesce text nodes if they don't have the
	  same behaviour wrt escaping on output

Sun Feb 11 21:15:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: small fixup
	* SAX.c: don't warn on empty namespaces.

Thu Feb  8 11:28:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* README: a bit of cleanup
	* configure.in: preparing for 2.3.0 release

Thu Feb  8 10:37:00 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* hash.[ch]: added a first version of xmlHashSize()
	* valid.c: another bug fix from Gary Pennington

Wed Feb  7 19:22:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: couple of bug fixes pointed by Gary Pennington
	* HTMLtree.c: #if 0 cleanup

Tue Feb  6 14:02:56 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: started profiling XSLT, added xmlXPathNodeSetAddUnique()
	  which removes a time consuming check of xmlXPathNodeSetAdd()
	  and use it in places where we are sure to not break unicity

Mon Feb  5 18:51:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: bug fixes found from XSLT
	* tree.c: preserve node->name special values when copying nodes.
	* parserInternals.[ch] parser.[ch] SAX.c : added a mode where
	  external subset are fetched when available but without full
	  validation. Added xmlLoadExtDtdDefaultValue, need a function.
	* HTMLtree.c: add support for xmlStringTextNoenc for XSLt HTML
	  output with encoding disabled.

Sat Feb  3 09:50:29 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmliO.c: Harry Blundell pointed out that xmlCheckFilename
	  xmlCheckFilename should not be called from xmlFileOpenW
	  and xmlGzfileOpenW

Fri Feb  2 18:04:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.c: rewrite of xmlNormalizeURIPath from Paul D. Smith
	* test/URI/smith.uri result/URI/smith.uri Makefile.am:
	  added the new tests for URI normalization
	* testURI.c: fixed stoopid bugs
	* result/VC/OneID3 result/VC/UniqueElementTypeDeclaration:
	  the URI in the error messages are now properly normalized

Fri Feb  2 09:18:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.c: applied Marc Sanfacon's patch for xmlNormalizeURIPath

Thu Feb  1 05:28:55 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a number of problems in XPATH_XSLT_TREE processing

Wed Jan 31 21:45:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed mod operator

Wed Jan 31 16:50:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed xmlStrcat doc
	* tree.c: 2 fixes form Anders Carlson for copying nodes and
	  trees.

Wed Jan 31 14:19:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c result/XPath/tests/chaptersbase
	  result/XPath/tests/simplebase: fixed XPath node() 
	* tree.c: small fix in xmlNewNs()
	* Makefile.am: removed extraneous xml2Conf.sh rule

Sun Jan 28 08:37:03 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am configure.in libxml.spec.in example/Makefile.am:
	  Changed the library name, in order to get libxml-devel and
	  libxml2-devel to coexist on a single system
	* xml-config.1 xml-config.in xmlConf.sh.in: renamed
	* xml2-config.1 xml2-config.in xml2Conf.sh.in: new files

Sat Jan 27 19:58:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am configure.in libxml-2.0.pc.in: started working on getting
	  libxml2-devel installable in // as libxml-devel.

Sat Jan 27 18:49:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/Makefile.am: fixed make rebuild in doc
	* doc/html/*.html: rebuilt the docs

Fri Jan 26 10:30:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: patch from Bjorn Reese on xmlBufferCCat

Thu Jan 25 19:22:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am doc/Makefile.am libxml.spec.in: painful work to get
	  the HTML doc to go into the -devel RPM ...
	* aclocal.m4 config.h.in: some updates due to auto* magic

Thu Jan 25 19:11:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.h: added a hook in the context structure allowing to
	  link to extra support, needed for XSLT

Thu Jan 25 13:34:11 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch] xpointer.c: added xmlXPathCmpNodes, changed
	  xmlXPtrCmpPoints to use it.
	* propagated the following patch from Alejandro Forero
	* include/win32config.h xmlIO.c: applied further suggestions
	  from Igor Zlatkovic <igorz@dialup.nacamar.de> and cleanup
	* example/gjobread.c: fixed warnings, now that it builds

Wed Jan 24 20:27:28 COT 2001 Alejandro Forero <bachue@bachue.com>

	* xmlIO.c (xmlFileOpen, xmlFileOpenW): Removed unnecessary checks.

	* xmlIO.c (xmlCheckFilename): Function added to know whether a given
	  filename points to a valid file (not a directory).
	* xmlIO.c (xmlFileOpen, xmlFileOpenW, xmlGzfileOpen, xmlGzfileOpenW):
	  Added calls to xmlCheckFilenameDir.

	* xmlIO.c (xmlGzfileOpen, xmlGzfileOpenW, xmlFdOpen, xmlFdOpenW): Pass
	  `path' (rather than `filename') as the parameter to gzopen and open.

Tue Jan 23 16:26:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: fixed a problem with EXTRA_DIST

Mon Jan 22 23:42:17 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am example/Makefile.am: finally found the trick
	  to build the example, i.e. add "." in SUBDIRS before example
	  in the list <grin/>

Mon Jan 22 16:30:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: updated with an XSLT section, removed pointer to
	  W3C CVS base.

Mon Jan 22 11:43:21 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: when copying a XSLT tree object the tree need to be copied
	  too, and deallocation need to occur the same way.

Mon Jan 22 10:35:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpathInternals.h xpath.[ch] debugXML.c: added the XPATH_XSLT_TREE
	  type corresponding to an XSLT result tree fragment. Share most
	  of the data format with node set, as well as operators.
	* HTMLtree.c: added a newline at the end of the doctype output
	  whe this one is not present initially.
	* tree.c: make sure that the parent and doc pointers are properly
	  set when copying attributes (lists).

Sun Jan 21 10:47:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* htmlTree.[ch] xmlIO.h: exported htmlDocContentDumpOutput

Fri Jan 19 18:15:50 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: seems I finally killed that ugly path evaluation
	  context bug (tagged 9999 in case is is wrong)

Fri Jan 19 06:30:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch] xpathInternals.h: added xmlXPathRegisterVariableLookup()
	  for XSLT

Thu Jan 18 16:19:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: Gary Pennington <Gary.Pennington@uk.sun.com> fix
	  for xmlGzfileOpen() bug

Thu Jan 18 13:11:50 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: removed an error found by XSLT usage
	* tree.c parserInternals.h: use a predefined static string
	  for text and comment nodes, avoid freeing them in xmlFreeNode,
	  exported the string name in parserInternals.h and added
	  another value to disable encoding at output (for XSLT),
	  gain memory, time.

Wed Jan 17 09:15:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* win32/README.MSDev win32/libxml2/libxml2_a.dsp
	  win32/libxml2/libxml2_so.dsp: new makefiles and update
	  provided by Igor Zlatkovic <igor@stud.fh-frankfurt.de>

Tue Jan 16 18:24:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c : xmlSaveFile, xmlSaveFileEnc, applied patch from 
	  Gary Pennington

Mon Jan 15 20:24:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed the comaprision of values and nodelists,
	  need to compare nodelist still ...
	* debugXML.c: avoided a possible core dump
	* HTMLparser.c: cleanup
	* nanohttp.c: contributed fix.
	* tree.c: fixes in properties handling added xmlSetNsProp
	  needed by libxslt
	* xpathInternals.h: exported xmlXPathBooleanFunction, added a 
	  comment
	* TODO: updated

Sat Jan  6 22:05:09 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parserInternals.c: applied Bjorn Reese optimization
	  patch

Sat Jan  6 19:13:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: applied patch for make check from Martin Vidner

Thu Jan  4 19:07:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: preparing 2.2.11
	* doc/html/*: rebuild the HTML files
	* doc/xml.html : updated

Thu Jan  4 14:09:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed a stupid bug
	* valid.c: applied "Paul D. Smith" <pausmith@nortelnetworks.com>
	  patches related to validation of an XInclude processing result
	* TODO: updated

Thu Jan  4 11:46:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* encoding.c xmlIO.c: Fixing the problem reported by Marc Sanfacon
	  on large files

Wed Jan  3 21:51:13 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: fixed xmlParserInputBufferCreateMem doc

Wed Jan  3 18:56:00 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: htmlCheckParagraph to check htmlOmittedDefaultValue,
	  reported by Jonas Borgström
	* nanohttp.c: Applied Bjorn Reese' IPV6 first patch

Wed Jan  3 16:19:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* testXPath.c xpath.c: fixing the XPath union expressions problem
	  reported by  Martin Vidner <martin@artax.karlin.mff.cuni.cz>

Wed Jan  3 14:22:33 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.c: Made is so if the file name is "-" is will read form
	  standard input. Sven Heinicke  <sven@zen.org>
	* tree.c: fixed a problem when growing buffer
	* tree.h: fixed the comment of the node types following andersca
	  comment
	* TODO: updated

Wed Dec 27 12:35:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch]: added a way to avoid adding automatically
	  omitted tags. htmlHandleOmittedElem() allows to change the
	  default handling.
	* tree.[ch] xmllint.c: added xmlDocDumpFormatMemory() and 
	  xmlDocDumpFormatMemoryEnc(), uses memory functions for output
	  of xmllint too when using --memory flag, added a memory test
	  suite at the Makefile level.
	* xpathInternals.h xpath.[ch] xpointer.c: fixed problems
	  with namespace use when encountering QNames in XPath evaluation,
	  added xmlns() scheme in XPointer.
	* nanoftp.c : incorporated a fix
	* parser.c xmlIO.c: fixed problems raised with encoding when using
	  the memory I/O
	* parserInternals.c: closed bug 25934 reported by 
	  torsten.landschoff@innominate.de
	* TODO: updated

Sat Nov 25 11:46:27 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in doc/html/* doc/xml.html: made a 2.2.9 release
	  on a non-updated tree :-(, made a 2.2.10 release to correct the
	  situation

Sat Nov 25 10:41:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c parser.[ch] tree.[ch] xmlIO.[ch] xmllint.c xpath.c
	  parserInternals.h vms/build_libxml.com vms/config.vms Makefile.am:
	  integrated a set of OpenVMS changes from Howard Taylor
	  <Howard.Taylor@pacoast.com>

Sat Nov 25 01:21:01 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] xmlIO.c: added xmlDocDumpMemoryEnc() from John Kroll
	* error.c: applied fix suggested by "Leo Davidson" <leo@ox.compsoc.net>

Sat Nov 25 00:24:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: some fixes on auto-open of html/head/body
	* encoding.c: fixed a compilation error on some gcc env
	* xpath.c xpointer.[ch] xpathInternals.h: improved the
	  XPointer implementation
	* test/XPath/xptr/strpoint test/XPath/xptr/strrange3: added
	  related XPointer tests and associated results

Fri Nov 24 14:01:44 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xmldtd.html doc/xml.html: following a short step by step
	  guidance on IRC to help maciej with DTDs I started a small
	  page on the subject.

Fri Nov 17 17:28:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: fixed handling of broken charrefs
	* xmlmemory.h libxml2.dsp include/win32config.h: reporting Windows
	  patches

Mon Nov 13 19:17:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html doc/html/* : rebuilt the docs after adding
	  xinclude and updated page for 2.2.7 and 2.2.8
	* configure.in: releasing 2.2.8

Mon Nov 13 12:39:38 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] parserInternals.c: applied the conditional
	  section processing fix from Jonathan P Springer
	  <jonathan.springer2@gte.net>
	* xmlversion.h.in win32/libxml2/libxml2.dsp : Updated MS
	  project file, fixed iconv default non support
	* xpath.c: fixed the problem of evaluating relative expressions
	  when a node context is provided.

Sun Nov 12 16:31:19 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c: fixed gcc 2.95 new warnings
	* SAX.c: fixed a stupid bug
	* tree.c: fixed a formatting problem when round-tripping
	  from/to memory
	* xinclude.c: chased memleak, fixed a base problem
	* xpointer.c: added xmlXPtrBuildRangeNodeList(), finished ? 
	  xmlXPtrBuildNodeList()
	* TODO: updated
	* Makefile.am test/XInclude/docs test/XInclude/ents result/XInclude:
	  adding a first small set of regression tests for XInclude

Tue Nov  7 15:11:34 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.[ch]: applied Wayne Davison patches to access
	  the WWW-Authorization header.
	* parser.c: Closed Bug#30847: Problems when switching encoding
	  in short files by applying Simon Berg's patch.
	* valid.c: fixed a validation problem
	* hash.c parser.h parserInternals.h testHTML.c testSAX.c tree.h
	  xmlerror.h xmlmemory.h xmlversion.h.in: applied a DLL patch from
	  Wayne Davison
	* xpointer.[ch]: added first version of xmlXPtrBuildNodeList()
	  need to be extended to non full nodes selections.
	* xinclude.c: starts to work decently

Mon Nov  6 17:22:46 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] xinclude.[ch] xmllint.c configure.in valid.c
	  debugXML.c xmlversion.h.in: Started adding XInclude support,
	  this is a new xmllint option
	* tree.c xpath.c: applied TOM patches for XPath
	* xpointer.c: fixed a couple of errors.
	* uri.c: added an escaping function needed for xinclude
	* testXPath.c hash.c HTMLtree.c: minor cleanups raised by
	  new warning from RH70 gcc's version

Tue Oct 31 14:14:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: fixed loop on invalid char in scripts
	* parser.c: update to description of xmlIOParseDTD()
	* libxml.m4 xmlversion.h.in: changes contributed by
	  Michael Schmeing <m.schmeing@internet-factory.de>
	* configure.in: preparing for 2.2.7
	* Makefile.am: trying to avoid  config.h and acconfig.h
	  being included in the distrib
	* configure.in: released 2.2.7

Mon Oct 30 17:08:10 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] debugXML.c parserInternals.c xpath.c: Deprecated Pi's
	  like namespaces for good. Unified xmlNs and xmlNode somewhat.

Mon Oct 30 16:26:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch]: added xmlIOParseDTD()
	* xpointer.c: added support for the 2 extra parameters of
	  string-range, fixed a stoopid error when '0' was present
	  in XPointer expressions
	* test/XPath/xptr/strrange2 result/XPath/xptr/strrange2: added
	  testsuite for the above

Mon Oct 30 10:26:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: improved package descriptions

Sun Oct 29 19:03:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c xpathInternals.h: applied a large cleaning patch
	  from TOM <ptittom@free.fr>, it also add namespace support
	  for function and variables registration.

Sun Oct 29 18:51:46 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c: Wayne Davison's patch fixing xmlBuildURI()
	* Makefile.mingw: Wayne Davison's update adding hash.c

Sun Oct 29 18:38:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c: fixed the root evaluation problems
	* HTMLparser.c result/HTML/doc3.htm: fixed the problem of non
	  ignorable spaces with <b> <bold> <em>
	* tree.c: fixed a loop in xmlSearchNsByHref()

Fri Oct 27 18:57:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c: applied another XPath patch from TOM 
	* xpath.c include/makefile.am: applied another patch from 
	  china@thewrittenword.com (cleanup on IRIX).

Fri Oct 27 13:45:28 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.1: received a fixed version from Fredrik Hallenberg
	  <hallon@lysator.liu.se>

Thu Oct 26 16:05:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c textXPath.c xpathInternals.h: applied TOM <ptittom@free.fr>
	  cleanup patch for XPath

Wed Oct 25 21:31:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* patched to redirrect all "out of context" error messages to
	  a reconfigurable routine. The changes are:
	* xmlerror.h : added the export of an error context type (void *)
	  an error handler type xmlGenericErrorFunc there is an interface
	  xmlSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
	  to reset the error handling routine and its argument
	  (by default it's equivalent to respectively fprintf and stderr.
	* all the c files: all wild accesses to stderr or stdout within
	  the library have been replaced to calls to the handler.

Wed Oct 25 15:27:19 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: release 2.2.6
	* xpath.[ch] xpointer.c xpathInternals.h: added xpathInternals.h
	  exporting the inner functions of xpath for extension modules
	* doc/*: updated and rebuilt the doc

Wed Oct 25 12:48:55 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c : applied Wayne HTTP cleanup patch
	* tree.[ch]: applied TOM <ptittom@free.fr> for xmlNodeSetBase()
	  and xmlNodeSetSpacePreserve()

Wed Oct 25 12:11:03 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c: closing bug #29260

Tue Oct 24 18:49:34 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* hash.[ch] debugXML.c: expanded/enhanced the API, added
	  multikey tuples, made hash structure opaque
	* valid.[ch]: moved elements, attributes, notations decalarations
	  as well as ID and refs to hash tables.
	* entities.c: hash cleanup
	* xmlmemory.c: fixed a dump problem in debug mode
	* include/Makefile.am: problem passing in DESTDIR= values patch
	  from Marc Christensen <marc@calderasystems.com>
	* nanohttp.c: removed debugging remains
	* HTMLparser.c: the bogus tag should be ignored (Wayne)
	* HTMLparser.c parser.c: fixing a number of problems with the
	  macros in the *parser.c files (Wayne).
	* HTMLparser.c: close the previous option when opening a new one
	  (Marc Sanfacon).
	* result/HTML/*: updated the HTML results accordingly

Sun Oct 22 18:39:19 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.[ch] xpath.[ch] hash.[ch] debugXML.c tree.h: added/hacked
	  hash tables from Bjorn Reese <breese@mail1.stofanet.dk>. Switched
	  XPath functions and XML entities table to them. More to come...
	* xmlIO.c: fixed libxml closing FILEs it didn't open.

Sun Oct 22 13:59:50 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: coalesce adjacent text nodes
	* valid.c: handling of blank nodes in DTd validation (raised
	  by problems with a posteriori validation).
	* nanohttp.c: changing behaviour on HTTP write stuff.
	* HTMLtree.c: forced body and html to be explicitly closed.
	* xpath.h: exported more XPath functions.

Sun Oct 15 22:28:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Release of 2.2.5
	* xpointer.c: range() range-inside and other helper functions
	* parserInternals.c: fixed perf problem raised by rolf@pointsman.de

Sun Oct 15 16:21:27 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c: HTML attributes need normalization too (Bjorn Reese)
	* HTMLparser.[ch]: added htmlIsScriptAttribute()

Sun Oct 15 13:18:36 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/*: rebuilt docs preparing for 2.2.5 release, added URI
	  and XPointer modules

Sun Oct 15 12:13:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.h: closed #25107

Sun Oct 15 12:06:16 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testSAX.c: fixed problem with cdata reporting
	* SAXresult/* : updated

Sun Oct 15 12:00:24 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c test/wap.xml result/noent/wap.xml result/wap.xml:
	  Closed bug #27499, added to regression tests
	* TODO: updated

Sun Oct 15 01:34:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c HTMLtree.[ch] SAX.c testHTML.c tree.c: fixed HTML
	  support for SCRIPT and STYLE with help from Bjorn Reese
	* test/HTML/* result/HTML/*: added simple testcase and updated
	  the existing ones.

Fri Oct 13 18:24:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c xpointer.c: XPointer reorder of ranges start/end and
	  string-range for empty strings
	* test/XPath/docs/str test/XPath/xptr/chaptersrange
	  test/XPath/xptr/strrange: augmented the XPointer testsuite

Fri Oct 13 12:21:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html doc/xmlmem.html: added a module describing memory
	  interfaces and use, updated the main page.

Fri Oct 13 01:23:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c xmlIO.c: Wayne Davison Win32 patch
	  nanoftp code work on Windows too now

Fri Oct 13 00:54:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testXPath.c xpath.[ch]: moved some debug functions to xpath core
	* xpointer.c: implemented string-range() at least a good first version
	* test/XPath/docs/str test/XPath/xptr/strrange
	  result/XPath/xptr/strrange: the string-range() tests

Thu Oct 12 10:02:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am include/Makefile.am include/win32config.h
	  win32/Makefile.mingw: fixed problems reported by Wayne Davison
	  and make distcheck

Thu Oct 12 01:44:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c: added xmlNanoHTTPTimeout(int delay), removed a bug
	  xmlNanoHTTPMethod on input MimeType Tony Lam <Tony.Lam@eng.sun.com>
	* xpointer.c: slight extension of xmlXPtrLocationSetMerge

Thu Oct 12 01:37:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* config.h.in configure.in nanoftp.c nanohttp.c xmlversion.h.in :
	  patch for socklen_t detection by
	  Albert Chin-A-Young <china@thewrittenword.com>

Wed Oct 11 17:53:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c valid.c xmllint.c: Fixed a few postvalidation bugs
	  and added a --dtdvalid option to xmllint used to test it

Wed Oct 11 15:01:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.1 Makefile.am libxml.spec.in: adding a man page for
	  xml-config by Fredrik Hallenberg <hallon@lysator.liu.se>

Wed Oct 11 12:41:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] xpointer.[ch]: worked on XPath functions and variable
	  handlings (registration, lookup, cleanup)

Wed Oct 11 01:46:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in Makefile.am include/makefile.am: adding XPointer
	  and XPtrtests target
	* xpointer.[ch] : new files for XPointer support
	* test/XPath/xptr result/XPath/xptr: added XPointer testsuite and
	  more XPath tests

Wed Oct 11 01:23:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: fixed, very broken, make distcheck works again

Wed Oct 11 02:53:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* More work toward 2.2.5, integrated a number of patches
	* configure.in Makefile.am win32config.h.in: trying to cleanup
	  make distcheck .... huh ...
	* include/Makefile.am include/win32config.h: new directory
	  for includes
	* win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp
	  updated the makefiles and instructions for WIN32
	* xpath.c: small fixes
	* test/XPath/ results/XPath: updated the testcases and results
	* HTMLparser.c nanohttp.c testXPath.c: incorporated provided or
	  suggested patches
	* valid.c: fixed an ID bug

Mon Oct  9 14:28:56 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* moved xml-error.h to xmlerror.h: seems this allowed to bypass
	  the automake bug where wrong dependencies were generated.
	* xpath.[ch]: worked on XPointer

Fri Oct  6 12:58:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in Makefile.am: 2.2.5, ship the include in an
	  include/libxml subdirectory, use symlinks when using CVS
	* testSAX.c: fixed small bug
	* testXPath.c: changed the way testfiles are parsed
	* debugXML.c: same kind of cleanup when parsing an argument expression
	  XPath/XPointers can have blanks embedded
	* xpath.[ch]: more cleanup, reorgs for XPointer work
	* parserInternals.c parser.c HTMLparser.c: fixed wrong include
	* win32/README.MSDev win32/libxml2/libxml2.dsp: Windows stuff

Thu Oct  5 18:13:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* debugXML.c testXPath.c xpath.[ch]: got pissed by some nastiness
	  in the XPath engine, rewrote large parts of it, now it's far
	  cleaner and in sync with the REC not an old WD. Fixed a parsing
	  problem in the interactive XML shell found when testing XPath.

Wed Oct  4 15:25:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* debugXML.c testXPath.c xpath.[ch]: More work on XPath/Xpointer,
	  incorporated "(TOM)" <ptittom@free.fr> patches rebuilt the XPath
	  examples with the extra test

Wed Oct  4 14:39:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c xmlIO.c xmlIO.h: fixed bug 26650, and improved
	  the global init function.

Tue Oct  3 11:28:52 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: Doohhh, attribute name parsing was still case
	  sensitive ! Fixed this ...
	* result/HTML/* : updated the tests results accordingly

Mon Oct  2 23:47:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] debugXML.c testXPath.c: fixed the XPath evaluation
	  engine, should be far more stable, incorporated a new version of
	  preceding/following axis, need testing
	* uri.c: fixed file:///c:/a/b/c problem
	* test/XPath/tests/idsimple: augmented the XPath tests

Sun Oct  1 22:33:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* rebuilding docs for 2.2.4 release

Sun Oct  1 22:16:33 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: releasing 2.2.4
	* parser.[ch]: added xmlStrEqual()
	* HTMLparser.c HTMLtree.c SAX.c debugXML.c entities.c parser.c
	  tree.c valid.c xlink.c xpath.c: converted all !xmlStrcmp to
	  use xmlStrEqual instead
	* TODO: updated
	* added an XPath test

Sun Oct  1 20:19:39 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: fixed htmlStartCloseIndexinitialized init
	* entities.h: exported xmlInitializePredefinedEntities
	* parser.[ch] : added xmlInitParser()
	* parserInternals.h : had to export htmlInitAutoClose()

Sun Oct  1 16:28:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] : fixed some serious XPath Predicate evaluation
	  problems
	* Makefile.am : added XPath regression tests to normal tests
	* uri.c: fixed a problem with local paths, cleanup
	* parser.c: fixed a problem with large CData sections

Sat Sep 30 16:35:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in xml-config.in: patch from "Ben Taylor"
	  <sol7x86@hotmail.com> for solaris shared libs lookup

2000-09-30  Martin Baulig  <baulig@suse.de>

	* libxml-2.0.pc.in: Provide pkg-config script.

	* configure.in: Create the libxml-2.0.pc script from the
	libxml-2.0.pc.in templates.
	* Makefile.am (pkgconfig_DATA): Install the libxml-2.0.pc
	script in `$(libdir)/pkgconfig'.

Mon Sep 25 16:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.c tree.c tree.h: Avoiding a few warning
	  when compiling with MSC

Sun Sep 24 20:32:52 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c: patch for normalize-string() substring-before(),
	  substring-after() and translate() functions from Bjorn Reese
	  <breese@mail1.stofanet.dk>
	* libxml.m4 Makefile.am: added libxml.m4 from Debian ?
	  Fredrik Hallenberg <hallon@lysator.liu.se>
	* TODO: updated

Sun Sep 24 10:00:49 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlversion.h.in nanoftp.c nanohttp.c: traying to work out the
	  problem of socklen_t being undefined on a number of platforms
	* debugXML.c: fixed a compilation problem when without snprintf

Sat Sep 23 12:19:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c uri.c: Another patch from Wayne Davison, correcting
	  an URI bug and a fix for the control-character-induced infinite loop
	* nanohttp.c: preventive fix for compiling on WIN32

Fri Sep 22 18:06:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlint.c: closing bug #25000

Fri Sep 22 14:17:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlIO.h tree.h: made xmlNodeDump() and xmlNodeDumpOutput() public
	* parser.[ch] nanohttp.c HTMLtree.c HTMLparser.c tree.c: applied and
	  modified slightly Wayne Davison patch adding xmlStrcasecmp and
	  related function, fixing xmlStrncmp(), and associated cleanup
	* result/HTML/entities.html.sax: updating result

Tue Sep 19 14:20:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c: applied patch for URI escaping from Wayne Davison
	  <wayned@blorf.net>
	* tree.c parserInternals.c HTMLparser.c: memset checks patches
	  from Denis Barbier <barbier@imacs.polytechnique.fr>
	* HTMLparser.c: UTF8 characters in HTML tag-attribute values
	  patch from Wayne Davison

Sun Sep 17 18:37:03 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : updated with new releases, adding "how to help"

Sun Sep 17 17:58:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c debugXML.c parser.c parserInternals.c tree.c valid.c xpath.c:
	  removed a few warnings in pedantic mode ...
	* parserInternals.c parser.c: moved encoding switching function
	  to parserInternals.c
	* configure.in, doc/Makefile.am libxml.spec.in: released 2.2.3

Sat Sep 16 20:12:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.c: set ctxt->errNo before calling the
	  error or warning handlers

Wed Sep 13 22:03:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parserInternals.c parserInternals.h parser.c Makefile.am:
	  created a new module parserInternals.c, moved most of the
	  code shared by the various parsers there, as well as
	  deprecated  code from parser.c. More cleanup of parser.c
	* uri.c: fixed a problem when URI is NULL
	* valid.c: speedup when looking for an attribute declaration

Sun Sep 10 17:53:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c tree.c SAX.c parser.c entities.c debugXML.c: finished
	  the cleanup of the computation of URI references when seeking
	  external entities. The URI reference string and the resulting
	  URI are both stored now.
	* parser.c HTMLparser.c valid.c nanoftp.c nanohttp.c xpath.c:
	  large s(n)printf checks and cleanup from Denis Barbier
	  <barbier@imacs.polytechnique.fr>
	* xmlversion.h.in tree.h: couple of SGML declarations for a
	  possible docbook module.
	* result/VC/ : a couple of test output changed due to the change
	  of the entities URI

Sun Sep 10 15:59:58 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.h: added a _private field for linking user's data

Sun Sep 10 15:14:43 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c parserInternals.h: demacroified most of the IS_XXX
	  the gain in size is significant so ...

Fri Sep  8 20:48:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.c: cases where looking up entities with doc==NULL
	  covered

Tue Sep  5 12:41:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c: applied Wayne Davison patch
	* Makefile.in test/URI/uri.data result/URI/uri.data: updated URI tests

Mon Sep  4 13:01:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c testUri.c: applied Wayne Davison patches
	* test/URI/uri.data result/URI/uri.data: first set of tests/results
	* Makefile.in: added URItest and included thenin "make tests"

Sun Sep  3 19:19:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlversion.h.in: closed bug 22941

Thu Aug 31 16:55:55 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xmlio.html: added doc and example for entity loader
	  redefinition.

Thu Aug 31 14:59:28 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xmlio.html doc/xml.html: added a doc on the I/O mechanism
	  used by libxml

Tue Aug 29 20:22:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Fixed bug on invalid ontent characters and when using
	  push.
	* xmllint.c: fixed xmllint endling of errors in push mode

Tue Aug 29 11:24:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c testHTML.c: applied two new patches from
	  Wayne Davison <wayned@users.sourceforge.net>
	* result/HTML/*.sax: regenerated HTML SAX output
	* parser.c: more cleanup.

Mon Aug 28 11:58:12 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch] testHTML.c: applied the second set of
	  patches from Wayne Davison <wayned@users.sourceforge.net>,
	  adding htmlEncodeEntities()
	* HTMLparser.c: fixed an ignorable white space detection bug
	  occurring when parsing with SAX only
	* result/HTML/*.sax: updated since the output is now HTML
	  encoded...

Mon Aug 28 00:38:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch]: applied some of Wayne Davison
	  <wayned@users.sourceforge.net> patches

Sun Aug 27 22:14:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c tree.c debugXML.c: fixed bogus behaviour when an
	  undeclared namespace prefix was used, added a warning.
	  Cleaned up support w.r.t. entities, spilling out a warning
	  and being pedantic on lookups.
	* test/warning/ent9 : added testcase for previous example.
	* TODO: updated
	* parserInternals.h parser.c: changed the way names are parsed
	  now allow infinite size and decrease penalty for normal use
	* parser.c: Started a big cleanup/check of the parser code,
	  fixed some of the most tortuous entity code, spotted code
	  unused anymore
	* test/*: added tests for very long names and related nasty
	  things.

Sat Aug 26 23:31:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html: added encoding aliases doc
	* doc/xml.html: updates
	* encoding.[ch]: added EncodingAliases functions
	* entities.[ch] valid.[ch] debugXML.c: removed two serious
	  bottleneck affecting large DTDs like Docbook
	* parser.[ch] xmllint.c: added a pedantic option, will be
	  useful
	* SAX.c: redefinition of entities is reported in pedantic mode
	* testHTML.c: uninitialized warning from gcc
	* uri.c: fixed a couple of bugs
	* TODO: added issue raised by Michael

Wed Aug 23 01:50:51 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html: propagated Martin Duerst suggestions

Wed Aug 23 00:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Fixed Bug#21552: libxml fails to decode &amp;
	* uri.c testUri.c patches, by Marc Sanfacon (1 left)
	* parser.c HTMLparser.c: HTML/encoding push problems reportedi
	  by Wayne Davison

Sun Aug 20 17:03:38 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c: small cleanup
	* TODO: updated

Sat Aug 19 22:57:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* added an old VC testcase and updated title.xml entity

Sat Aug 19 21:02:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c SAX.c tree.c HTMLtree.h result/HTML/*: work
	  done on auto-opening of <p> tags and cleanup of SAX output

Sat Aug 19 18:45:40 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.4  xmllint.1 Makefile.am libxml.spec.in: added man pages

Sat Aug 19 18:38:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html libxml.* structure.*: updated the doc a bit

Thu Aug 17 15:50:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testSAX.c testHTML.c result/HTML/: cleanup of the output
	  of SAX tests

Mon Aug 14 13:56:33 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Albert Chin-A-Young <china@thewrittenword.com>:
	* xmllint.c: workaround a MAP_FAILEd definition bug in DU-4.0

Mon Aug 14 11:10:20 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Dave Yearke <yearke@eng.buffalo.edu>:
	* testHTML.c: fix core dump on Solaris 2.x systems
	* HTMLparser.c: fix segfault if ctxt->sax->characters() is NULL
	* result/HTML/*.sax: previous bug fix lead to new results

Mon Aug 14 10:26:09 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Albert Chin-A-Young <china@thewrittenword.com>:
	* configure.in: added --with-readline=DIR to accept alternate
	  path for readline include/library
	* configure.in: added AM_C_PROTOTYPES to add -Aa -D_HPUX_SOURCE
	  for ANSI under HP-UX
	* config.in: Removed @LIBS@ from xml-config because @XML_LIBS@
	  includes @LIBS@

Sat Aug 12 23:19:42 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the docs
	* getting ready for 2.2.2 release

Sat Aug 12 16:42:37 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch]: added xmlGetFeaturesList() xmlGetFeature()
	  and xmlAddFeature()
	* tree.[ch]: added xmlAddChildList()
	* xmllint.c: MAP_FAILED macro test
	* parser.h: added xmlParseCtxtExternalEntity()
	* valid.c: applied bug fixes removed warning
	* tree.c: added CDATA block to elements content
	* testSAX.c: cleanup of output
	* testHTML.c: added SAX testing
	* encoding.c: better error recovery
	* SAX.c, parser.c: fixed one of the external entity processing
	  of the OASis testsuite
	* Makefile.am: added HTML SAX regression tests
	* configure.in: bumped to 2.2.2
	* test/HTML/ result/HTML: added a few of HTML tests, and added the
	  SAX results

Fri Aug  4 11:21:50 PDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: patch for HP compiler

2000-08-04  Sven Heinicke  <sven@zen.org>

	* xmllint.c: Was coredumping sometimes when the file given didn't
	exist.

Sat Jul 22 05:59:05 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c xmlIO.[ch]: fixed the problem of encoding support

	  when using in memory parsing. Need some cleanup.
	* xmllint.c configure.in: added a --memory flag to test memory
	  parsing

Fri Jul 21 17:09:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c: fixed socklen_t replacement to unsigned int
	* parser.c: fixed a space handdling missing at the end of
	  production 28 DOCTYPE.
	* xmlmemory.c: fixed a stupid bug on the routine to override
	  allocation functions
	* TODO: updated

Fri Jul 14 17:01:14 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/ regenerated the docs

Fri Jul 14 16:12:20 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html doc/xml.html: added I18N doc
	* encoding.[ch] HTMLtree.[ch] parser.c HTMLparser.c: I18N encoding
	  improvements, both parser and filters, added ASCII & HTML,
	  fixed the ISO-Latin-1 one
	* xmllint.c testHTML.c: added/made visible --encode
	* debugXML.c : cleanup
	* most .c files: applied patches due to warning on Windows and
	  when using Sun Pro cc compiler
	* xpath.c : cleanup memleaks
	* nanoftp.c : added a TESTING preprocessor flag for standalong
	  compile so that people can report bugs more easily
	* nanohttp.c : ditched socklen_t which was a portability mess
	  and replaced it with unsigned int.
	* tree.[ch]: added xmlHasProp()
	* TODO: updated
	* test/ : added more test for entities, NS, encoding, HTML, wap
	* configure.in: preparing for 2.2.0 release

Mon Jul 10 16:17:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c: fixed the way the control connection is handled
	* libxml.spec.in: fixed the dependencies and cleanup

Mon Jul  3 14:37:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html: changed the xmlsoft.org structure, updated the
	  examples w.r.t. root and childs

Sun Jul  2 20:51:43 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: fixed bug #7419, dependencies fouled for libxml-devel

Sun Jul  2 09:52:45 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: Work on character encoding support for the HTML parser
	* HTMLparser.c: Fixed some autoopen/autoclose probs for the HTML parser
	* encoding.c: Fixed a potential memleak in the encoding stuff

Sat Jul  1 13:44:22 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/FAQ.html doc/Makefile.am : added a FAQ

Fri Jun 30 20:29:08 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c HTMLtree.c SAX.c valid.c tree.h : more cleanup
	  of the HTML parser to force it to not bypass SAX

Fri Jun 30 11:19:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* win32config.h.in: updated
	* xmlversion.h.in: crap forgot to update this, this mean 2.1.0
	  lacks iconv support :-( need to release 2.1.1
	* configure.in: release 2.1.1
	* HTMLparser: fixed bug #14784
	* xpath.c HTMLparser.c encoding.c parser.c: fix warning raised
	  by Windows compiler
	* HTMLparser.c SAX.c HTMLtree.h tree.h: create HTML document in
	  the SAX startDocument() callback.
	* TODO: updated

Thu Jun 29 12:06:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* added xmlStopParser()

Wed Jun 28 23:10:26 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: 2.1.0 prerelease
	* Large resync between W3C and Gnome tree
	* nanoftp, nanohttp.c: fixed stalled connections probs
	* HTMLtree.c SAX.c : support for attribute without values in
	  HTML for andersca
	* valid.c: Fixed most validation + namespace problems
	* HTMLparser.c: start document callback for andersca
	* debugXML.c xpath.c: lots of XPath fixups from Picdar Technology
	* parser.h, SAX.c: serious speed improvement for large
	  CDATA blocks
	* encoding.[ch] xmlIO.[ch]: Improved seriously saving to
	  different encoding
	* example/Makefile.am example/gjobread.c tree.h: work on 
	  libxml1 libxml2 convergence.
	* config.h.in parser.c xmllint.c: added xmlCheckVersion()
	  and the LIBXML_TEST_VERSION macro

Fri Jun 23 22:26:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html: various patches and improvements typo fixed by
	  Felix Natter
	* doc/libxml-doc.el: Emacs module to lookup the libxml documentation
	  from Felix Natter <fnatter@gmx.net>

Sat May  6 10:09:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/upgrade.html: updated with instructions for support of both
	  libxml-1.x and libxml-2.x
	* doc/gjobread.c : applied Todd Dukes <tdukes@ibmoto.com> patch
	  for 2.x support and also fixed includes

Wed May  3 14:21:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* encoding.[ch], xmlIO.[ch], parser.c, configure.in : revamped
	  the encoding support, added iconv support, so now libxml if
	  compiled with iconv automatically support japanese encodings
	  among others. Work based on initial patch from Yuan-Chen Cheng
	  I may have broken binary compat in the encoding handler
	  registration scheme, but that was so utterly broken I don't
	  expect anybody to have used this feature until now.
	* parserInternals.h: fixup on the CHAR range macro
	* xml-error.h, parser.c: catch URL/URI errors using the uri.c
	  code.
	* tree.[ch]: added xmlBufferGrow(), was needed for iconv
	* uri.c: added xmlParseURI() I can't believe I forgot to
	  implement this one in 2.0 !!!
	* SAX.c: moved doc->encoding update in the endDocument() call.
	* TODO: updated.

Mon Apr 24 13:30:13 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h: removed extraneous xmlRemoveProp definition
	* TODO: added item about --disable-corba configure switch
	* tree.c parser.c: fixed problems for xmlCopyDoc and postvalidation
	* nanoftp.c: fixed include problems giving troubles on AIX and 
	  slowlaris
	* xmlIO.[ch] valid.h tree.[ch] xlink.c xmlmemory.c uri.c 
	  parser.c nanoftp.c nanohttp.c SAX.c testSAX.c :
	  comment and headers changes to lower gtk-doc number of warnings
	* doc/html/*: rebuilt docs

Sun Apr 16 11:23:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HACKING: documented the tag for 1.x and instructions

Wed Apr 12 15:47:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlIO.[ch] parser.[ch]: More interfaces for new I/O functions
	  xmlNewIOInputStream, xmlParserInputBufferCreateIO,
	  xmlCreateIOParserCtxt
	* parser.c parserInternals.h: speedup of IS_CHAR like macros,
	  significant overall improvement
	* xmllint.c: added I/O test to xmllint
	* testSAX.c: added a speed test
	* doc/* : updated/regenerated

Sat Apr  8 14:54:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c uri.h parserInternals.h: cosmetic changes from
	  "Timur I. Bakeyev" <timur@bat.ru>, including making 
	  xmlCreateURI() public

Fri Apr  7 18:35:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlIO.[ch] parser.c: cleane up the xmlParserInputBuffer mess
	  and the code at the same time. Added a clean mechanism for
	  overload or added input methods: xmlRegisterInputCallbacks()
	* tree.c: fixed xmlPrevSibling and xmlNextSibling per 
	  Christophe Le Gal (Christophe.Le-Gal@imag.fr) input
	* TODO: updated
	* doc/* : updated/regenerated
	* doc/Makefile.am: tweaks to avoid problem with libxml link in the
	  source dir

Wed Apr  5 21:11:35 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testURI.c: yet another forgotten commit, I should get some sleep !

Wed Apr  5 20:36:46 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmllint.c: forgot to commit this too ?

Wed Apr  5 16:22:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlversion.h.in : forgot to commit this previously

Mon Apr  3 21:47:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: preparing libxml-2.0.0 version looks Ok so far
	* README TODO: updated for release
	* uri.c uri.h: added authority parsing/saving
	* uri.c testURI.c Makefile.am: moved the testing code to testURI.c
	* xmlversion.h.in configure.in nanoftp.[ch] nanohttp.[ch] encoding.h
	  debugXML.[ch] xpath.[ch] xmlIO.c tester.c testXPath.c testHTML.c
	  tree.c HTMLtree.c HTMLparser.c tree.c tree.h parser.c
	  Makefile.am : added compile-time customization of libxml
	  --with-ftp --with-http --with-html --with-xpath --with-debug
	  --with-mem-debug
	* *.[ch] autoconf.sh : moved to an absolute addressing of includes : 
	  #include <libxml/xxx.h> I hope it won't break too much stuff
	  and will be manageable in the future...
	* xmllint.c Makefile.am libxml.spec.in : renamed tester.c to xmllint.c
	  and added xmllint to the installed programs
	* uri.h: added xmlFreeURI()

Fri Mar 24 14:35:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c uri.h: finished the escaping handling, the base support
	  and the URI path normalization. Looks good just lacks the
	  authority content parsing code.
	* Makefile.am: added instructions to generate testURI
	* TODO: updated
	* doc/xml.html, doc/smallfootonly.gif doc/w3c.png: updated,
	  added links and icons for W3C and Gnome

Mon Mar 20 14:05:26 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.[ch] : seems I forgot to actually update the files in
	  the last commit :-)
	* doc/xml.html doc/html/* : updated and uploaded the docs

Mon Mar 20 12:33:51 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* test/valid/dtds/xhtml*: removed RCS infos (pain with CVS)
	* TODO: updated
	* xmlmemory.[ch] : added xmlMemSetup() and xmlMemGet() to override
	  libxml default allocation function with another set (like gmalloc/
	  gfree).
	* Makefile.am, uri.c, uri.h: added a set of functions to do
	  exact (literally copied from the RFC 2396 productions) parsing
	  and handling of URI. Will be needed for XLink, one XML WFC, 
	  XML Base and reused in the nano[ftp/http] modules. Still work
	  to be done.

Tue Mar 14 20:52:35 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, libxml.spec.in : libxml2
	* doc/* : updated the doc page, rebuilt the docs

Tue Mar 14 19:11:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* all: tagged LIB_XML_1_X
	* *.c *.h : updated from W3C CVS tree
	* configure.in : 2.0.0-beta
	* libxml.spec.in : libxml2 package nam
	* result/* : new version of the tests output

Mon Mar  6 09:34:52 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html, doc/update.html: updated docs, 1.8.7

Sat Mar  4 16:14:42 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the docs
	* parser.c: final patch on #6766
	* valid.c: small patch on validity checks.

Sat Mar  4 12:38:41 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/upgrade.html: instruction on how to upgrade from 1.x to 2.x
	  added
	* parser.c: adding xmlKeepBlanksDefault() as a way to manage
	  compatibility w.r.t. XML spec and existing code.

Thu Mar  2 04:45:15 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: seems a better solution to <a>   </a> exists,
	  will try it for a while

Thu Mar  2 02:26:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: tried to remove the <a>   </a> generating <a/>
	  this is hard. Left a flag for that purpose. Fixed bug #6766
	* configure.in: prepared 1.8.7 not released, due to previous
	  problem

Thu Mar  2 03:03:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : applied second patch from Paul DuBois

Tue Feb 29 23:55:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : applied patch from Paul DuBois

Thu Feb  3 16:36:39 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c HTMLparser.c: do a bit of bufferization in push mode.

Thu Feb  3 15:59:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c tree.c HTMLtree.[ch] debugXML.c xpath.c: Fixed
	  compilation warnings on various platforms.
	* parser.c: Fixed #5281 validity error callbacks are now deactivated
	  by default if not validating.

Thu Feb  3 13:46:14 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c, win32config.h.in: patches to compile on WIN32

Wed Feb  2 22:51:16 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c: snprintf/sprintf patch courtesy George Katsirelos
	  <gkatsi@cs.toronto.edu>

Mon Jan 31 18:58:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when
	  processing URLs

Mon Jan 31 14:25:57 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch]: cleanup, bug fixes, integration in rpmfind, added
	  xmlNanoFTPUpdateURL for persistent control connections.
	* configure.in: 1.8.6

Thu Jan 27 17:52:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.[ch], nanoftp.[ch]: cleanup, added proxy support
	* tree.[ch] : added xmlSaveNoEmptyTags

2000-01-29  James Henstridge <james@daa.com.au>

	* nanoftp.c: include <netinet/in.h> for IPPROTO_TCP.

	* Makefile.am: added nanoftp.[ch] to the build.

Wed Jan 26 18:14:55 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch]: cleanup, comments, API
	* debugXML.c : fixed a bug in the cat command
	* doc/*: regenerated the docs

Wed Jan 26 16:52:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch] parser.c xmlIO.[ch]: added a Nano FTP implementation
	* debugXML.c : fixed a bug in the cat command
	* valid.c: fixing some small probs
	* libxml.spec.in: get rid of the SNAP suffix
	* doc/xml.html: updated the status

Mon Jan 24 14:31:09 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.in: xml-config --version to just return the
	  version number
	* xpath.c: some cleanup w.r.t. axis when the current node is
	  an attribute.
	* TODO: updated

Tue Jan 18 18:46:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: prepared for libxml-1.8.5
	* doc/* recompiled the documentation

2000-01-17  Jody Goldberg <jgoldberg@home.com>

	* configure.in : WARNING autoconf subtlety alert :
	  Use AC_CHECK_HEADERS rather than AC_CHECK_HEADER
	  when looking for zlib.h so that HAVE_ZLIB_H is defined.
	* config.h.in : Have a #undef for HAVE_ZLIB_H so that it will
	  get defined by AC_CHECK_HEADERS.

Mon Jan 17 17:04:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: fixed a hideous bug in xmlGetProp() thanks to
	  Rune.Djurhuus@fast.no

Sat Jan 15 15:09:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* TODO: updated
	* tree.c, parser.c: made sure that only memory alloc problems
	  and internal parser errors are allowed to write to stdout or
	  stderr.

Thu Jan 13 11:49:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c : restored xmlNewGlobalNs since this seems used by
	  a lot of existing code :-(, fixed a bug in xmlNewNs
	* nanohttp.c: fixed a problem with INCLUDE_WINSOCK
	* HTMLparser.c, parser.c, entities.c, valid.c : removed all calls
	  to exit() from the library code.
	* xpath.c, parser.c: removed bugs or unused code detected by 
	  Windows compilers
	* parser.c: started adding interfaces for parsing well balanced
	  XML fragments
	* configure.in: releasing 1.8.4
	* doc/* : rebuilt the docs

Sun Jan  9 23:03:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] : added xmlNewDocFragment() for DOM
	* testHTML.c: uninitialized variable.

Wed Jan  5 17:29:17 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuild the docs

Wed Jan  5 17:08:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* acconfig.h: readline and history patch
	* valid.[ch]: added xmlRemoveID() and xmlRemoveRef()
	* tree.c: added check and handling when possibly removing an ID
	* tree.c, HTMLparser.h, HTMLtree.h: fixed entities parsing
	     and saving.
	* test/HTML/entities.html result/HTML/entities.html* : test for
	     various entities reference cases
	* result/HTML/* : as a result output of some testcase have
	     changed
	* HTMLparser.c, parser.c: fixed a bug in the push mode triggered
	     by previous example. added xmlParseTryOrFinish().
	* xpath.h tree.h parser.h valid.h xmlIO.h xlink.h encoding.h
	  entities.h debugXML.h HTMLparser.h: changed the way struct are 
	  declared to allow gtk-doc to expose those
	* parser.c: closed bug #4960  
	* Makefile.am configure.in: Applied patch from 
	  Albert Chin-A-Young <china@thewrittenword.com> for better zlib
	  and math/socket libs detection

Mon Jan  3 18:29:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, Makefile.am: link tester against readline
	* doc/xml.html doc/*/*: updated and rebuilt the documentation pages

Mon Jan  3 11:58:05 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: added xmlRemoveProp
	* win32config.h.in nanohttp.c: avoid including the Windows
	    socket stuff in every C files
	* parser.c: removed an indetermination xmLDecl/PI(xml...) in
	    the XmL parser(s)
	* test/ns4 result/ns4 etc...: added test case for previous prob    
	* tree.c: xmlNewNs wasn't checking for double definition
	* Makefile.in: fixed a problem with dist-hook duplicates
	* parser.[hc], xmlIO.c: fixed the loading of external entities
	    APIs, now xmlLoadExternalEntity() is used everywhere and
	    setting up an app specific front-end using the 
	* SAX.c parser.c: some fixes, now the xhtml spec validates
	    with the xhtml DTD.
	* error.c: fixed crashes in case of no input stream    
	* test/valid/[dtds/]/xhtml* : added the xhtml spec and dtds
	    to the validation tests and results

Wed Dec 29 15:29:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch] testHTML.c: added push mode for the HTML parser
	  too htmlCreatePushParserCtxt() and htmlParseChunk()
	* parser.c: a bit of cleanup.
	* SAX.c, HTMLparser.c: some attributes may not have values (contrary
	  to XML) removed the last mem leak known
	* HTMLtree.c: output message cleanup
	* xmlmemory.c: display content info about memory blocks
	* result/HTML/wired.* : missing att value warning change

Tue Dec 28 17:42:41 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the documentation

Tue Dec 28 18:44:22 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] parserInternals.h: Push parser for XML,
	     seems to work fine now
	* tester.c debugXML.[ch]: Added an XML shell debug facility and
	     --push for push testing
	* xpath.[ch] : cleaned up for Shell usage, added missing APIs
	* testSAX.c: added --push
	* HTMLtree.[ch] tree.[ch]: new functions for dumping parts of the
	     subtree
	* xmlIO.[ch] : enriched API + fixes for push mode     
	* entities.[ch]: added the entity content length to the struct.
	* xmlmemory.[ch]: new API to show the last entries for the shell
	* valid.c: added required attribute testing
	* SAX.c: the cdata callback now merge contiguous fragments
	* HTMLparser.c: cleanup of some macros

Wed Dec 22 12:20:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: fix for PIs name starting with xml
	* tree.c: fixed a potential problem with || and && ops
	* *.c, configure.in win32config.h.in : generate win32config.h for
	  those on the Other Side !

Tue Dec 21 17:22:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: fixed a stupid = vs. == bug :-(
	* doc/gnome-xml.sgml: s/glade/xml/

Tue Dec 21 14:29:34 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, doc/xml.html : bug fix release 1.8.2
	* debugXML.h nanohttp.h xml-error.h xmlmemory.h xpath.h : 
	  Hopefully the end of that silly C++ include problem
	* tree.[ch]: Added a few functions: xmlReplaceNode, xmlAddPrevSibling,
	      xmlAddNextSibling, xmlNodeSetName and xmlDocSetRootElement
	* HTMLparser.c HTMLparser.h HTMLtree.c: When saving HTML try to avoid 
	      troubles with autoclosed elements when the stree shape doesn't
	      follow the DtD specs. Added htmlIsAutoClosed() and
	      htmlAutoCloseTag()
	* result/HTML/*.htm*: Updated the HTML examples regression tests output
	* SAX.c tree.c: fixed bug on defaulting namespaces on attributes
	* debugXML.c: fixed a bug on printing default namespaces.
	* HTMLtree.c: fixed a problem when outputting XML parsed docs as HTML

Mon Dec 20 16:20:55 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* result/HTML/*.htm[l] : updated the HTML regression tests according
	  to the new output
	* xpath.h xml-error.h valid.h tree.h parser.h entities.h SAX.h
	  HTMLtree.h tree.c entities.c: headers tweakings to avoid a nasty
	  problem due to intermix of extern "C" { ... } declarations for C++
	  and recursive includes in the headers

1999-12-20  Chris Lahey  <clahey@umich.edu>

	* HTMLtree.c: Made it so that html nodes with a single child do
	not insert a carriage return before or after the child node.

Sat Dec 18 16:07:03 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, doc/xml.html : bug fix release 1.8.1
	* parser.c: fixed bug #4344
	* xpath.h xml-error.h xlink.h nanohttp.h debugXML.h SAX.h HTMLparser.h
	  added the glue to avoid C++ problems
	* doc/* : regenerated the documentation

Thu Dec 16 16:19:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: fixed a bug introduced in 1.8.0 and breaking default
	  namespace recognition, and Dia as a result :-(
	* encoding.c: closed bug #3950

Wed Dec 15 19:22:23 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* valid.c: debugging a posteriori validation, except URI expansion
	  stuff this should be fixed now
	* parserInternals.h: fixed a bug in IS_BASECHAR reported by
	  Carl Nygard <cnygard@bellatlantic.net>
	* tester.c: added --postvalid, cleaning of the code
	* tree.[ch]: added xmlDocGetRootElement()

Tue Dec 14 20:30:34 PST 1999 Ramiro Estrugo <ramiro@eazel.com>

	* SAX.h, tree.h : changed 'namespace' to 'nameSpace' to workaround
	c++ losage.

Sun Dec 12 13:08:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, doc/xml.html : bumped to 1.8.0
	* xlink.[ch], Makefile.am : added framework for link detection
	* parser.h: added nbChars to parser context, needed for cleanup.
	* xmlmemory.c: removed a nasty bug when out of mem
	* valid.[ch]: adding namespace support for attribute decl
	* tester.c: added --debugent option
	* debugXML.[ch]: added xmlDebugDumpEntities()
	* parser.c: cleanup, avoiding use of CUR_PTR like plague, using
	  buffers instead, this was really needed, validation was breaking
	  in strange ways due to that. Added xmlParseStringPEReference()
	  and other parsing from strings functions. Entities processing
	  modified again, but PERef are still not handled correctly but
	  unless you're Eve Maller you won't notice :-)
	* HTMLparser.c: large changes toward reliability, and switched to
	  lowercase internal tags, XHTML is lowercase, so it will help
	  that output is closer to next version.
	* doc/* : regenerated the documentation, it is now hosted at
	  http://xmlsoft.org/ (same bits I just bought the domain :-)

Fri Dec  3 13:46:32 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.h, SAX.c, makefile.am: added SAX.h mostly useful for the
	         doc generation
	* parser.c: fixed bugs #3908 and #3937 and a memory leak
	         in the SAX API
	* doc/*: rebuilt the doc making sure everything appears in the
	         HTML files

Wed Dec  1 10:27:47 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] HTMLtree.c, debugXML.c, configure.in, xml-config.in:
	     added the patch from Carl Nygard <cnygard@bellatlantic.net>
	     which allow impressive speed improvement on dataset with
	     large text pieces, but at the cost of broken binary
	     compatibility and slightly bigger memory usage.
	     Configure with --with-buffers to activate them, they
	     are protected with XML_USE_BUFFER_CONTENT define.
	* entities.[ch], parser.c: added xmlCleanupPredefinedEntities(),
	     goal is 0 memory left allocated once parser is no more used
	* testDAV.c, testHTML.c, testSAX.c, testXPath.c: make sure we
	     call xmlCleanupParser() and xmlMemoryDump()

Wed Nov 24 19:00:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] xmlIO.[ch] parser.c valid.c: code cleanup with -pedantic
	* parser.[ch] encoding.[ch]: added memory cleanup routines
	* parser.c: closing bug #3788
	* doc/*: rebuilt the doc

Tue Nov 23 11:23:55 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: closing bug 3748, added xmlNewDocRawNode(), 
	             xmlNewTextChild() and xmlSetCompressMode() behaviour.
	* tester.c: added --compress option
	* doc/*: rebuilt the documentation

Fri Nov 19 18:41:28 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: bugfixing, the damn thing MUST not crash even
	                if given /proc/kcore as input !
	* doc/xml.html doc/*: updated and rebuilt the documentation

Thu Nov 18 14:57:18 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Fixed some wrongly space collapsing code due to
	            a misreading of the spec.
	* result/*: fixed the output accordingly	    

Wed Nov 17 18:28:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* encoding.c: bug fix and typos
	* xmlIO.[ch] parser.c: first bits toward real progressive parsing
	* parser.c: added attribute normalization closing bug #3597
	* test/att* result/att* SAXresult/att*: testcase for attribute
	    normalization

Mon Nov 15 18:50:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: closing bug #3163 by adding extra flags for the
	                cc compiler on HP-UX

Fri Nov 12 17:41:20 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* valid.[ch] : removed a typo and an enumerated type bug in the
	               xmlAddElementDecl() function
	* tree.c : I changed xmlSetProp() and xmlNewProp() to do the
	    call to xmlEncodeEntitiesReentrant() so that the functions 
	    New, Set and Get are at the same level.
	* parser.c HTMLparser.c: extra memory allocation bug for
	    attributes detected by someone using libxml in embedded systems :-)

Thu Oct 28 17:49:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.h: turned off mem debug :-\

Mon Oct 25 12:13:25 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: closed bug #2784 a one line fix, but worth pushing
	            a new release out
	* HTMLparser.c: fixed auto-close bugs on list items, zeroing
	            some structures, comments before and after the
		    main element, and other nastiness
	* HTMLtree.c tree.c: accommodate the extended HTML supported	    
	* configure.in: pushing 1.7.4
	* test/ent8 and related outputs : added a new test for bug #2784
	* test/HTML/wired.html and related output: a nasty HTML example
	* Makefile.am: improved the test scripts
	* docs/* : reran the documentation extractor, updated xml.html

Thu Oct 14 10:29:56 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c, HTMLtree.c, tree.h: completely revamped the
	     HTMLparser and debugged the HTML related code. HTML documents
	     now have their own type
	* entities.c: do not dump &apos; for HTML output
	* xmlmemory.c: improvement, breakpoint mechanism
	* testHTML.c: added --sax --repeat ...
	* Makefile.am: improved the HTML tests
	* valid.[ch]: added xmlValidGetValidElements and
	              xmlValidGetPotentialChildren
	* tester.c: added --insert to test the 2 new functions
	* test//* result//* SAXresult//* : regression test cleanup
	               and extension.
	* doc/html : added doc for new modules gnome-xml-xmlmemory.html and
	             gnome-xml-nanohttp.html

Mon Oct 11 14:31:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: fixed problems with some autoclose tags
	* tree.c: fixed XML output problems. 
	* result/* SAXresult/*: update of the tests output

Sat Oct  9 11:02:57 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am: Arturo patch for xmlConf.sh version info
	* parser.c: Tim Josling patch for single quoted items
	* tester.c: Tim Josling patch for tester options usage
	* tree.h: indent cleanup

Fri Oct  8 16:35:37 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.h : Fixed problems with HTML parsing
	    reported by Kristian Hogsberg Kristensen <hogsberg@daimi.au.dk>

Fri Oct  8 11:37:11 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c : Raph patch for initialization of CORBA fields
	* parser.c, xpath.c, ...: modification of doc comments
	* xpath.c : allow spaces in xpath expressions

Mon Sep 27 10:16:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.h: turning off memory debug :-(

Sun Sep 26 13:16:54 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] : added xmlSAXUserParseFile() and xmlSAXUserParseMemory()
	                better SAX interfaces.
	* testSAX.c: uses the new SAX routine, avoid fetching any remote
	             entity.
	* configure.in: 1.7.2

Fri Sep 24 16:01:01 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: fixed the URL
	* doc/xml.html: improved the documentation front-end

Fri Sep 24 01:06:36 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c: conditionned references to snprintf with HAVE_SNPRINTF

Fri Sep 24 00:15:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: fixed the alpha compile problem
	* parser.[ch]: changed errno to errNo in the parser context :-(
	* *.[ch]: changed CHAR to xmlChar to avoid problem on WIN32
	* doc/xml.html: changed CHAR to xmlChar
	* doc/html/*: recompiled the documentation
	* configure.in: 1.7.1

Wed Sep 22 11:40:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.h: modified the parser context struct to regain 1.4.0
	            binary compatibility
	* parser.c, xml-error.h: added errno to the context and defined
	            a set of errors values with update of errno
	* nanohttp.[ch]: minimalist HTTP front-end for fetching remote
	            DTDs and entities
	* *.h, *.c: complete cleanup of the use of config.h and include
	            protection depending on the current setup.
	* overalll debugging, maintenance and bug-fixing on all modules
	* updated the documentation
	* ready for 1.7.0

Wed Sep  8 22:46:14 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c : cleanup
	* SAX.c valid.c valid.h: added ID/IDREF checking
	* tree.c tree.h: extended doc structure for refs
	* configure.in: 1.6.2
	* parser.c: patched bug in SAX user arg call
	* parserInternals.h: patched missing close in C++ wrapping
	* testXPath.c xpath.c xpath.h: prepared for extensibility,
	  especially upcoming XPointer implementation.
	* doc/xml.html: augmented, typo

Sat Sep  4 22:48:05 CEST 1999 Timur Bakeyev <mc@bat.ru>

	* doc/Makefile.am: replaced "install -d " with "mkinstalldirs" -
	not all invocations of install understand -d.

Sat Sep  4 22:20:07 CEST 1999 Timur Bakeyev <mc@bat.ru>

	* Makefile.am: prepend all the test* calls with $(top_builddir) -
	to make 'check' works, when builddir != srcdir.

Sat Sep  4 20:25:46 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : updated the documentation

Fri Sep  3 00:01:08 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.[ch] Makefile.am  :added a memory wrapper to chase
	      not deallocated memory blocks
	* *.c : replaces all calls to malloc() free() and realloc() to
	      the wrapper functions/macros
	* tree.c : removed memory leaks dues to calling xmlFreeNode()
	      instead of xmlFreeNodeList()

Wed Sep  1 14:15:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: corrected a stupid bug leading to core dump at
	                tree deallocation. Removed warnings indicated by
			Stephane.Conversy@lri.fr
	* entities.c: Fixes Yet Another Stupid Bug, entities were not
	              looked for in the external subset

Mon Aug 30 13:22:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c valid.[ch] xpath.c: patched compilation warnings reported
	  on SGI by Stephane.Conversy@lri.fr

Sun Aug 29 22:27:29 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* all .h : changed the prototype declaration indent as in gtk
	* most .c : working on reducing the TODOs in the code
	* most .c : cleanup though -pedantic and Insure++
	* improvements on validation ID checkings.
	* tree.[ch] SAX.c: added support for namespace on attributes #2022
	* xml-config.in: closed #1810

Mon Aug 16 03:27:38 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, valid.c, valid.h: more work on validity, IDs
	* xpath.c: added/fixed comparidon and equlity, added a new isinf
	  definition for AIX

Sun Aug 15 21:15:17 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am libxml.spec.in: corrected missing xmlConf.sh in
	  the distribution due to a cut'n paste error at last commit

Tue Aug 10 20:28:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: upgraded to version 1.4.0
	* valid.[ch], SAX.c, parser.[ch] parserInternals.h ...
	  Big update, added a large part of the validation process,
	  it should be usable, but some parts are missing
	* xpath.c: improved the implementation w.r.t. root.
	* Makefile.am: added more tests
	* test and result trees: added a lot of tests
	* libxml.spec.in: export libxml.so.0 and libxml.so.1

Tue Aug 10 11:33:41 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Added an HACKING file

Tue Jul 27 21:43:00 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] : improvements and debug of the XPath implementation
	* parser.c, HTMLparser.c : modified the parsers to be progressive
	* tree.[ch] : extended the Buffer promitives
	* xmlIO.[ch] : added basic I/O routines providing progressive
	  parsing and ready for I18N conversion plugins
	* SAXresult/* : the SAX callback sequence maybe slightly different
	  now
	* test*.c : improved/updated the tests programs
	* doc/* : recompiled the docs.

1999-07-26  Michael Meeks  <michael@edenproject.org>

	* tree.h: Add const to 'content' in xmlNewDocNode, xmlNewChild

	* tree.c: Ditto.

Thu Jul 15 16:17:16 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: upgraded to version 1.4.0
	* xpath.c, xpath.h, testXPath.c, makefile.am: added code for the XPath
	  draft from W3C. Will be used by XPointer, Xlink, XSL, and possibly
	  XML query language, see http://www.w3.org/TR/xpath for more details.
	* parser.c, parser.h: added CHAR* related string functions for XPath
	* HTMLparser.[ch], HTMLtree.c: a bit of cleanup on entities.
	* doc/gnome-xml.sgml, doc/html/* : added XPath and HTML documentation,
	  rebuild the docs.
	* Makefile.am, test/XPath/*, result/XPath/*: added an XPathtests target
	  and regression testing capabilities for XPath.

Mon Jul 12 12:36:39 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, HTMLparser.c: applied patch from John Ellson <ellson@lucent.com>
	  closing bug #1646

Mon Jul 12 11:04:44 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am, example/Makefile.am: closed bug #1683

Sun Jul 11 18:16:34 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* example/Makefile.am, configure.in: added the makefile for the
	  gjobread example

Sat Jul 10 14:19:11 CEST 1999 Tomasz Kłoczko  <kloczek@pld.org.pl>

	* doc/Makefile.am:
	- fix which allow "make install DESTDIR=</install/prefix>".

Fri Jul  9 12:10:24 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.c: applied patch from John Ellson <ellson@lucent.com>
	  which fixed a problem on the file reading-code.

Wed Jul  7 09:28:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch], HTMLtree.[ch]: more work for HTML parsing and
	  output.
	* Makefile.am, test/HTML/*, result/HTML/*: added HTMLtests targetestHTMLt

Wed Jul  7 00:25:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.h : Oops removed the binary compatibility problem
	* HTMLparser.[ch], HTMLtree.h : More work on the HTML parse/dump
	* parser.c, HTMLparser.c: applied patches for reading from stdin

Mon Jul  5 18:45:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, entities.c, valid.c: cleanup bug #1591
	* configure.in: cleanup bug #1592
	* HTMLparser.[ch], testHTML.c: started adding an HTML parser using
	  the same tree back-end. Hence gdome will be available for it.
	* doc/Makefile.am: close bug #617

Sat Jun 26 23:36:38 EDT 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: alloctate a per parser context SAX interface block

Tue Jun 22 23:46:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* released 1.3.0 with xmlEncodeEntities restoring old behaviour
	  and xmlEncodeEntitiesReentrant with the correct one :-\

Mon Jun 21 14:07:53 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* commit of my internal XML base changes, quite a lot of
	  changes, cleanups, better entities support, framework for
	  new I/O and charset detection and handling
	* Fixed the configure/Makefile stuff to generate shared libs
	  with the proper version info, so we jumped on rev from
	  0.0.0 to 1.2.0 ! The binary interfaces have been broken,
	  xmlEncodeEntities() result need to be freed now, and a string
	  xmlParserVersion provide the current library version.

Tue Jun 15 14:24:19 1999  Raph Levien  <raph@acm.org>

	* parser.c: fixed a buffer overrun for when you have a very long
	attribute with no entities in it.

Mon Jun 14 00:17:50 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* added example directory
	* added example/gjobs.xml gjobread.c, still need a Makefile.in

Wed Jun  2 19:40:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Release of libxml-1.1, nearly everything has been touched for
	  this.
	* Added more regression tests
	* Updated the documentation

Sat May 29 13:34:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: unified the XML_NO_CORBA defines.
	* parser.c encoding.[ch]: started plugging in char encoding detection

Fri May 28 22:58:42 EDT 1999 Manish Vachharajani <mvachhar@vger.rutgers.edu>

	* tree.c: (xmlSaveFile) - removed double call of xmlContentDump.  
	  Also freed allocated buffer.

Wed Apr 21 22:07:35 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
	* parser.[ch] tree.[ch] entities.[ch] valid.[ch] : removed the main
	  reentrancy problem at printing. One is left in entities.c, to
	  remove ASAP
	* testSAX.c : added a test example showing the use of the SAX 
	  interface if one doesn't want to build the DOM tree.
	* html/gnome-xml-*.html html/index.sgml: regenerated the documentation

Mon Apr  5 14:14:40 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] tree.[ch] SAX.c, parserInternals.h valid.[ch]:
	  large revamping of the parser to use SAX callbacks
	  http://www.megginson.com/SAX/ (or at least a C like interface
	  a la Expat). It's now possible to set up your own callbacks
	  and the parser will not build a DOM tree.
	* test/* result/*: updated the test suite, I finally removed
	  the old Namespace draft support (PI based).

Fri Apr  2 17:57:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am: added test result to EXTRA_DIST for make tests

Wed Mar 24 21:37:02 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parserInternals.h: moved the chars macro definitions
	  to parserInternals.h
	* parser.c, error.c: applied patches from "Knut Åkesson"
	  <ka@s2.chalmers.se> for clean compilation under MSVC 6 :-o

Tue Mar 23 11:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.in : applied patch to make --version work

1999-03-05  Raja R Harinath  <harinath@cs.umn.edu>

	* Makefile.am (check-local): Alias for `tests' target.  This will
	cause `make check' to do the right thing.
	(tests): Don't run tests in srcdir.  Also, replaced calls to
	basename with a `sed' "equivalent".

Fri Mar  5 07:23:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Renamed error.h to xml-error.h, corrected Makefile.am to list
	  it in the header and not the sources, updated the doc.
	  Thanks to Tim Mooney <mooney@dogbert.cc.ndsu.nodak.edu> for
	  pointing this out.

Mon Mar  1 13:27:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parser.h, parserInternals.h: memory leak hunting,
	  exported the inputStream routines.
	* doc/html/* : updated accordingly

Sun Feb 28 22:51:33 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parser.h, parserInternals.h: added a few extra
	  internal calls to allocate and free parser contexts ...
	* doc/html/* : updated accordingly

Thu Feb 25 11:52:24 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, Makefile.am, doc/makefile.am : General changes for
	  1.0.0 release and including the generated HTML documentation.

Thu Feb 25 09:44:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* makefile.am : added parserInternals.h, oops.

Mon Feb 22 11:24:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parserInternals.h: added this header giving access to the parser
	  internal functions.
	* doc/Makefile.am : added a rebuild target which rebuilds the full
	  set of documentations
	* parser.[ch] tree.[ch] valid.[ch]: serious updates w.r.t. parsing
	  the internal subset. 
	* *.c *.h: modifications needed to generate the documentation using
	  gtk-doc, cleanup of functions blocks, reorganisation of struct
	  declarations.

Tue Feb 16 17:27:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am, spec, doc/Makefile.am : upgrading to 0.99.8, fixing
	  the tar and spec file to include the beginning of the doc.

1999-02-13  Nuno Ferreira  <nmrf@rnl.ist.utl.pt>

	* doc/.cvsignore: Added this file.

Mon Feb  8 19:27:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: fixed xmlGetProp to return "" when the attribute
	  exists, even if the node-list is NULL.

Mon Feb  8 16:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: patched an error outputting empty attribute values.
	* Makefile.am and doc/makefile.am: have been updated during the
	  week-end. Sorry for an empty CVS log, I got a shell problem.

Mon Feb  1 12:10:13 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h: cleaned up using enums instead of defines
	* parser.c, valid.[ch]: more work on parsing/output of element
	  declarations

Sun Jan 31 22:06:48 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* valid.[ch], tree.c, parser.c : more work toward full parsing
	  of XML DTDs.
	* README: added information about mailing-list and on-line
	  documentation

1999-01-27  Raja R Harinath  <harinath@cs.umn.edu>

	* configure.in (XML_INCLUDEDIR): Use -I not -L for includes.

Sun Jan 17 20:06:36 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, tree.[ch] : more work toward conformance testing,
	  added a last element to accelerate parsing of very flat structures
	  started working on internal subset Element content declaration.
	* valid.[ch] : first cut at adding code toward validation.
	* previous changes had also small impact on most files, especially
	  the conformance testing using James Clark test suite.

Sun Jan 17 14:45:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* test/* : updated the examples, most of them were not well
	           formed (humm), and added rdf2.
	* result/* : resulting changes in the output.

Sun Dec  6 13:06:58 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: changed the behaviour of xmlGetProp on NULL values.

Sat Dec  5 12:25:09 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: patched a bug in the generation of empty attributes

Fri Nov 27 01:36:54 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.[ch], tree.[ch], tester.c: added copy interfaces
	  for node/trees/documents/... Biggest problem is namespace
	  support when copying subtrees.

Sun Nov 15 19:59:47 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, entities.c: improve entities and char ref encoding,
	  and cleanups of error messages.

Fri Nov 13 13:03:10 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, entities.c: simple bug hunting done during rpm2html and
	  rpmfind integration.

Sun Nov  8 13:11:07 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch]: Added interfaces allowing to specify a SAX
	  handler before parsing.

Sun Nov  8 09:39:17 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: redirrect all errors reporting through the SAX
	  error function

Wed Nov  4 14:21:54 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.c: rather use HAVE_SNPRINTF and not depend on glib
	* libtool, tlmain ...: update of the libtool files

1998-11-04  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* entities.c: Use g_snprintf insteda of snprintf.

Sun Nov  1 14:31:06 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.c, parser.c: debug and cleanup of CharRef handling/saving.
	  added ent5 test for this purpose.
	* parser.c, parser.h: formatting, comments and UTF-8 planning.

Fri Oct 30 01:36:52 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: fixed? a strange error due to compression on a GWP
	  document.

Thu Oct 29 00:48:45 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: bug fixing
	* entities.[ch]: defined a specific type for predefined entities
	* doc/xml.html: more documentation on the library, how to use it,
	  overview of the interfaces.

Wed Oct 28 17:56:35 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: more cleanup on the API, made the tree more conformant.

Tue Oct 27 17:54:00 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: corrected a small bug
	* doc/xml.html: continuing writing documentation.

Tue Oct 27 17:54:00 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* debugXML.h debugXML.c: added debugging utilities.
	* tester.c: added --debug switch.
	* tree.c: patched an incorrect node->type assignment.
	* parser.c: formatting, ensure that node->doc != NULL in attributes

Tue Oct 27 01:15:39 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] SAX.c tree.[ch]: large amount of changes to improve
	  entity support and provide an internal representation close to
	  DOM one (entity ref nodes, and attribute value as tree). I tried
	  to preserve the interface but this will surely break some apps
	  (I have to change rpm2html/rpmfind for example). I had to change
	  two interfaces, and the generated tree is somewhat different.
	* doc/* : started documenting the XML library, the tree and
	  DOM/Corba. This is a first step.

Sat Oct 24 14:23:51 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Set up the functions comment block, boring but useful.
	* parser.h, SAX.c, parser.c: now attributes are processed through
	  the SAX interface. The problem is that my SAX interface diverged
	  quite a bit from the original one, well this is not an official
	  spec, and translating it from Java to C is hairy anyway...

Tue Oct 20 02:11:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c, entities.c, tree.c, encoding.c, error.c: Set up the
	  functions comment block, boring but useful.

Sun Oct 18 20:40:58 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* encoding.[ch], Makefile.am: Added the UTF-8, UTF-16 and ISO Latin 1
	  conversion routines. However they are not yet used to convert the
	  inputs. The core will run with UTF-8.

Sun Oct 18 15:08:19 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c : make sure that the type id is properly set-up when
	  a new object is allocated, needed for DOM.

Sat Oct 17 02:43:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, tree.c: Ok, the main objects in the tree will be native
	  corba objects, it costs 8 bytes per Node, Attribute and Document
	  but it simplifies the Corba integration a lot (no extra interface
	  objects to allocate/free).

Tue Oct 13 21:46:57 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, tree.c, parser.c: added prev and doc pointers to Node,
	  and changed NODEs constants for conformity with DOM Level 1

Wed Oct  7 23:42:46 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* added hooks to keep track of servants when creating objects
	  xmlDoc and xmlNode (for Corba export).

Sun Oct  4 03:18:09 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* added xml-config script.

Thu Oct  1 16:22:37 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* autogen.sh : applied patch from Frederic Devernay <devernay@istar.fr>
	  to autoupdate libtool and automake conf files.

1998-09-30  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* Makefile.am: Use '?' to separate the sed
	commands as ',' is used when people pass -Wl,something.

Thu Sep 24 15:13:29 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c, tree.h: added a per-document compression interface.

Tue Sep 22 20:47:38 EDT 1998

	* tree.c, tree.h: added saving with compression and added interfaces
	  to control the compression level (xmlGetCompressMode,
	  xmlSetCompressMode) and a new save to filename function (xmlSaveFile).

Mon Sep 21 20:11:13 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: corrected a loop for files of size 0

1998-08-20  Raja R Harinath  <harinath@cs.umn.edu>

	* error.h: New file.  Contains prototypes from `error.c'.

Thu Aug 13 19:02:34 1998  Tom Tromey  <tromey@cygnus.com>

	* Makefile.am (xmlincdir): New macro.
	(xmlinc_HEADERS): Renamed from include_HEADERS.

Thu Aug 13 00:40:14 EDT 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* applied small patch on numeric entities from
	  Christopher Blizzard <blizzard@appliedtheory.com>

Wed Aug 12 23:12:58 EDT 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* New release 0.2, removed the old xml_* files so that it's
	    coherent with the other CVS base (W3C), far better conformance
	    to standard, new namespaces, decent entities support, beginning
	    of a SAX-like interface. Nearly nothing left intact, even the
	    test examples ...

1998-07-30  Christopher Blizzard  <blizzard@appliedtheory.com>

	* .cvsignore: Add .deps dir

Sun Jul 26 17:29:52 EDT 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* xml_tree: changed the memory allocation scheme for name in xmlNewNode

Sun Jul 26 00:17:51 EDT 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: added test for CPP
	* AUTHORS, Changelog: the original ones didn't get committed but the
	    glib ones instead, fixed.
	* Makefile.am: corrected an error in library naming

Fri Jul 24 16:47:14 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* integrated code developed at W3C
	* changed the original Copyright
	* migrated to automake
	* prefixed the filenames by xml_ to avoid filename clashes

#
# vim: set enc=utf-8
#
