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
	  regession 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 teh 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
	  explicitely.
	* 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 semicolumn 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 errro 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 memeory 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 wher 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_familly 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 commited 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 teh 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 strem 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 whould 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 suport 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 consistant 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 intial 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 nastly "warnigns" 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 loosing 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 currect 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 explicitely
	  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
	  nastly 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 usefull 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 skipp 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 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 latests 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
	  occured 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/*: upated 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 resul//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: commiting 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 interferring 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.
	  Seperated 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 dissalow 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
	  aquisition 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 informations.

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 commited 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 chnages 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 dependancy 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: commiting
	  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 agaisnt
	  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 agruments 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 occured 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 informations 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 occured 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 ambigious symbol-space for
	  local attribute declarations. IFDEFed more IDC code to
	  surpress 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 machanism to store element information for the
	  ancestor-or-self axis; this is needed for identity-constraints
	  and should be helpfull 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 commnent 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 informations
	  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 entires 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 machanism 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
	  teh first set of automatic API regression tests.
	* test/slashdot16.xml: apparently missing from CVS, commited 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 occuring 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 accomodate 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 adressing 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*: 
	  Simpified 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 accomodate 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 dublicate 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 inplementation 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 whith 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 substituing 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 shoudl 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 formating 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 taht 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 recusive extention 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 fro 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 verson 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: commiting
	  the new xmlsave module before the actuall 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 occuring
	  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: commiting 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 mutiple 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 preceeded 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 informations, 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
	  informations 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 informations.

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
	  makeing 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 (?) occurences 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 namesapce 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 informations.

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 easilly.
	* 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 teh 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 informations 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 sligthly 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 borken 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 uneeded 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 commiting 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 elminate 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 unsignificant 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 unsed 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 unititialized
	  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 mutiple 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 dependant.

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: commiting
	  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 symetric and dependant 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,
	  shemas 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 loose 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 surprize...

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 crazyness, 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 
	  brokeness
	* globals.c: fix a doc generation problem
	* uri.c: fix #101520
	* doc/*: updated and rebuilt the doc for the release, includuding
	  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, addding 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 inexistant 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 wich was also dependent on the
	  processing of parsed entities, and XPath computation on sustitued
	  entities.
	* testXPath.c: make sure entities are substitued.

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 overriden 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 informations

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 teh 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 informations, 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 libary 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 sepecific 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 similary 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 loosing 
	  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 arround 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 evalutation 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: maked 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 maked protocols comparisson 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
	  uninitailized 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 availble 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/*: commiting 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
	  explicitely 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 suceeded, 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 suceeded, 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 suceeded, 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: attded more test and 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 informations
	  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: commited 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
	  eponential buffer groth 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 occurences
	  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 loose 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
	  commited without review or aproval 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 substitued

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 optmization 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
	  optionnal 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 occured 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 unknow 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 informations

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
	  aways 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 suport 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 verions 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 formating 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 ouptut :-(

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 functionnalities.
	* 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 unnecesary 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 teh 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 correponding 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 taht 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 fro 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 evalation,
	  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 explicitely 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]: addded 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 teh 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 nastyness
	  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
	  occuring 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 easilly
	* 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 adressing 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 (litteraly 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 desactived
	  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 outputing 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 resul :-(
	* 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 correcly 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 nastyness
	* HTMLtree.c tree.c: accomodate 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 ot teh 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 informations 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 mor 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 fonctions 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
	  fonctions 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 contants 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 prototyes 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 commited 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 developped at W3C
	* changed the original Copyright
	* migrated to automake
	* prefixed the filenames by xml_ to avoid filename clashes

#
# vim: set enc=utf-8
#
