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 dictionnary, 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 dictionnary 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 
	  dictionnary 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 dictionnaries 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 dictionnary, but this
	  opens the door to others possible optimizations.
	* dict.c include/libxml/dict.h: added xmlDictCreateSub() which allows
	  to build a new dictionnary based on another read-only dictionnary.
	  This is needed for XSLT to keep the stylesheet dictionnary read-only
	  while being able to reuse the strings for the transformation
	  dictionnary.
	* xinclude.c: fixed a dictionnar 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 dictionnary 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 dictionnary.
	* 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 dictionnary.

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
#
