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 the changes are here,
	  the parser and validation behaviour can be affected, parsing
	  flags need to be copied, lot of changes. Also fixing various
	  validation problems in the regression tests.

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

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

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

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

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

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

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

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

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

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

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

	* xpath.c: space and tabs cleanup

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

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

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

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

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

	* libxml.spec.in: fix the build root

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* threads.c: check some allocation with Ashwin patch

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

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

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

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

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

	* xmlreader.c: patch from Ashwin removing duplicate tests

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* configure.in: typo patch from Bjorn Reese

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

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

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

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

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

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

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

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

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

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

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

	* uri.c: fix xmlURIUnescapeString comments which was confusing

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* xmlreader.c: fix xmlTextReaderSetup() description
	* test/relaxng/empty1.rng test/relaxng/comps_0.xml
	  test/relaxng/empty1_0.xml test/relaxng/comps.rng
	  test/relaxng/empty0.rng test/relaxng/empty0_0.xml
	  test/relaxng/empty1_1.xml: tests which were apparently 
	  never 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 the 2 stupid bugs affecting htmlReadDoc() and
	  htmlReadIO() this should fix #340322

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

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

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

	* HTMLparser.c: fixing HTML minimized attribute values to be generated
	  internally if not present, fixes bug #332124
	* result/HTML/doc2.htm.sax result/HTML/doc3.htm.sax 
	  result/HTML/wired.html.sax: this affects the SAX event 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 support to the Python bindings

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* HTMLtree.c xmlsave.c: Add linefeeds to error messages allowing 
	  for 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 losing the namespace
	  information.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* xpath.c include/libxml/xpath.h: Added an XPath object cache.
	  It sits on an xmlXPathContext and need to be 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 useful with node-sets. The current flags I have in mind:
	  1) Is a node-set already sorted?
	     This would allow for rebust and optimizable sorting
	     behaviour.
	  2) Of what type are the nodes in the set (or of mixed type)?
	     This would allow for faster merging of node-sets.
	  3) Are namespace nodes in the set?
	     This would allow to 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 namespace-names.
	  Fixed xmlStreamPushInternal() not to use string-pointer
	  comparison if a dict is available; this won't work, since
	  one does not know it the given strings originate from the
	  same dict - and they normally don't do, since e.g.
	  namespaces are hold on xmlNs->href. I think this would be
	  worth an investigation: if we can add a @doc field to xmlNs
	  and put the @href in to a additionan namespace dict hold
	  in xmlDoc. Daniel will surely not like this idea :-) But
	  evaluation of tons of elements/attributes in namespaces
	  with xmlStrEqual() isn't the way we should go forever.
	  
Thu May 11 18:03:49 CEST 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* tree.c: fix compilation without tree

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wed Jan 18 18:21:15 CET 2006 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c libxml.h parser.c: try to fix xmlParseInNodeContext
	  when operating on an HTML document.

Mon Jan  9 17:27:15 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* relaxng.c include/libxml/relaxng.h: Added
	  xmlRelaxNGSetParserStructuredErrors() to the API.

Mon Jan  9 15:33:16 CET 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: reverted first patches for #319279 which led to #326295
	  and fixed the problem in xmlParseChunk() instead
	* test/ent11 result//ent11*: added test for #326295 to the regression
	  suite

Thu Jan  5 16:25:06 CET 2006 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in libxml.spec.in testapi.c doc/*: 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.
	  Separated attribute derivation from attribute constraints.
	  Completed constraints for attribute group definitions.
	  Disallowing <import>s of schemas in no target namespace if the
	  importing schema is a chameleon schema. This contradicts
	  the way Saxon, Xerces-J, XSV and IBM's SQC works, but the
	  W3C XML Schema WG, thinks it is correct to disallow such
	  imports.
	  Added cos-all-limited constraints.
	  Restructured reference resolution to model groups and element
	  declarations.
	  Misc cleanup.

Fri Oct  7 04:34:12 CEST 2005 Rob Richards <rrichards@ctindustries.net>

	* schematron.c xmlregexp.c: remove warnings under Windows.

Wed Sep 28 23:42:14 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Massimo Morara fixing bug #317447
	  about risk of invalid write in xmlStringLenDecodeEntities

Tue Sep 27 11:20:57 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c: Adrian Mouat pointed out redundancies in xmlReportError()

Mon Sep 26 19:18:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: seems a test to avoid duplicate transition is 
	  really needed at all times. Luka Por gave an example hitting
	  this. Changed back the internal API.

Thu Sep 22 13:14:07 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixing leak in xmlTextReaderReadString() #316924

Thu Sep 15 16:12:44 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* uri.c: more fixes to the behaviour of xmlBuildRelativeURI

Thu Sep 15 15:08:21 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: detect combinatory explosion and return with
	  a runtime error in those case, c.f. #316338 though maybe we
	  should not see such an explosion with that specific regexp,
	  more checking needs to be done.

Wed Sep 14 19:52:18 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/schemasInternals.h: Added some comments for the
	  struct fields.

Wed Sep 14 13:24:27 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed problem when xmlBuildRelativeURI was given a
	  blank path (bug 316224)

Mon Sep 12 23:41:40 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc//*: release of 2.6.22 updated doc and
	  rebuild.
	* xmlsave.c include/libxml/xmlsave.h: added XML_SAVE_NO_XHTML
	  xmlSaveOption
	* xmlschemas.c: minor cleanups

Mon Sep 12 21:42:47 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
	
	* test/schemas/import1_0.xsd: And adapting another one.

Mon Sep 12 21:29:35 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/derivation-ok-extension_0_0: Adapted result.

Mon Sep 12 21:20:41 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/allsg_0_3.err result/schemas/allsg_0_4.err
	  result/schemas/changelog093_1_0.err
	  result/schemas/derivation-ok-extension_0_0.err
	  result/schemas/import1_0_0.err
	  result/schemas/derivation-ok-restriction-2-1-1_0_0.err:
	  Adapted regression results.

Mon Sep 12 21:00:53 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: Completion of the schema graph.
	  Centralisation, more robustness of the schema document
	  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 against
	  the regression suites, work in progress

Tue Jun 28 08:30:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: adding URI tests

Mon Jun 27 23:55:56 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: adding xml:id

Mon Jun 27 23:29:36 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: finishing XPath, adding XPointer

Mon Jun 27 17:39:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: adding more coverage, XInclude and starting XPath

Mon Jun 27 17:02:14 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c include/libxml/tree.h: Added allocation/deallocation
	  functions for the DOM-wrapper context.

Mon Jun 27 15:41:30 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Commented the new functions to be experimental.

Mon Jun 27 14:41:14 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c valid.c: working some weird error reporting problem for
	  DTD validation.
	* runtest.c: augmented with DTD validation tests
	* result/VC/OneID*: slight change in validation output.

Mon Jun 27 13:44:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: added most HTML tests

Mon Jun 27 14:06:10 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/namespaces/reconcile/tests.xml
	  test/namespaces/reconcile/tests-to-c.xsl: Added initial tests
	  for some new DOM-wrapper helping functions.

Mon Jun 27 14:01:06 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/xstc-to-python.xsl: Cleanup.
	* xstc/sun-test-def.xml xstc/nist-test-def.xml xstc/ms-test-def.xml:
	  Removed, those are not needed anymore due to the new test suite.

Mon Jun 27 11:39:50 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* result/*.sax2 MAkefile.am: added SAXv2 regression tests apparently
	  missing.
	* runtest.c: added SAX1/SAX2 checks.

Mon Jun 27 12:24:54 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c include/libxml/tree.h: Added
	  xmlDOMWrapReconcileNamespaces(), xmlDOMWrapAdoptNode() and
	  xmlDOMWrapRemoveNode() to the API. These are functions intended
	  to be used with DOM-wrappers.

Mon Jun 27 10:14:57 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: continue to increase the tests

Mon Jun 27 09:21:49 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: continue to increase the tests

Mon Jun 27 01:01:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: continue to increase the tests

Sun Jun 26 20:08:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/valid.h valid.c: avoid name glob in 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 occurred when using
	  IDCs: the precomputed value of attributes was not freed if
	  the attribute did not resolve to an IDC field (discovered
	  with the help of Randy J. Ray's schema, posted to the
	  xmlschema-dev maling list).

Fri Apr  8 13:22:01 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added "Particle correct 2" to parsing of model groups.
	  Added handling substitution groups inside <choice> and <sequence>;
	  for <all> this is not supported yet. Changed circular checks for
	  model groups definitions. "memberTypes" are processed at different
	  levels now: component resolution first, construction later; this
	  goes hand in hand with a global change to handle component
	  resolution in a distinct phase. Fixed invalid default values for
	  elements to mark the schema as invalid; this just resulted in an
	  error report previously, but the schema was handled as valid.
	  Separated the assignment of the model groups to referencing
	  model group definition references (i.e. particles); this was
	  needed to perform the circularity check for model group definitions.
	  Added "Element Declaration Properties Correct (e-props-correct)"
	  constraints. Separated component resolution for simple/complex
	  types.
	* include/libxml/schemasInternals.h: Added a flag for substitution
	  group heads.	  

Wed Apr  6 23:14:03 CEST 2005 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.*: make install cleanup

Wed Apr  6 22:42:23 CEST 2005 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.mingw: fixed mingw compilation
	* testModule.c: removed mingw warnings

Wed Apr  6 21:59:11 CEST 2005 Igor Zlatkovic <igor@zlatkovic.com>

	* .cvsignore: added Eclipse project files to ignore list

Wed Apr  6 16:08:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed the bug in lang() as raised by Elliotte Rusty Harold
	* result/XPath/tests/langsimple test/XPath/tests/langsimple
	  test/XPath/docs/lang: added a regression test

Tue Apr  5 23:48:35 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied fix from Rob Richards to compile on Windows.

Tue Apr  5 17:02:58 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added "Type Derivation OK (Complex)" constraints
	  and anchored them in the "Element Locally Valid (Element)"
	  constraints. This restricts the type substitution via "xsi:type".

Tue Apr  5 13:10:06 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: patch from Matthew Burgess to improve some schemas
	  facets validation messages.

Sat Apr  2 12:48:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/* configure.in NEWS: preparing release 2.6.19, updated docs and
	  rebuilding.

Sat Apr  2 13:27:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am: integrated fixup-tests.py

Fri Apr  1 19:14:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixed a lack of comment and missing test for
	  a pointer in the API.

Fri Apr  1 17:54:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/fixup-tests.py: A tiny script to fixup some of the schema
	  files used for the tests.

Fri Apr  1 17:33:50 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h
	  result/schemas/src-element2-*.err result/schemas/element-*.err:
	  Committing again, since the CVS server aborted.

Fri Apr  1 15:29:27 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Corrected 'length' facet validation for
	  QNames and notations. Corrected xmlSchemaGetCanonValue: some
	  data types did not return a value if already in normalized
	  form.
	* xmlschemas.c include/libxml/schemasInternals.h:
	  Eliminated creation of structs for <restriction>, <extension>,
	  <simpleContent>, <complexContent>, <list> and <union>: the
	  information is now set directly on the corresponding simple/
	  complex type. Added some more complex type constraints.
	  Added facet derivation constraints. Introduced "particle"
	  components, which seem to be really needed if applying
	  constraints. Corrected/change some of the parsing functions.
	  This is all a bit scary, since a significant change to the code.
	* result/schemas/src-element2-*.err result/schemas/element-*.err:
	  Adapted regression test results.

Fri Apr  1 16:07:59 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/apibuild.py doc/elfgcchack.xsl: revamped the elfgcchack.h 
	  format to cope with gcc4 change of aliasing allowed scopes, had
	  to add extra 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 occurred during bubbling
	  of IDC nodes (bug #170779 and #170778, reported by GUY Fabrice):
	  a variable was missed to be reset in a loop. Deactivated bubbling,
	  if not referenced by a keyref.

Sun Mar 20 11:13:02 PST 2005 Aleksey Sanin <aleksey@aleksey.com>
	
	* c14n.c include/libxml/xmlerror.h: special case "DAV:" namespace
	in c14n relative namespaces check and add structured error messages
	to c14n code

Thu Mar 17 12:55:23 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed inheritance of "mixed" content type for
	  short-hand restrictions of "anyType" (reported by Guy Fabrice
	  to the mailing list). Added the namespace conversion (chameleon
	  includes) for the base type reference of <restriction> and
	  <extension>.
	* test/schemas/bug152470_1.xsd: Adapted due to the above change
	  of "mixed" inheritance.

Thu Mar 17 11:03:59 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed a = -> == error pointed by GUY Fabrice

Wed Mar 16 22:53:53 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more debug messages from Matthew Burgess
	* xmlschemastypes.c: xmlSchemaValidateLengthFacet API missing check.

Wed Mar 16 17:37:04 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Aaaannnd putting back the previous changes done
	  by Daniel, which I overwrote with the previous commit.

Wed Mar 16 17:20:25 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Hopefully finished validation against facets to use the normalized
	  value of both, the facets and instance values. Added 
	  xmlSchemaValidateLengthFacetWhtsp(), xmlSchemaValidateFacetWhtsp()
	  and xmlSchemaGetValType() to the schema API.

Wed Mar 16 13:55:31 CET 2005 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: do not package .la files
	* xmllint.c: applied patch from Gerry Murphy for xmllint return code
	* xmlschemastypes.c: fixed a couple of missing tests of parameters
	  at public API entry points.

Tue Mar 15 23:31:14 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlschemastypes.c: a couple of more changes to various
	  decimal-handling routines.  Fixes python some problems
	  turned up by the python tests.
	* Makefile.am: change SchemasPythonTests message to warn
	  that there are 10 'expected' errors (rather than 6) since
	  we now reject a '+' sign on an unsigned.

Tue Mar 15 15:43:27 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c xmlschemastypes.h: In preparation to use
	  normalized values of facets during validation: changed the
	  arguments of some string comparison functions; added a static
	  xmlSchemaValidateFacetInternal() with more arguments to be
	  more flexible. Prepared XML_SCHEMA_FACET_ENUMERATION validation
	  to use the comparison functions. Fixed some assignments in
	  xmlSchemaValAtomicType(): total digit count, lo, mi, hi.

Sun Mar 13 19:32:03 CET 2005 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in testapi.c doc/*: preparing release of 2.6.18
	  updated docs and rebuilt
	* libxml.spec.in: reactivated gcc profiling for gcc >= 4.0.0

Sat Mar 12 19:50:22 CET 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: removed a static buffer in xmlByteConsumed(),
	  as pointed by Ben Maurer, fixes #170086
	* xmlschemas.c: remove a potentially uninitialized pointer warning

Fri Mar 11 23:53:13 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlschemastypes.c: enhanced the parsing of XML_SCHEMAS_DECIMAL
	  and much of the routine xmlSchemaCompareDecimals.  The
	  changes were necessary to fix a problem reported on the
	  mailing list by John Hockaday.

Fri Mar 11 13:22:52 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: The schema parser will stop if components could
	  not be resolved. This is not conforming to the spec but for now
	  will avoid internal errors during type fixup and content model
	  creation. Restructured inclusion/import of schemata: this avoids
	  duplicate, self and circular inclusion. Chameleon includes are
	  still workarounded. Added restriction to disallow references to
	  non-imported namespaces. Corrected parsing of <group>.
	* result/schemas/bug167754_0_0*: Added a missing test result.

Thu Mar 10 16:02:17 CET 2005 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/encoding.html: Enriched encoding.html with more
	  link and foreword warning to avoid problem with ignorant
	  programmers, c.f #169721

Thu Mar 10 15:01:34 CET 2005 Daniel Veillard <daniel@veillard.com>

	* python/tests/Makefile.am python/tests/readernext.py: added
	  a regression test from Rob Richards for the previous bug

Thu Mar 10 13:22:36 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied fix for xmlTextReaderNext() bug from
	  Rob Richards

Thu Mar 10 11:35:57 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c: second patch from Rick Jones, portability fix for
	  HP-UX
	* doc/examples/xpath1.c doc/examples/xpath2.c: first fix from Rick Jones
	  to avoid warnings.

Thu Mar 10 10:20:23 CET 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/hash.h libxml.h libxml.spec.in: some gcc4 portability
	  patches, including a serious aliasing bug exposed in s390 
	  when trying to convert data pointer to code pointer.

Mon Mar  7 18:34:00 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Tiny restructuring of the validation start-up
	  functions. Added cleanup of the validation context at the
	  end of validation. This takes care of the validation context
	  being reused.

Mon Mar  7 12:12:01 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Tiny changes in the comparison functions
	  I forgot to commit last time.

Fri Mar  4 22:51:42 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added IDC validation of anySimpleType attribute
	  values; anyway the IDC key comparison is restricted to
	  anySimpleType <--> string based types. For other types we
	  would possibly need the canonical lexical representation of
	  them; this sounds not performant, since we would need to
	  build such a representation each time we want to compare against
	  anySimpleType. TODO: think about buffering the canonical values
	  somewhere. Fixed error reports for default attributes to work
	  without a node being specified. This all and the enabling of IDC
	  validation fixes bug #165346 (reported by Benoit Gr?goire - could
	  not read his last name correctly from bugzilla).

Fri Mar  4 18:57:44 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Enabled IDC parsing and validation.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h: 
	  Added xmlSchemaCopyValue to the API; this was done due to
	  validation of default attributes against IDCs: since IDC keys
	  consume the precomputed value, one needs a copy.
	* pattern.c: Enabled IDC support; this is currently done
	  via calling xmlPatterncompile with a flag arg of 1.

Wed Mar  2 11:45:18 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/examples/Makefile.am python/tests/Makefile.am
	  xstc/Makefile.am: try to fix a problem with valgrind.
	* python/generator.py python/libxml.c python/tests/Makefile.am
	  python/tests/tstmem.py: applied memory leak fix from Brent Hendricks
	  c.f. bug #165349

Mon Feb 28 11:18:24 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Changed xmlSearchNsByHref to call xmlNsInScope with
	  the prefix instead of the namespace name.
	* test/schemas/annot-err_0.xsd test/schemas/element-err_0.xsd:
	  Adapted invalid values of the "id" attribute, since they are
	  validated now.

Fri Feb 25 08:31:16 CET 2005 Daniel Veillard <daniel@veillard.com>

	* threads.c: new version with fixes from Rob Richards

Thu Feb 24 16:37:51 CET 2005 Daniel Veillard <daniel@veillard.com>

	* threads.c: applied patch from Rich Salz for multithreading on
	  Windows.

Wed Feb 23 15:04:46 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied a patch from Rob Richards fixing a couple
	  of bugs in the writer

Mon Feb 21 21:51:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlsave.c: fixed problem when XMLLINT_INDENT was empty (bug 168033).
	* xpath.c: fixed compilation warning, no change to logic.
	* xmlschemastypes.c: fixed compilation warning, no change to logic.

Mon Feb 21 14:48:27 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Rob Richards to fix a problem with
	  xmlTextWriterStartAttributeNS

Mon Feb 21 11:41:41 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xpath.c: fixed remaining known bugs in the XPath streaming,
	  and switched XPath to use it by default when possible

Sat Feb 19 19:25:14 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: a bit of cleanup
	* elfgcchack.h testapi.c doc/*: rebuilt the API the tests and
	  the documentation as a result.

Fri Feb 18 20:34:03 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: applied patch from
	  Aron Stansvik to add xmlTextReaderByteConsumed()
	* testReader.c: added a test option
	* xmlschemastypes.c: fix a lack of pointer checking in APIs

Fri Feb 18 12:41:10 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug167754_0*: Added the regression test of Frans
	  Englich for bug #167754.

Fri Feb 18 12:31:49 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Started support for IDC resolution to default
	  attributes. If building the content model for <all>: ensured
	  to put element declarations and not the particles into the
	  content model automaton (this was bug #167754, reported by
	  Frans Englich).

Thu Feb 17 22:31:58 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c pattern.h: Some experimental addition for parsing
	  of expressions and streamable validation.
	  Added xmlStreamPushAttr to the API.

Thu Feb 17 19:57:35 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added validation for the attribute "id" in the
	  schemata; doing this needed error report fixes for notations,
	  facets and group. Changed NOTATION validation to work with the
	  declared NOTATIONs in the schema; this does have no impact on
	  the validation via the relaxng module.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Added xmlSchemaNewNOTATIONValue to the API to be able to do
	  the NOTATION validation described above.
	* test/schemas/element-err_0.xsd test/schemas/annot-err_0.xsd:
	  Fixed the values of the "id" attributes, which were not validated
	  previously.  

Thu Feb 17 12:03:46 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed comparison for default/fixed attribute
	  values, if the type was 'xsd:string'. Changed the comparison
	  for IDCs to use the whitespace aware comparison function.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Added xmlSchemaGetCanonValue, xmlSchemaNewStringValue and
	  xmlSchemaCompareValuesWhtsp to the API. Added functions
	  to compare strings with whitespace combinations of "preserve",
	  "replace" and "collapse".

Wed Feb 16 13:24:35 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Further work on IDCs, especially evaluation for
	  attribute nodes.

Wed Feb 16 01:19:27 CET 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fix the comment to describe the real return values
	* pattern.c xpath.c include/libxml/pattern.h: lot of work on
	  the patterns, pluggin in the XPath default evaluation, but
	  disabled right now because it's not yet good enough for XSLT.
	  pattern.h streaming API are likely to be changed to handle
	  relative and absolute paths in the same expression.

Tue Feb 15 15:33:32 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added IDC evaluation for attribute nodes.
	  Made 'nil'ed elements work. Added a specific error message
	  for 'strict' attribute wildcards.
	* include/libxml/xmlerror.h: Added an error code for
	  wildcards.
	* result/schemas/anyAttr-processContents-err1_0_0.err: Adapted.  

Sun Feb 13 16:15:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	This change started out as a simple desire to speed up the
	execution time of testapi.c, which was being delayed by
	nameserver requests for non-existent URL's.  From there it
	just sort of grew, and grew....
	* nanohttp.c, nanoftp.c: changed the processing of URL's
	  to use the uri.c routines instead of custom code.
	* include/libxml/xmlerror.h: added code XML_FTP_URL_SYNTAX
	* uri.c: added accepting ipV6 addresses, in accordance with
	  RFC's 2732 and 2373 (TODO: allow ipV4 within ipV6)
	* gentest.py, testapi.c: fixed a few problems with the
	  testing of the nanoftp and nanohttp routines.
	* include/libxml/xmlversion.h: minor change to fix a
	  warning on the docs generation
	* regenerated the docs

Sat Feb 12 09:07:11 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed xmlXIncludeParseFile to prevent
	  overwriting XML_COMPLETE_ATTRS when setting pctxt->loadsubset
	  (bug 166199)
	* Makefile.am, python/tests/Makefile.am, xstc/Makefile.am: added
	  code to add $(top_builddir)/.libs to LD_LIBRARY_PATH whenever
	  PYTHONPATH is set, to assure new libxml2 routines are used.

Fri Feb 11 22:20:41 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem when no initial "chunk" was
	  given to xmlCreatePushParser (bug 162613)

Fri Feb 11 18:37:22 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* dict.c: fixed compilation warning
	* parser.c: changed xmlWarningMsg so ctxt->errNo is not set
	* xmllint.c: changed to return non-zero status if error
	  on xinclude processing
	* xmlsave.c: minor deletion of a redundant condition statement
	
Wed Feb  9 17:47:40 CET 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch to xmlSetNsProp from Mike Hommey

Sun Feb  6 00:17:57 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmllint.c: fixed implementation for |
	* test/pattern/conj.* result/pattern/conj: added a specific regression
	  test

Sat Feb  5 18:36:56 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: first implementation for | support

Sat Feb  5 14:58:46 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: fixed the namespaces support
	* tree.c: fixed xmlGetNodePath when namespaces are used
	* result/pattern/multiple result/pattern/namespaces
	  test/pattern/multiple.* test/pattern/namespaces.*: added
	  more regression tests

Fri Feb  4 18:26:43 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed one internal function
	* doc/Makefile.am doc/wiki.xsl: applied patch from Joel Reed
	* testapi.c doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated

Fri Feb  4 00:25:43 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: use the walker to test the patterns instead of
	  the normal reader
	* pattern.c xmllint.c: bug fixes in the train including fixing the
	  stupid build break.

Tue Feb  1 18:15:52 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: more bug fixes for the XPath streaming code.

Mon Jan 31 17:59:24 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Integrated the streaming pattern from the
	  pattern module. Fixed some IDC code bugs. Changed
	  fallback for attribute declaration addition to work like for
	  element declarations.	

Mon Jan 31 01:27:22 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmllint.c: bugfixes around the streaming patterns

Sun Jan 30 23:35:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in result/pattern/simple 
	  test/pattern/simple.*: added first test for the patterns
	* pattern.c xmllint.c: a few fixes

Sun Jan 30 19:27:23 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c include/libxml/pattern.h xmllint.c: added a 
	  streaming pattern detector for a subset of XPath, should
	  help Kasimier for identity constraints
	* python/generator.py: applied Stéphane Bidoul patch to find
	  paths without breaking.

Fri Jan 28 18:53:40 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed an untested pointer dereference and a & vs &&

Fri Jan 28 18:37:18 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: implementation of xmlTextReaderReadString by
	  Bjorn Reese

Fri Jan 28 16:51:47 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Corrected an 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 helpful for a future streamable validation.
	* include/libxml/xmlerror.h: Added an error code for
	  identity-constraints.

Wed Jan 26 01:03:37 CET 2005 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: had to fix generation and rebuild.
	* valid.c: the testapi found a bug in the last code of course !

Wed Jan 26 00:43:05 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am testapi.c doc/Makefile.am: fixing the way testapi.c
	  is generated, fixes bug #161386
	* dict.c: fix a comment typo
	* elfgcchack.h doc/*: regenerated

Tue Jan 25 22:39:33 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: found and fixed 2 problems in the internal subset scanning
	  code affecting the push parser (and the reader), fixes #165126
	* test/intsubset2.xml result//intsubset2.xml*: added the test case
	  to the regression tests.

Tue Jan 25 01:20:11 CET 2005 Daniel Veillard <daniel@veillard.com>

	* testdso.c xmlregexp.c: warning patches from Peter Breitenlohner
	* include/libxml/valid.h valid.c parser.c: serious DTD parsing
	  speedups, start to deprecate 3 ElementDef related entry point
	  and replace them with better ones.

Mon Jan 24 00:47:41 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more hash dictionary interning changes

Sun Jan 23 23:54:39 CET 2005 Daniel Veillard <daniel@veillard.com>

	* hash.c include/libxml/hash.h: added xmlHashCreateDict where
	  the hash reuses the dictionary for internal strings
	* entities.c valid.c parser.c: reuse that new API, leads to a decent
	  speedup when parsing for example DocBook documents.

Sun Jan 23 21:14:20 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: small speedup in skipping blanks characters
	* entities.c: interning the entities strings 

Sun Jan 23 18:35:00 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: boosting common commnent parsing code, it was really
	  slow.
	* test/comment[3-5].xml result//comment[3-5].xml*: added sprecific
	  regression tests

Sun Jan 23 01:00:09 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: small optimization back.

Sat Jan 22 00:40:31 CET 2005 Daniel Veillard <daniel@veillard.com>

	* dict.c parser.c include/libxml/dict.h: a single lock version
	  mostly avoid the cost penalty of the lock in case of low 
	  parallelism, so applying that version instead.

Fri Jan 21 17:54:06 CET 2005 Daniel Veillard <daniel@veillard.com>

	* dict.c: patch from Gary Coady to fix a race in dict reference
	  counting in multithreaded apps.

Fri Jan 21 16:08:21 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #164556 where non-fatal errors stopped
	  push parsing and xmlreader.
	* Makefile.am: fixup
	* test/errors/webdav.xml result/errors/webdav*: adding regression
	  test for this problem.

Wed Jan 19 17:24:34 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Corrected targetNamespace in
	  xmlSchemaElementDump. Cosmetic changes to the dump output.	

Sun Jan 16 21:00:53 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release of 2.6.17,
	  updated and rebuilt the docs

Sun Jan 16 19:58:36 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: better fix for #151694 not killing c14n regression tests
	* xmlschemastypes.c: fixing bug #157653

Sun Jan 16 19:01:06 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #151694, line should always be set in the
	  elements.

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

	* xmlschemastypes.c: trying to fix at least the message from
	  bug #158628
	* include/libxml/xmlsave.h xmlsave.c: added first xmlsave option
	  for format, c.f. bug #159997

Sat Jan 15 18:44:30 CET 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: make __str__ call serialize() on nodes, c.f. 
	  bug #157872

Sat Jan 15 18:18:07 CET 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied patch from Dan McNichol for compilation on AIX

Sat Jan 15 13:35:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #157633 in relaxng choice optimization
	* result/relaxng/choice0* test/relaxng/choice0*: added regression
	  tests about it.
	* doc/*: rebuilt
	* testdso.c: removed a warning due to a missing void in signature.

Thu Jan 13 17:42:55 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/schemasInternals.h xmlschemas.c: 
	  Exposed targetNamespace for simple/complex types, model groups,
	  attribute groups and notations (reported by Michael Hewarth 
	  to the mailing list). Added targetNamespace to xmlSchemaType, 
	  xmlSchemaAttributeGroup and xmlSchemaNotation.
	  Tiny cosmetic change to the content model error report output.
	* result//all_*.err result//any3_0_0.err result//choice_*.err 
	  result//list0_0_1.err result//list0_1_1.err: Adapted output 
	  of regression tests.

Thu Jan 13 13:20:51 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Put the fix of Daniel (from Tue Jan 11 14:41:47 CET)
	  back in, since I missed to update xmlschemas.c before doing
	  the previous commit.
	
Thu Jan 13 12:59:25 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Integrated xmlRegExecErrInfo and xmlRegExecNextValues
	  from xmlregexp.c to report expected elements on content model errors.
	* all_*.err any3_0_0.err choice_*.err list0_0_1.err list0_1_1.err:
	  Adapted output of regression tests.

Thu Jan 13 12:24:09 CET 2005 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in xmlmodule.c: trying to work around
	  the compilation problem on HP-UX

Wed Jan 12 22:03:33 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: fixed the fixed size array structure problem reported by
	  Patrick Streule

Wed Jan 12 15:15:02 CET 2005 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h testapi.c doc/libxml2-api.xml doc/*: regenerated
	  the API description, rebuilt, improved navigation in documentation
	  a bit.

Wed Jan 12 14:17:14 CET 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlregexp.h xmlregexp.c: extended xmlRegExecErrInfo()
	  and xmlRegExecNextValues() to return error transition strings too,
	  and sink state detection and handling.

Tue Jan 11 14:41:47 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed bug #163641 when the value passed for
	  an atomic list type is NULL.

Tue Jan 11 10:14:33 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* Makefile.am configure.in: fixed dependency on python 2.3,
	  also small improvement for cygwin (bug 163273)

Sun Jan  9 18:46:32 CET 2005 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: William noticed I forgot to add special
	  support for xmlmodules.c define
	* xmlregexp.c include/libxml/xmlregexp.h: added terminal to
	  xmlRegExecErrInfo() API, adding new xmlRegExecNextValues()
	  entry point and refactored to use both code.

Mon Jan 10 01:02:41 HKT 2006 William Brack <wbrack@mmm.com.hk>

	* doc/xml.html, doc/FAQ.html: added an FAQ under Developer for
	  setting up a "private" library (after some list posts about
	  people having trouble doing it)

Sat Jan  8 23:04:10 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing behaviour for xmlRegExecErrInfo in case of
	  rollback

Fri Jan  7 14:54:51 CET 2005 Daniel Veillard <daniel@veillard.com>

	* TODO: small update
	* xmlregexp.c: trying to add an API to get useful error informations
	  back from a failing regexp context.

Thu Jan  6 17:35:41 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with xmlXPathErr when error number
	  subscript was out of range (bug 163055)

Thu Jan  6 09:57:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed problem with xmlURIEscape when query part was
	  empty (actually fixed xmlURIEscapeStr to return an empty
	  string rather than NULL for empty string input) (bug 163079)
	  
Tue Jan  4 17:08:45 PST 2005 Aleksey Sanin <aleksey@aleksey.com>

	* parser.c, parserInternal.c: fixed "col" calculation for 
          struct _xmlParserInput (based on patch from Rob Richards) 
	* include/libxml/xmlerror.h, error.c: propagated error column
          number in the xmlError structure

Tue Jan  4 22:47:22 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed namespace bug in push mode reported by 
	  Rob Richards
	* test/ns6 result//ns6*: added it to the regression tests
	* xmlmodule.c testModule.c include/libxml/xmlmodule.h:
	  added an extra option argument to module opening and defined
	  a couple of flags to the API.

Tue Jan  4 21:16:05 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c include/libxml/xmlmodule.h: applied patch from
	  Bjorn Reese, plus some cleanups
	* elfgcchack.h doc/elfgcchack.xsl: fixed the stylesheet to 
	  add the new header
	* doc/* testapi.c: regenerated the API

Tue Jan  4 18:47:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: making DSO support an option
	* xmlmodule.c xmlreader.c include/libxml/xmlmodule.h: code
	  and documentation cleanups
	* elfgcchack.h testapi.c doc/*: regenerated the docs and
	  checks for new module
	* test/valid/REC-xml-19980210.xml: fix a small change introduced
	  previously

Tue Jan  4 16:07:52 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am config.h.in configure.in error.c libxml-2.0.pc.in
	  testModule.c testdso.c xml2-config.in xmllint.c xmlmodule.c
	  include/libxml/Makefile.am include/libxml/xmlerror.h
	  include/libxml/xmlmodule.h include/libxml/xmlversion.h.in 
	  include/libxml/xmlwin32version.h.in: applied DSO support
	  patch 2 from Joel Reed

Tue Jan  4 15:30:15 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied patch from Marcin Konicki for BeOS

Mon Jan  3 13:57:21 PST 2005 Aleksey Sanin <aleksey@aleksey.com>

	* parser.c: added GetLineNumber and GetColumnNumber functions for xmlReader

Sun Jan  2 17:51:18 HKT 2005 William Brack <wbrack@mmm.com.hk>

	Re-examined the problems of configuring a "minimal" library.
	Synchronized the header files with the library code in order
	to assure that all the various conditionals (LIBXML_xxxx_ENABLED)
	were the same in both.  Modified the API database content to more
	accurately reflect the conditionals.  Enhanced the generation
	of that database.  Although there was no substantial change to
	any of the library code's logic, a large number of files were
	modified to achieve the above, and the configuration script
	was enhanced to do some automatic enabling of features (e.g.
	--with-xinclude forces --with-xpath).  Additionally, all the format
	errors discovered by apibuild.py were corrected.
	* configure.in: enhanced cross-checking of options
	* doc/apibuild.py, doc/elfgcchack.xsl, doc/libxml2-refs.xml,
	  doc/libxml2-api.xml, gentest.py: changed the usage of the
	  <cond> element in module descriptions
	* elfgcchack.h, testapi.c: regenerated with proper conditionals
	* HTMLparser.c, SAX.c, globals.c, tree.c, xmlschemas.c, xpath.c,
	  testSAX.c: cleaned up conditionals
	* include/libxml/[SAX.h, SAX2.h, debugXML.h, encoding.h, entities.h,
	  hash.h, parser.h, parserInternals.h, schemasInternals.h, tree.h,
	  valid.h, xlink.h, xmlIO.h, xmlautomata.h, xmlreader.h, xpath.h]:
	  synchronized the conditionals with the corresponding module code
	* doc/examples/tree2.c, doc/examples/xpath1.c, doc/examples/xpath2.c:
	  added additional conditions required for compilation
	* doc/*.html, doc/html/*.html: rebuilt the docs
	
Sat Dec 25 18:10:02 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parserInternals.c: fixed to skip (if necessary) the BOM for
	  encoding 'utf-16'.  Completes the fix for bug #152286.
	* tree.c, parser.c: minor warning cleanup, no change to logic
	
Fri Dec 24 16:31:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: added most required entires to
	  foreign encoding table, plus some additional logic to
	  assure only the 1st param uses the 't#' format.  Fixes
	  bug #152286, but may still have some other UTF-16 problems.

Thu Dec 23 23:44:08 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* Makefile.am, gentest.py: enhanced for enabling build in
	  a different directory.  Added (optional) param to gentest.py
	  to specify the source directory (bug #155468)
	* doc/Makefile.am: changed destination of NEWS from (top_srcdir)
	  to (top_builddir) (bug #155468)
	* python/Makefile.am, python/generator.py: enhanced for enabling
	  build in a different directory(bug #155468).  Added (optional)
	  param to generator.py to specify the source directory.  Added
	  a new table of functions which have possible "foreign" encodings
	  (e.g. UTF16), and code to use python 't' format instead of
	  'z' format (mostly solving bug #152286, but still need to
	  populate the table).
	  
Tue Dec 21 08:10:44 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/site.xsl, doc/xml.html, plus rebuilt all the html pages
	Change reference to new site for Solaris binaries, fixing bug
	160598


Mon Dec 20 08:02:57 PST 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: reset input->base within xmlStopParser
	* xmlstring.c: removed call to xmlUTF8Strlen from within
	  xmlUTF8Strpos (Bill Moseley pointed out it was not
	  useful)

Fri Dec 17 16:03:41 PST 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: changed xmlErrValidWarning to use ctxt->warning
	  instead of ctxt->error for its reports (bug #160662)

Fri Dec 17 14:52:17 PST 2004 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: modified to allow the ns and nsDefs
	  accessors to return None instead of error when no namespace
	  is present (bug #)

Fri Dec 17 11:40:21 PST 2004 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: changed maintainer-clean dependency with
	  suggestion from Crispin Flowerday (bug #157634)
	* debugXML.c: fixed crash when ATTRIBUTE or DOCUMENT nodes
	  were specified with debugDumpNode (bug #160621)

Fri Dec 10 11:24:41 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed ID deallocation problem based on patch from
	  Steve Shepard fixes bug #160893
	* xmlmemory.c: improving comment.
	* testapi.c: new test for xmlDictExists() is generated.

Wed Dec  1 22:35:37 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* dict.c, xpath.c, include/libxml/hash.h: fixed up some gcc warnings,
	  no change to logic.  New macro XML_CAST_FPTR to circumvent gcc
	  warnings on function pointer <-> object pointer (a hack).

Mon Nov 29 14:07:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a memory leak on errors in some circumstances #159812

Fri Nov 26 23:20:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: added a check within xmlOutputBufferWriteEscape to prevent
	  a dead loop on bad data (bug 159550)

Fri Nov 26 13:09:04 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed strict/lax element wildcards: the children
	  of elements for which a declaration existed were still processed
	  by the wildcard mechanism (reported by philippe ventrillon to the
	  mailing list).
	  Changed the import and include machanism to share dictionaries.

Fri Nov 26 11:44:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c: make sure xmlCtxtReadFile and htmlCtxtReadFile
	  go through the catalog resolution.
	* gentest.py testapi.c: fix a side effect wrning of the change

Wed Nov 24 13:41:52 CET 2004 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h: added xmlDictExists() to the 
	  dictionary interface.
	* xmlreader.c: applying xmlTextReaderHasAttributes fix for namespaces
	  from Rob Richards

Wed Nov 17 13:54:37 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: tiny enhancement for content model error reports
	  (#157190, #143948). Removed abbreviations: CT, ST and WC 
	  (#157190, reported by Frans  Englich).
	  Initial: no report of local components.
	* result/schemas/all* result/schemas/any3_0_0.err
	  result/schemas/choice*
	  result/schemas/cos-st-restricts-1-2-err_0_0.err
	  result/schemas/derivation-ok-extension-err_0_0.err
	  result/schemas/derivation-ok-extension_0_0.err
	  result/schemas/derivation-ok-restriction-2-1-1_0_0.err
	  result/schemas/derivation-ok-restriction-4-1-err_0_0.err 
	  result/schemas/deter0_0_0.err result/schemas/extension1_0_2.err
	  result/schemas/facet-unionST-err1_0_0.err
	  result/schemas/hexbinary_0_1.err
	  result/schemas/list* result/schemas/restriction-attr1_0_0.err
	  result/schemas/vdv-first4_0_1.err result/schemas/vdv-first4_0_2.err:
	  Adapted output.

Mon Nov 15 13:04:28 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Moved execution of xmlSchemaCheckDefaults to
	  xmlSchemaTypeFixup; this ensures facets of inherited types to be
	  checked prior to facets of derived types - which caused a seg
	  fault otherwise (bug #158216, reported by Frans Englich).

Sun Nov 14 22:23:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* gentest.py, testapi.c: further enhancement, now all
	  compilation warnings have been fixed.
	* xmlschemastypes.c: added NULL check for one function

Fri Nov 12 23:58:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: trivial change (changed CHECK_CONTEXT to CHECK_CTXT
	  on a couple of lines)
	* gentest.py, testapi.c: enhanced to reduce compilation warnings

Fri Nov 12 16:12:48 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Un-commented a TODO in xmlSchemaParseElement.

Fri Nov 12 14:55:36 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Correct symbol space for 'all' and 'choice'.
	* xmlschemastypes.c include/xmlschemastypes.h: Added 'replace' 
	  normalization for 'normalizedString'.  
	  Added xmlSchemaWhiteSpaceReplace to the API.

Thu Nov 11 21:43:02 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: forgot a $(srcdir)
	* encoding.c: stupid error wrong name #157976

Wed Nov 10 15:35:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc/*: preparing release of libxml2-2.6.16

Wed Nov 10 12:55:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: Applied patch from Brent
	  Hendricks adding support for late DTD validation.
	* python/tests/Makefile.am python/tests/dtdvalid.py
	  python/tests/test.dtd: integrated the provided regression test

Tue nov  9 19:24:31 CET 2004 Dodji Seketeli <dodji@seketeli.org>

	* configure.in: detect when struct sockaddr_storage
	  has the __ss_family member instead of ss_family and
	  behave accordingly. We now can use ipv6 on aix.

Tue Nov  9 17:15:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am gentest.py testapi.c: integrated in "make tests"
	  added -q option, and more conditional features fixes
	* catalog.c debugXML.c parser.c testThreads.c xmllint.c
	  xmlschemastypes.c xmlwriter.cinclude/libxml/catalog.h
	  include/libxml/debugXML.h: various compilation and conditional
	  cleanups.
	* doc/*: regenerated

Tue Nov  9 15:59:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: better handling of conditional features
	* HTMLparser.c SAX2.c parserInternals.c xmlwriter.c: more testing
	  on parser contexts closed leaks, error messages

Tue Nov  9 10:21:37 GMT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem concerning XPath context corruption
	  during function argument evaluation (bug 157652)
	  
Mon Nov  8 18:54:52 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: more types.
	* parserInternals.c xpath.c: more fixes

Mon Nov  8 18:16:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: better parser options coverage
	* SAX2.c xpath.c: more cleanups.

Tue Nov  9 01:50:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: trying to fix some optional support brokenness

Mon Nov  8 17:25:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* debugXML.c parser.c xmlregexp.c xpath.c: more fixes

Mon Nov  8 15:02:39 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* SAX2.c parser.c parserInternals.c: more fixes

Mon Nov  8 12:55:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c testapi.c xmlIO.c xmlstring.c: more fixes.

Mon Nov  8 11:24:57 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more types, more coverage
	* parser.c parserInternals.c relaxng.c valid.c xmlIO.c
	  xmlschemastypes.c: more problems fixed
	  
Mon Nov  8 10:24:28 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* gentest.py: fixed test file corruption problem

Sun Nov  7 13:18:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: fixed typos and avoid Catalogs verbosity

Sat Nov  6 23:25:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: augmented the number of types

Sat Nov  6 20:24:07 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c xmlreader.c xmlwriter.c: a number of new
	  bug fixes and documentation updates.

Sat Nov  6 15:50:11 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: augmented type autogeneration for enums
	* xpath.c include/libxml/xpath.h: removed direct error reporting.

Sat Nov  6 14:27:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fixed a regression in iconv support.

Fri Nov  5 18:19:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: autogenerate a minimal NULL value sequence
	  for unknown pointer types
	* HTMLparser.c SAX2.c chvalid.c encoding.c entities.c parser.c
	  parserInternals.c relaxng.c valid.c xmlIO.c xmlreader.c 
	  xmlsave.c xmlschemas.c xmlschemastypes.c xmlstring.c xpath.c
	  xpointer.c: This uncovered an impressive amount of entry points
	  not checking for NULL pointers when they ought to, closing all
	  the open gaps.

Fri Nov  5 16:26:28 UTC 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: fixed problem with NULL entry (bug 157407)
	* xpath.c: fixed a couple of warnings (no change to logic)

Fri Nov  5 15:30:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* xmlunicode.c: one fix

Fri Nov  5 23:15:51 CET 2004 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed a compilation problem on a recent change

Fri Nov  5 12:50:09 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* nanoftp.c tree.c: more fixes

Fri Nov  5 11:02:28 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: fixed the way the generator works,
	  extended the testing, especially with more real trees and nodes.
	* HTMLtree.c tree.c valid.c xinclude.c xmlIO.c xmlsave.c: a bunch
	  of real problems found and fixed.
	* entities.c: fix error reporting to go through the new handlers

Thu Nov  4 18:44:56 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: dohh ... stupid change killing xmlParseDoc()

Thu Nov  4 18:32:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: changing the way the .c is generated,
	  extending the tests coverage
	* include/libxml/nanoftp.h nanoftp.c elfgcchack.h doc/*: fixing some
	  function signatures, regenerating stuff
	* SAX2.c parser.c xmlIO.c: another set of bug fixes and API hardening

Thu Nov  4 13:32:19 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: extending the tests coverage

Thu Nov  4 11:52:28 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: gentest.py was missing from the EXTRA_DIST

Thu Nov  4 11:48:47 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: extending the tests coverage
	* HTMLtree.c tree.c xmlsave.c xpointer.c: more fixes and cleanups

Thu Nov  4 00:25:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* nanoftp.c xmlIO.c: more fixes and hardening
	
Wed Nov  3 20:16:24 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* valid.c: bunch of cleanups and 2 leaks removed 

Wed Nov  3 18:06:44 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* list.c tree.c: more fixes and hardening

Wed Nov  3 15:19:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* relaxng.c include/libxml/relaxng.h: adding a type init interface
	* include/libxml/xmlerror.h parser.c xmlreader.c xmlwriter.c: more
	  cleanups and bug fixes raised by the regression tests

Wed Nov  3 12:49:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* xmlwriter.c list.c: more hardeing of APIs
	* doc/apibuild.py: skip testapi.c when scanning the C files.

Tue Nov  2 23:09:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more testing and coverage
	* elfgcchack.h xmlstring.c include/libxml/xmlstring.h: more cleanups
	* doc/*: rebuilt

Tue Nov  2 19:44:32 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more developments on the API testing
	* HTMLparser.c tree.c: more cleanups
	* doc/*: rebuilt

Tue Nov  2 15:49:34 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c include/libxml/xmlmemory.h: adding xmlMemBlocks()
	* Makefile.am gentest.py testapi.c: work on generator of an
	  automatic API regression test tool.
	* SAX2.c nanoftp.c parser.c parserInternals.c tree.c xmlIO.c
	  xmlstring.c: various API hardeing changes as a result of running
	  the first set of automatic API regression tests.
	* test/slashdot16.xml: apparently missing from CVS, commited it

Mon Nov  1 15:54:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed an UTF-8 parsing bug reported by Markus Bertheau
	  on #fedora-devel

Sun Oct 31 22:03:38 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug reported by Petr Pajas on the list and
	  affecting XML::Libxml

Sun Oct 31 16:33:54 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c doc/examples/testWriter.c: Fixed bug #153937, making
	  sure the conversion functions return the number of byte written.
	  Had to fix one of the examples.

Fri Oct 29 14:16:56 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.xml: indicate - means stdin closing #156626

Fri Oct 29 14:03:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: register xmlSchemaSetValidErrors, patch from
	  Brent Hendricks in the mailing-list
	* include/libxml/valid.h HTMLparser.c SAX2.c valid.c
	  parserInternals.c: fix #156626 and more generally how to find out
	  if a validation contect is part of a parsing context or not. This
	  can probably be improved to make 100% sure that vctxt->userData
	  is the parser context too. It's a bit hairy because we can't 
	  change the xmlValidCtxt structure without breaking the ABI since
	  this change xmlParserCtxt information indexes.

Wed Oct 27 19:26:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* ChangeLog NEWS configure.in doc/*: preparing release 2.6.15
	* debugXML.c nanoftp.c xmlschemas.c xmlschemastypes.c: cleanups

Wed Oct 27 09:31:24 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed a stupid mistake in xmlBuildRelativeURI
	  (bug 156527)

Wed Oct 27 11:44:35 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: second part of the security fix for
	  xmlNanoFTPConnect() and xmlNanoHTTPConnectHost().

Tue Oct 26 23:57:02 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied fixes for a couple of potential security problems
	* tree.c valid.c xmllint.c: more fixes on the string interning checks

Tue Oct 26 18:09:59 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added checking for names
	  values and dictionaries generates a tons of errors
	* SAX2.ccatalog.c parser.c relaxng.c tree.c xinclude.c xmlwriter.c
	  include/libxml/tree.h: fixing the errors in the regression tests

Mon Oct 25 16:04:22 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: modified the handling of _private for entity
	  expansion (bug 155816)

Mon Oct 25 17:11:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the leak reported by Volker Roth on the list
	* test/ent10 result//ent10*: added a specific test for the problem

Sat Oct 23 11:07:41 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: unlinked the internal subset within xmlValidateDtd
	  (bug 141827)
	* configure.in: added -Wall to developer's flags
	* doc/examples/reader4.res: added to CVS

Fri Oct 22 16:36:50 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: added support for HTML PIs #156087
	* test/HTML/python.html result/HTML/python.html*: added specific tests

Fri Oct 22 15:20:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* threads.c: fixed nasty bug #156087

Fri Oct 22 21:04:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fixed a problem occurring only in x86_64 when
	  very large error messages are raised to the Python handlers.

Thu Oct 21 18:03:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed a memory bug
	* doc/examples/reader4.c doc/examples/*: added test from Graham Bennett
	  and regenerated the directory

Tue Oct 19 11:06:39 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlreader.h xmlreader.c: applied patch from
	  Graham Bennett adding 4 convenience functions to the reader API.

Fri Oct 15 11:22:48 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* debugXML.c: excluded a few nodes (with no content) from the
	  string check routine.

Fri Oct 15 10:48:30 EDT 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added UTF-8 string checking,
	  raise a problem, need debug

Wed Oct 13 02:17:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: applied patch from Thomas Fitzsimmons fixing
	  #155240 building outside the source tree. but make tests fails.

Mon Oct 11 16:26:51 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added namespace checking

Sat Oct  9 22:36:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: some framework preparation to add namespace checkings

Thu Oct  7 15:12:58 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h include/libxml/xmlerror.h:
	  adding the tree debug mode
	* parser.c relaxng.c tree.c xpath.c: fixing various problems reported
	  by the debug mode.
	* SAX2.c: another tree fix from Rob Richards

Wed Oct  6 10:50:03 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: small change to last fix, to get xml:base right

Wed Oct  6 09:33:51 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: added code to handle <group>, including dumping
	  to output (bug 151924).
	* xmlcatalog.c, xmlstring.c, parser.c: minor compiler warning 
	  cleanup (no change to logic)
	  
Mon Oct  4 16:09:07 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in debugXML.c include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: revamped the XML debugging
	  module and prepare for a new checking mode

Mon Oct  4 13:53:24 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Malcolm Tredinnick fixing bug #152426

Mon Oct  4 12:26:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/tests/outbuf.py: 
	  applied patch from Malcolm Tredinnick fixing bug #154294
	  related to saving to python file objects.

Sat Oct  2 21:08:51 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: changed xmlHasNsProp to properly handle a request for
	  the default namespace (bug 153557)

Sat Oct  2 18:18:27 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem with dictionary handling within
	  xmlParseInNodeContext (bug 153175)

Sat Oct  2 15:46:37 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* check-relaxng-test-suite.py, check-relaxng-test-suite2.py,
	  check-xinclude-test-suite.py, check-xml-test-suite.py,
	  check-xsddata-test-suite.py, doc/examples/index.py: changed
	  changed sys.path setting from 'append' to 'insert' (patch
	  supplied by Malcolm Tredinnick) (bug 153716)

Sat Oct  2 15:03:14 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* include/libxml/parserInternals.h: added two new macros
	  IS_ASCII_LETTER and IS_ASCII_DIGIT used with (html)
	  parsing and xpath for testing data not necessarily
	  unicode.
	* HTMLparser.c, xpath.c: changed use of IS_LETTER_CH and
	  IS_DIGIT_CH macros to ascii versions (bug 153936).
	  
Fri Oct  1 20:37:25 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* error.c: added some coding to attempt to display which file
	  contains an error when using XInclude (bug 152623)

Thu Sep 30 11:19:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: stupid cut'n paste bug in xmllint detection

Wed Sep 29 17:47:56 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: releasing 2.6.14, rebuilding the docs
	  
Wed Sep 29 15:00:11 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlerror.h include/libxml/xmlschemas.h
	  include/libxml/schemasInternals.h: Parsing of <complexContent>
	  - handle attribute 'mixed', catch illegal attributes.
	  Parsing of <complexType> - handle attributes 'abstract',
	  'final' and 'block', catch illegal attributes.
	  Validation of complex types - handle abstract types.
	  Added handling of default/fixed attributes and element values.
	  Per validation option attribute nodes/text nodes are created
	  on the instance.
	  Added the corresponding constraints for fixed/default.
	  Added xmlSchemaSetValidOptions, xmlSchemaGetValidOptions
	  to the external API.
	  Extended element declaration constraints.  
	  Got rid of perseverative creation of temporery validation/parser 
	  contexts.
	  Added handling of xsi:schemaLocation and
	  xsi:noNamespaceSchemaLocation.
	  Fixed xsi:type component resolution if using non-prefixed
	  QNames.
	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h:
	  Enabled namespace awareness of the content model if using the
	  model group "all".
	* test/schemas/bug152470_1.xsd: Removed an "abstract" attribute,
	  which broke the test.
	* xstc/xstc.py:  Workaround to 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 addressing issue

Thu Sep 23 15:14:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c relaxng.c xmlschemas.c: more memory related
	  code cleanups.

Thu Sep 23 01:04:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bunch of errors when realloc failed.

Wed Sep 22 23:56:05 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* threads.c uri.c: couple of memory fixes from Mark Vakoc reported
	  by Purify on Windows.

Mon Sep 20 22:01:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added --timing --copy timing for the copy
	* vms/build_libxml.com: applied patch from Craig Berry
	  to build with recent releases

Fri Sep 17 21:25:33 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c, include/libxml/nanohttp.h: added the routine
	  xmlNanoHTTPContentLength to the external API (bug151968).
	* parser.c: fixed unnecessary internal error message (bug152060);
	  also changed call to strncmp over to xmlStrncmp.
	* encoding.c: fixed compilation warning (bug152307).
	* tree.c: fixed segfault in xmlCopyPropList (bug152368); fixed
	  a couple of compilation warnings.
	* HTMLtree.c, debugXML.c, xmlmemory.c: fixed a few compilation
	  warnings; no change to logic.

Fri Sep 17 10:40:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed some extern before function code reported by
	  Kjartan Maraas on IRC
	* legacy.c: fixed compiling when configuring out the HTML parser
	* Makefile.am: added a declaration for CVS_EXTRA_DIST
	* HTMLparser.c: beginning of an attempt at cleaning up the construction
	  of the HTML parser data structures, current data generate a huge
	  amount of ELF relocations at loading time.

Fri Sep 17 10:36:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* ChangeLog: applied fix from Stepan Kasal to fix duplication
	  in the change log and cleanup of space/tabs issues.

Thu Sep 16 13:24:27 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h 
	  test/schemas/bug152470_1.* result/schemas/bug152470_1_1*: 
	  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 duplicate xmlParserErrors enum value - see bug #151738.

Fri Sep  3 10:08:13 PDT 2004 William Brack <wbrack@mmmm.com.hk>

	* xmlstring.c: modified comments on xmlGetUTF8Char in
	  response to bug 151760 (no change to logic)

Tue Aug 31 09:46:18 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlstring.c: fixed error reported on the list caused by
	  my last change

Tue Aug 31 15:41:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc/*: release of libxml2-2.6.13

Tue Aug 31 14:14:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fixing #151456, an encoding error could generate
	  a serialization loop.

Tue Aug 31 11:34:04 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: also produce a tar ball with just the sources
	* xmllint.c: added --path option and --load-trace options to
	  xmllint, RFE #147740 based on xsltproc versions
	* doc/xmllint.* doc/*: updated the man page and rebuilt

Tue Aug 31 10:37:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: "" is a valid hexbinary string dixit xmlschema-dev
	* result/schemas/hexbinary_0_1.err test/schemas/hexbinary_1.xml: 
	  update the test.
	* test/ns5 result//ns5*: added a test for the namespace bug fixed
	  in previous commit.
	* Makefile.am: added a message in the regression tests

Mon Aug 30 23:36:21 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c: fixed bug introduced during OOM fixup causing problems
	  with default namespace when a named prefix with the same href
	  was present (reported on the mailing list by Karl Eichwalder.
	* xmlstring.c: modified xmlCheckUTF8 with suggested code from
	  Julius Mittenzwei.
	* dict.c: added a typecast to try to avoid problem reported by
	  Pascal Rodes.

Mon Aug 30 12:45:46 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a bug in xmlSchemasCheckFacet, which did
	  not create a computed value on a facet and thus crashed during
	  validation of instances.
	  Expanded validity checks for min/maxOccurs attributes.
	  Expanded validity checks for the value of the attribute "form".

Fri Aug 27 18:32:24 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlstring.c: fixed a problem with xmlCheckUTF8 reported on the
	  mailing list by Julius Mittenzwei

Fri Aug 27 00:13:39 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: added BuildRequires:  zlib-devel, fixes
	  Red Hat bug #124942

Thu Aug 26 12:27:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: remove a warning on Solaris
	* xmlschemastype.c: fix a crashing bug #151111

Wed Aug 25 22:20:18 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/import-bad-1_0.imp: Added missing test file.
	* xmlschemas.c include/libxml/xmlerror.h include/libxml/xmlschemas.h:
	  Substituted the obsolete xmlSchemaValidError(s) for xmlParserErrors
	  - see #150840. 
	  Changed the import of schemas to allow failure of location
	  of a resource to be imported.
	* result/schemas/all_* result/schemas/any3_0_0.err 
	  result/schemas/choice_* result/schemas/import1_0_0.err
	  result/schemas/list0_0_1.err result/schemas/list0_1_0.err
	  result/schemas/list0_1_1.err result/schemas/ns0_0_2.err
	  result/schemas/ns0_1_2.err: Adapted regression test results.

Tue Aug 24 20:49:15 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml, xmltutorial.pdf, *.html
	fix Xpath memory leak (thanks to sKaBoy and William Brack)

Tue Aug 24 21:10:59 CEST 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c: fixed path problem in DTD loading reported by 
	  Sameer Abhinkar

Tue Aug 24 16:40:51 CEST 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js: added support for version extra
	* win32/Makefile.*: upgraded to zlib 1.2.1

Mon Aug 23 14:33:54 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: removing -O -g from default gcc flags #150828

Sun Aug 22 16:26:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* NEWS: preparing 2.6.12 release, updated and
	  and rebuilt the docs.

Sun Aug 22 16:07:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fix a problem on last commit

Sun Aug 22 15:16:53 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xpath.c include/libxml/xpath.h 
	  include/libxml/xpathInternals.h python/libxml.c 
	  python/libxml_wrap.h: trying to remove some warning when compiling
	  on Fedora Core 3 and 64bits

Sat Aug 21 0:035:10 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: modified parsing of <list>, <union>, <restriction>,
	  <sequence>, <choice>, <include>, <import>.
	  Fixed schema defaults (elementFormDefault, etc.) for included
	  schemas.
	  Fixed a bug which reported attributes as invalid on
	  elements declarations with the built-in type 'anyType'.
	  Added "lax" validation of the content of elements of type
	  'anyType'.
	  Fixed: element declarations with the same name were treated
	  as duplicate if located in the subtree of <choice> -> <sequence>.
	  (This was bug 150623, submitted by Roland Lezuo)
	  Fixed cleanup of error codes in xmlSchemaValidateDoc as proposed
	  by Igor Kapitanker. (This was bug 150647, submitted by Igor
	  Kapitanker)
	* xmlschemastypes.c: Changed the type of anyType to
	  XML_SCHEMAS_ANYTYPE.
	* include/libxml/xmlerror.h: Added schema parser errors.
	* result/schemas/bug145246_0_0*
	  result/schemas/extension1_0_2.err: Changed test results.
	* result/schemas/ct-sc-nobase_0_0*
	  result/schemas/facet-whiteSpace_0_0*
	  result/schemas/import1_0_0* result/schemas/import2_0_0*
	  result/schemas/include2_0_0* result/schemas/include3_0_0*
	  result/schemas/restriction-attr1_0_0*
	  result/schemas/seq-dubl-elem1_0_0*
	  result/schemas/xsd-list-itemType_0_0*: Added new rest results.
	  test/schemas/bug145246.xsd.imp test/schemas/ct-sc-nobase_0*
	  test/schemas/facet-whiteSpace_0* test/schemas/import1_0*
	  test/schemas/import2_0* test/schemas/include2_0*
	  test/schemas/include3_0* test/schemas/restriction-attr1_0*
	  test/schemas/seq-dubl-elem1_0* test/schemas/xml.xsd
	  test/schemas/xsd-list-itemType_0*: Added new tests and missing
	  files.  	      

Fri Aug 20 18:51:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: a bit of cleanup and a extra variable for
	  CVS dist

Thu Aug 19 07:44:07 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.1, xmllint.html:
	Edit and rebuild the man pages with Daniel's C14 update

Wed Aug 18 19:15:27 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed missing line numbers on entity as reported
	  on the list by Steve Cheng

Wed Aug 18 14:04:31 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in globals.c include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: added some code to
	  include the CVS ChangeLog version in the xmlParserVersion
	  string (printed by xmllint with --version)

Wed Aug 18 11:14:06 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h python/generator.py
	  python/libxml.c python/libxml_wrap.h python/types.c
	  python/tests/schema.py python/tests/Makefile.am: Applied patch
	  from Torkel Lyng to add Schemas support to the Python bindings
	  and extend the schemas error API, registered a new test.
	* doc/* elfgcchack.h: rebuilt to regenerate the bindings

Mon Aug 16 14:36:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added help for new set shell command
	* xinclude.c xmllint.c xmlreader.c include/libxml/parser.h:
	  added parser option to not generate XInclude start/end nodes,
	  added a specific option to xmllint to test it fixes #130769
	* Makefile.am: regression test the new feature
	* doc/xmllint.1 doc/xmllint.xml: updated man page to document option.

Mon Aug 16 02:42:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: small typo pointed out by Mike Hommey
	* doc/xmllint.xml, xmllint.html, xmllint.1: slightly improved
	  the --c14n description, c.f. #144675 .
	* nanohttp.c nanoftp.c: applied a first simple patch from 
	  Mike Hommey for $no_proxy, c.f. #133470
	* parserInternals.c include/libxml/parserInternals.h
	  include/libxml/xmlerror.h: cleanup to avoid 'error' identifier 
	  in includes #137414
	* parser.c SAX2.c debugXML.c include/libxml/parser.h:
	  first version of the implementation of parsing within
	  the context of a node in the tree #142359, new function
	  xmlParseInNodeContext(), added support at the xmllint --shell
	  level as the "set" function
	* test/scripts/set* result/scripts/* Makefile.am: extended
	  the script based regression tests to instrument the new function.

Sat Aug 14 18:53:08 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.html, xmllint.1:
	add c14n to man page (man, it's hard to keep up with
	Daniel!)

Sat Aug 14 18:45:38 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.html, xmllint.1:
	add pattern, walker, maxmem, output and xmlout to man page
	fixes #144675

Sun Aug 15 00:41:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added a --c14n option to canonicalize the output
	  should close the RFE #143226

Sat Aug 14 23:50:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: Dodji pointed out a bug in xmlGetNodePath()
	* xmlcatalog.c: applied patch from Albert Chin to add a
	  --no-super-update option to xmlcatalog see #145461
	  and another patch also from Albert Chin to not crash 
	  on -sgml --del without args see #145462
	* Makefile.am: applied another patch from Albert Chin to
	  fix a problem with diff on Solaris #145511
	* xmlstring.c: fix xmlCheckUTF8() according to the suggestion
	  in bug #148115
	* python/libxml.py: apply fix from Marc-Antoine Parent about
	  the errors in libxml(2).py on the node wrapper #135547

Sat Aug 14 13:18:57 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: added a dumb rule to able to compile tst.c
	  when people submit a sample test program
	* xmlschemas.c: applied small patch from Eric Haszlakiewicz
	  to document xmlSchemasSetValidErrors() limitations, #141827
	* error.c: Add information in generic and structured error
	  setter functions that this need to be done per thread #144308
	* xmlsave.c: fixed bug 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 formatting from Nick Wellnhofer
	  fixes bug #141266
	* test/xhtmlcomp result//xhtmlcomp*: added the specific regression
	  test

Sun May  9 14:07:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: fix for a pedantic make check without make all request

Sat May  8 22:56:22 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* uri.c xmlIO.c: fixing some problems in URI unescaping
	  and output buffer opening, this should fix #141864

Fri May  7 22:31:54 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/valid.h: fixes the use of 'list' as a parameter
	* xmlIO.c include/libxml/xmlIO.h: added xmlPopInputCallback for
	  Matt Sergeant

Thu May  6 21:14:38 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced the handling of subexpression ranges
	  which have a minOccurs of 0 (bug 140478 again); cleaned up
	  comments throughout the module.

Tue May  4 00:52:16 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: adding a --maxmem option to check memory used.

Sat May  1 01:08:44 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlsave.c python/generator.py python/libxml.c: Fixed
	  bug #141529 i.e. various problems when building with --without-html

Fri Apr 30 18:12:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlreader.c: fixing bug #141384 where the reader didn't
	  call the deregistering functions. Also added the check to
	  xmllint --stream --chkregister .

Fri Apr 30 08:57:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.msvc: applied a second patch from Mark Vakoc for
	  regression tests on Windows

Thu Apr 29 21:47:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: never commit without running make tests first !

Thu Apr 29 20:15:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fix a nasty problem with reading over the end
	* xmlsave.c: fix a reported memory leak apparently

Thu Apr 29 17:05:00 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.msvc: patch from Mark Vakoc for regression tests
	  on Windows.
	* xpath.c: the NaN problem also shows up on Borland

Mon Apr 26 23:37:12 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced xmlFARegExec range evaluation for min
	  occurs 0 problems - fixes bug 140478.

Thu Apr 22 09:12:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* rngparser.c: tiny path fixes the "xmlConvertCRNGFile" function name
	  from Kasimier Buchcik
	* xmlschemas.c: recursive xs:extension fix from taihei goi

Wed Apr 21 00:19:29 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: small buffer resizing improvement from Morten Welinder
	  closes #140629

Tue Apr 20 23:40:14 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: last version of the fix for MSC version 1200

Tue Apr 20 19:40:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: killing the strncmp vs. memcmp controversy and #140593

Tue Apr 20 13:27:06 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/SAX2.h: Kasimier Buchcik pointed out some 
	  inexistent functions, cleaned them out.

Tue Apr 20 11:42:50 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* error.c: Johnson Cameron pointed out that
	  initGenericErrorDefaultFunc() was really wrong.
	* xmlreader.c include/libxml/xmlreader.h: xmlTextReaderMode enum
	  must be made public, added some missing comments on the XMLReader
	  header.
	* c14n.c: Alexsey fixed C14N bug with processing namespaces
	  from attributes

Mon Apr 19 23:27:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a stupid () error + Mark name.

Sun Apr 18 23:45:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.6.9 release
	* doc/* News: updated and rebuilt the docs

Sun Apr 18 22:51:43 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: relaxed id() to not check taht the name(s) passed
	  are actually NCName, decided this in agreement with Aleksey Sanin
	  since existing specs like Visa3D broke that conformance checking
	  and other tools seems to not implement it sigh...
	* SAX2.c: check attribute decls for xml:id and the value is an
	  NCName.
	* test/xmlid/id_err* result/xmlid/id_err*: added error testing

Sun Apr 18 21:46:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: work around Microsoft compiler NaN bug raise reported
	  by Mark Vakoc
	* xmlschemas.c include/libxml/schemasInternals.h 
	  include/libxml/xmlerror.h: fixed a recusive extention schemas
	  compilation error raised by taihei goi

Sun Apr 18 16:57:02 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: keep the ChangeLog compressed 
	* xmlreader.c: fix a segfault when using Close()
	* python/tests/Makefile.am python/tests/reader8.py: test for
	  the Close() reader API.

Sat Apr 17 22:42:13 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c, xmlwriter.c, doc/examples/parse4.c,
	  doc/examples/io2.c: minor warning cleanup (no change to logic)
	* xinclude: fixed return value for internal function
	  xmlXIncludeLoadFallback (now always 0 or -1)

Sat Apr 17 21:32:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: small enhancement to fix bug 139791

Fri Apr 16 18:44:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: applied patches from Kasimier Buchcik
	  for the attribute use support
	* test/schemas/attruse* result/schemas/attruse*: added the
	  tests to the regression suite.

Fri Apr 16 18:22:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: move the TODO as comments as the function while not
	  finished are usable as-is
	* xmlschemas.c include/libxml/xmlerror.h: patch from Kasimier Buchcik
	  implementing union
	* test/schemas/union_0_0.x* result/schemas/union_0_0*: added example
	* python/Makefile.am: applied fix from Mike Hommey

Fri Apr 16 23:58:42 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem with detecting external dtd
	  encoding (bug 135229).
	* Makefile.am: minor change to test label

Fri Apr 16 16:09:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem causing duplicate fallback
	  execution (bug 139520)
	* test/XInclude/docs/fallback2.xml result/XInclude/fallback2.*:
	  added testcase

Fri Apr  9 23:49:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* SAX2.c include/libxml/tree.h: adding xml:id draft support
	* Makefile.am test/xmlid/id_tst* result/xmlid/id_tst*: adding
	  4 first regression tests

Fri Apr  9 11:56:08 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixing Red Hat bug #120482 , libxml2-python
	  should depend on the version of python used to compile it.

Mon Apr  5 09:07:24 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from James Bursa, frameset should
	  close head.

Fri Apr  2 22:02:24 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: fixed problem in xmlRelaxNGCompareNameClasses
	  which was causing check-relaxng-test-suite.py test 351 to fail.

Fri Apr  2 17:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: implemented fix for M$ IIS redirect provided
	  by Ian Hummel
	* relaxng.c: fixed problem with notAllowed compilation
	  (bug 138793)

Thu Apr  1 22:07:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* uri.c: fix for xmlUriEscape on "http://user@somewhere.com"
	  from Mark Vakoc.

2004-04-01  Johan Dahlin  <johan@gnome.org>

	* python/.cvsignore: Add generated files, to make cvs silent.

Thu Apr  1 12:41:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: small signed-ness patch from Steve Little

Wed Mar 31 17:47:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: patched a bug in parsing production 1 and 2 of
	  xmlschemas regexp that William pointed out while working on
	  #134120
	* test/regexp/branch result/regexp/branch: added a specific
	  regression test

Wed Mar 31 09:50:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* Makefile.am: added PYTHONPATH to python tests for Schemas
	  and RelaxNG
	* test/xsdtest/xsdtestsuite.xml: added testfile for
	  SchemasPythonTests

Mon Mar 29 16:56:49 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/examples.xsl doc/examples/index.html: added
	  information about compiling on Unix

Mon Mar 29 14:18:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixes the comments for xmlCatalogDump and xmlDumpACatalog
	* doc/*: rebuilt to update

Sun Mar 28 18:11:41 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: optimize indentation based on the new context

Sun Mar 28 14:17:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/xpath2.c doc/examples/xpath2.res: handle and explain
	  a very tricky problem when modifying the tree based on an XPath
	  result query.

Sat Mar 27 09:56:14 PST 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: fixed problem with IS_COMPILABLE flag
	  (bug 130216)

Fri Mar 26 18:28:32 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Dave Beckett to correct line number
	  errors when using push with CDATA

Fri Mar 26 14:53:58 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/xpath1.c: added a test template
	* doc/examples/xpath2.c doc/examples/xpath2.res doc/examples/*:
	  added a new example, and make valgrind target 

Fri Mar 26 11:47:29 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: apply fix for #136693

Thu Mar 25 20:21:01 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/io2.c
	* doc/examples/io2.res
	add xmlDocDumpMemory example in response to mailing list FAQ
	(rebuilt xml and html also)

Thu Mar 25 10:33:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c testXPath.c xmllint.c xmlschemastypes.c: applied
	  patch from Mark Vakoc avoiding using xmlParse* option and use
	  xmlRead* instead
	* win32/Makefile.bcb: patch to Borland C++ builder from Eric Zurcher
	  to avoid problems with some pathnames.

Tue Mar 23 12:35:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* News: preparing 2.6.8 release, updated and rebuilt
	  the docs.
	* Makefile.am: use valgring fro the new Python based regression tests

Mon Mar 22 20:07:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: remove a memory leak on schemas type facets.
	* check-relaxng-test-suite.py check-relaxng-test-suite2.py
	  check-xsddata-test-suite.py: reduce verbosity
	* configure.in Makefile.am: incorporated the Python regressions
	  tests for Relax-NG and Schemas Datatype to "make tests"

Mon Mar 22 16:16:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h doc/* : applied patch from
	  Alfred Mickautsch for better DTD support.
	* SAX2.c HTMLparser.c parser.c xinclude.c xmllint.c xmlreader.c
	  xmlschemas.c: fixed bug #137867 i.e. fixed properly the way
	  reference counting is handled in the XML parser which had the
	  side effect of removing a lot of hazardous cruft added to try
	  to fix the problems associated as they popped up.
	* xmlIO.c: FILE * close fixup for stderr/stdout

Sun Mar 21 19:19:41 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: added an error message when an element is not
	  found within a <choice> (bug 126093)

Sat Mar 20 22:25:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced the logic of parsing char groups to
	  better handle initial or ending '-' (bug 135972)

Sat Mar 20 19:26:03 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: added check for external reference in 
	  xmlRelaxNGGetElements (bug 137718)
	* test/relaxng/rngbug-001.*, result/relaxng/rngbug-001*: added
	  regression test for above

Wed Mar 17 16:37:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: added a close for the local file descriptor
	  (bug 137474)

Mon Mar 15 15:46:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: switched the output routines to use the new context.

Mon Mar 15 10:37:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: enhanced to ignore XML_XINCLUDE_START and XML_XINCLUDE_END
	  nodes (bug 137153)

Sun Mar 14 13:19:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied patch from John Belmonte for anyURI.

Wed Mar 10 17:22:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix bug reported by Holger Rauch
	* test/att8 result/noent/att8 result/att8 result/att8.rdr
	  result/att8.sax: added the test to th regression suite

Wed Mar 10 19:42:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/search.php: Minor change for later verson of php requiring
	  $HTTP_GET_VARS.

Wed Mar 10 00:12:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: Changed the flag to xmlDocCopyNode (and similar routines),
	  previously used only for recursion, to use a value of '2' to
	  indicate copy properties & namespaces, but not children.
	* xinclude.c: changed the handling of ranges to use the above new
	  facility.  Fixes Bug 134268.

Tue Mar  9 18:48:51 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* win32/Makefile.bcb, win32/Makefile.mingw, win32/Makefile.msvc:
	  added new module xmlsave with patch supplied by Eric Zurcher
	  (second attempt - don't know what happened to the first one!)

Tue Mar  9 09:59:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: applied patch from Anthony Carrico
	  providing Python bindings for the Canonicalization C14N support.

Mon Mar  8 11:12:23 CET 2004 Hagen Moebius <hagen.moebius@starschiffchen.de>

	* .cvsignore and python/.cvsignore patched

Mon Mar  8 22:33:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: enhanced to assure that if xpointer is called
	  for a document, the XML_PARSE_NOENT flag is set before parsing
	  the included document so that entities will automatically get
	  taken care of.
	* xpointer.c: corrected code so that, if an XML_ENTITY_REF node
	  is encountered, it will log it and not crash (bug 135713)

Sun Mar  7 19:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: modified to make sub-includes inherit the
	  parse flags from the parent document (bug 132597)

Fri Mar  5 01:13:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: QName handling fixes for the XML Schemas
	  support from Adam Dickmeiss
	* test/schemas/po1_0.xsd: also fix the schemas
	* test/schemas/ns[12]* result/schemas/ns[12]*: added the specific
	  regression tests

Thu Mar  4 23:03:02 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/Makefile.am include/libxml/Makefile.am:
	  paalied patch from Julio M. Merino Vidal fixing bug #134751
	  to fix --with-html-dir option.
	* doc/*: rebuilt fully the docs 
	* doc/html/libxml-xmlsave.html: new file from new header.

Thu Mar  4 16:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c testHTML.c tree.c doc/examples/*.c
	  include/libxml/xmlsave.h: fixing compilation bug with some options
	  disabled as well as --with-minimum should fix #134695

Thu Mar  4 15:00:45 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: allow fallback to URI lookup when SYSTEM fails,
	  should close #134092

Thu Mar  4 14:39:38 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am tree.c xmlsave.c include/libxml/xmlsave.h: commiting
	  the new xmlsave module before the actuall big code change.

Thu Mar  4 12:38:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Adam Dickmeiss for mixed content
	* test/schemas/mixed* result/schemas/mixed*: added his regression
	  tests too.

Mon Mar  1 15:22:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: fix a compilation problem about a missing timb include

Sat Feb 28 22:35:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* testSAX.c: small enhancement to prevent trying to print
	  strings with null pointers (caused "make tests" errors on
	  HP-UX)

Thu Feb 26 20:19:40 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	* doc/xmllint.html
	* doc/xmlcatalog_man.xml
	* doc/xmlcatalog.1
	* doc/xmlcatalog_man.html
	applying patch from Mike Hommey to clarify XML_CATALOG_FILES
	use

Thu Feb 26 23:47:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: patch for cross-compilation to Windows from
	  Christophe de VIENNE.

Thu Feb 26 18:52:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/*.html, doc/html/*.html: regenerated docs using older
	  version of xsltproc pending resolution of AVT problem

Thu Feb 26 10:56:29 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: applied patch from Charles Bozeman to not use
	  the system xmllint.

Wed Feb 25 18:07:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlexports.h: applied patch from Roland Schwingel
	  for MingW

Wed Feb 25 13:57:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am catalog.c configure.in: applied a cleanup patch
	  from Peter Breitenlohner
	* tree.c: removed a doc build warning by fixing a param comment
	* doc/* : rebuilt the docs

Wed Feb 25 13:33:07 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c HTMLparser.c: avoid ID error message if using
	  HTML_PARSE_NOERROR should fix #130762

Wed Feb 25 12:50:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c relaxng.c valid.c xinclude.c xmllint.c xmlreader.c:
	  fixing compilation and link option when configuring with
	  --without-valid should fix #135309

Wed Feb 25 11:36:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed the main issues reported by Peter Breitenlohner
	* parser.c: cleanup
	* valid.c: speedup patch from Petr Pajas

Wed Feb 25 16:07:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed a memory leak (xmlXPathLangFunction) reported
	  on the list by Mike Hommey

Mon Feb 23 17:28:34 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/* NEWS configure.in: preparing 2.6.7 release, updated and
	  rebuilt the documentation.

Mon Feb 23 11:52:12 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/tests/*.py: applied patch from Malcolm Tredinnick
	  to avoid tabs in python sources, should fix #135095

Sun Feb 22 23:16:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: add --timing option
	* relaxng.c: use the psvi field of the nodes instead of _private
	  which may be used for other purposes.

Sat Feb 21 16:57:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: small patch to try to fix a warning with Sun One compiler

Sat Feb 21 16:22:35 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: small patch removing a warning with MS compiler.

Sat Feb 21 13:52:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added "relaxng" option to the debugging shell
	* Makefile.am test/errors/* result/errors/*: some regression tests
	  for some error tests cases.

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

	* tree.c: xmlAttrSerializeTxtContent don't segfault if NULL
	  is passed.
	* test/att7 result//att7*: adding an old regression test
	  laying around on my laptop

Thu Feb 19 17:33:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed xmllint --memory --stream memory consumption
	  on large file by using xmlParserInputBufferCreateStatic() with
	  the mmap'ed file 

Thu Feb 19 13:56:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: some clarification in xmlDocDumpMemory() documentation
	* xmllint.c: fixed xmllint --stream --timing to get timings back

Wed Feb 18 15:20:42 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a problem in push mode when attribute contains
	  unescaped '>' characters, fixes bug #134566
	* test/att6 result//att6*: added the test to the regression suite

Tue Feb 17 17:26:31 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c: removing a non-linear behaviour from ID/IDREF raised
	  by Petr Pajas. Call xmlListAppend instead of xmlListInsert in
	  xmlAddRef

Tue Feb 17 13:27:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/tests/indexes.py python/tests/reader.py: indicated
	  encoding of the test file, needed for python 2.3

Tue Feb 17 21:08:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with numbers having > 19
	  fractional places (bug 133921)

Tue Feb 17 12:47:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied optimization patch from Petr Pajas

Tue Feb 17 12:39:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h: applied update
	  from Alfred Mickautsch and the added patch from Lucas Brasilino

Sun Feb 15 12:01:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* benchmark.png index.html xml.html: updating the benchmark
	  graph and using a PNG instead of a GIF
	* xmlreader.c: updated the TODO

Sat Feb 14 18:55:40 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/xmltutorial.pdf
	* doc/tutorial/*.html
	Fix bug in XPath example in the tutorial, thanks to Carlos, whose
	last name I don't know, for pointing this out

Thu Feb 12 16:28:12 CET 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in: preparing release of 2.6.6
	* doc/*: updated the docs and rebuilt them

Thu Feb 12 13:41:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing bug #132930 with the provided patch, a bit
	  suspicious about it but this is fairly contained and regression
	  tests still passes.
	* test/schemas/all1* result/schemas/all1*: added the test to
	  the regression suite.

Thu Feb 12 12:54:26 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #132575 about finding the end of the
	  internal subset in push mode.
	* test/intsubset.xml result/intsubset.xml* result/noent/intsubset.xml:
	  added the test to the regression suite

Wed Feb 11 14:19:31 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c xmlIO.c encoding.c include/libxml/parser.h
	  include/libxml/xmlIO.h: added xmlByteConsumed() interface
	* doc/*: updated the benchmark rebuilt the docs
	* python/tests/Makefile.am python/tests/indexes.py: added a
	  specific regression test for xmlByteConsumed()
	* include/libxml/encoding.h rngparser.c tree.c: small cleanups

Wed Feb 11 08:13:58 HKT 2004 William Brack <wbrack@mmm.com.hk

	* tree.c: fixed missing output of internal DTD param entities when
	  nothing else present in DTD (bug 134052)

Tue Feb 10 19:24:38 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* encoding.c: applied patch supplied by Christophe Dubach
	  to fix problem with --with-minimum configuration
	  (bug 133773)
	* nanoftp.c: fixed potential buffer overflow problem,
	  similar to fix just applied to nanohttp.c.

Mon Feb  9 18:40:21 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* nanohttp.c: fixed the fix for the buffer overflow, thanx
	  William :-)

Mon Feb  9 22:37:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* acinclude.m4, configure.in: fixed problem concerning
	  determining SOCKLEN_T as pointed out by Daniel Richard G.
	  on the mailing list

Mon Feb  9 15:31:24 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* nanohttp.c: fixed buffer overflow reported by Yuuichi Teranishi

Mon Feb  9 13:45:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: small patch from Philip Ludlam to avoid warnings.

Mon Feb  9 13:41:47 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applied a small patch from Alfred Mickautsch
	  to avoid an out of bound error in isolat1ToUTF8()

Mon Feb  9 13:35:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: remove the warning on the 2001 namespace
	* parser.c parserInternals.c xpath.c: remove some warnings
	  when compiling with MSVC6
	* nanohttp.c: applied a patch when using _WINSOCKAPI_

Sun Feb  8 12:09:55 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: added a small hack to fix interference between
	  my fixes for bugs 132585 and 132588.
	* python/libxml.c: fixed problem with serialization of namespace
	  reported on the mailing list by Anthony Carrico

Sat Feb  7 16:53:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem with function xmlXIncludeCopyRange
	  (bug 133686).

Fri Feb  6 21:03:41 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: fixed problem with return value of
	  xmlTextWriterWriteIndent() (bug 133297)

Fri Feb  6 19:07:04 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: changed coding to output good XIncludes when
	  one or more bad ones are present (bug 132588)

Fri Feb  6 17:34:21 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: corrected handling of empty fallback condition
	  (bug 132585)

Fri Feb  6 15:28:36 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: added initialisation for ctxt->vctxt
	  in HTMLInitParser (bug 133127)
	* valid.c: minor cosmetic change (removed ATTRIBUTE_UNUSED
	  from several function params)

Tue Feb  3 16:48:57 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem regarding freeing of dictionary
	  when there are errors within an XInclude file (bug 133106).
	  Thanks to Oleg Paraschenko for the assistance.

Tue Feb  3 09:53:18 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemastypes.c: fixed validation of maxLength with no
	  content using patch submitted by Eric Haszlakiewicz
	  (bug 133259)

Tue Feb  3 09:21:09 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlreader.h include/libxml/xmlmemory.h: added
	  calling convention to the public function prototypes (rep by
	  Cameron Johnson)
	* include/libxml/xmlexports.h: fixed mingw+msys compilation
	  (rep by Mikhail Grushinskiy)

Mon Feb  2 20:22:18 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: enhanced output indenting (bug 133264)

Mon Feb  2 16:13:33 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlreader.c, include/libxml/xmlreader.h: applied patch from
	  Steve Ball to provide structured error reports.

Sun Feb  1 01:48:14 PST 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c, include/libxml/tree.h: moved serialization of
	  attribute text data (xmlSerializeContent) into a separate
	  routine (xmlSerializeTxtContent) so it can be used by xmlwriter.c
	* xmlwriter.c: changed handling of attribute string to use the
	  routine above (fixed bug 131548)

Sat Jan 31 08:22:02 MST 2004 John Fleck <jfleck@inkstain.net

	* doc/examples/reader1.c, reader2.c, reader3.c
	* doc/examples/examples.xml
	* doc/examples/*.html
	add note that reader examples need libmxl2 > 2.6, rebuild
	html - this time doing it correctly :-)

Fri Jan 30 20:45:36 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/examples.xml
	* doc/examples/*.html
	add note that reader examples need libmxl2 > 2.6, rebuild
	html

Thu Jan 29 23:51:48 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: added (void *) type override to prevent
	  warning on Solaris (Bug 132671)

Wed Jan 28 07:20:37 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/Makefile.am
	per Jan. 15 email to the list from oliverst, the index.html
	file from this directory wasn't making it into the tarball

Mon Jan 26 18:01:00 CET 2004 Daniel Veillard <daniel@veillard.com>

	* acinclude.m4: applied fix from Alexander Winston for a problem
	  related to automake-1.8 , c.f. #132513 and #129861

Mon Jan 26 12:53:11 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/index.py: don't rely on . being on the path for
	  make tests, should keep Mr. Crozat quiet until next time...

Sun Jan 25 21:45:03 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.5, rebuilt the
	  docs, checked rngparser stuff does not end up in the tarball

Sun Jan 25 20:59:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: applied patch from Frederic Peters
	  fixing the wrong arg order in xpath callback in bug #130980

Sun Jan 25 20:52:09 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixing #130453 XInclude element with no href attribute
	* relaxng.c rngparser.c include/libxml2/relaxng.h: fully integrating 
	  the compact syntax will require more work, postponed for the
	  2.6.5 release.

Sat Jan 24 09:30:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/schemasInternals.h xmlschemas.c: applied patch from
	  Steve Ball to avoid a double-free.

Fri Jan 23 14:03:21 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added io1.c an example ox xmlIO usage and io1.res
	  test result, fixed a awful lot of memory leaks showing up in
	  testWriter.c, changed the examples and the Makefiles to test
	  memory leaks.
	* xmlwriter.c: fixed a memory leak
	* Makefile.am: run the doc/examples regression tests as part of
	  make tests
	* xpath.c include/libxml/xpath.h: added xmlXPathCtxtCompile() to
	  compile an XPath expression within a context, currently the goal
	  is to be able to reuse the XSLT stylesheet dictionary, but this
	  opens the door to others possible optimizations.
	* dict.c include/libxml/dict.h: added xmlDictCreateSub() which allows
	  to build a new dictionary based on another read-only dictionary.
	  This is needed for XSLT to keep the stylesheet dictionary read-only
	  while being able to reuse the strings for the transformation
	  dictionary.
	* xinclude.c: fixed a dictionary reference counting problem occurring
	  when document parsing failed.
	* testSAX.c: adding option --repeat for timing 100times the parsing
	* doc/* : rebuilt all the docs

Thu Jan 22 14:17:05 2004  Aleksey Sanin  <aleksey@aleksey.com>

	* xmlmemory.c: make xmlReallocLoc() accept NULL pointer

Thu Jan 22 08:26:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied patch from John Belmonte for
	  normalizedString datatype support.

Thu Jan 22 10:43:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with union when last() is used
	  in predicate (bug #131971)
	* xpointer.c: minor change to comment for doc generation

Wed Jan 21 17:03:17 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #131745 raised by Shaun McCance with the
	  suggested patch

Wed Jan 21 10:59:55 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Alfred Mickautsch fixing a memory
	  leak reported on the list.

Thu Jan 15 00:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/tests/tstLastError.py: applied
	  patch from Stéphane Bidoul to add enums to the Python bindings.

Tue Jan 13 21:50:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testHTML.c: another small patch from Mark Vakoc

Tue Jan 13 21:39:58 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c relaxng.c testRelax.c testSchemas.c: applied
	  patch from Mark Vakoc to not use SAX1 unless necessary.

Mon Jan 12 17:22:57 CET 2004 Daniel Veillard <daniel@veillard.com>

	* dict.c parser.c xmlstring.c: some parser optimizations,
	  xmllint --memory --timing --repeat --stream ./db10000.xml
	  went down from 16.5 secs to 15.5 secs.

Thu Jan  8 17:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: removed a memory leak remaining from the switch
	  to a dictionary for string allocations c.f. #130891

Thu Jan  8 17:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixing some problem if configured --without-xinclude
	  c.f. #130902

Thu Jan  8 17:42:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: changed AC_OUTPUT() macro to avoid a cygwin problem
	  c.f. #130896

Thu Jan  8 00:36:00 CET 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc:
	  applying patch from Mark Vakoc for Windows
	* doc/catalog.html doc/encoding.html doc/xml.html: applied doc
	  fixes from Sven Zimmerman

Tue Jan  6 23:51:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml2-python-api.xml python/libxml_wrap.h python/types.c
	  python/tests/Makefile.am python/tests/tstLastError.py: applied 
	  patch from Stéphane Bidoul for structured error handling from
	  python, and the associated test

Tue Jan  6 23:18:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in: fixed Bug130593
	* xmlwriter.c: fixed compilation warning

Tue Jan  6 15:15:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlstring.h: fixed the comment in the header
	* doc/*: rebuilt the docs

Tue Jan  6 19:40:04 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* encoding.c, parser.c, xmlstring.c, Makefile.am,
	  include/libxml/Makefile.am, include/libxml/catalog.c,
	  include/libxml/chvalid.h, include/libxml/encoding.h,
	  include/libxml/parser.h, include/libxml/relaxng.h,
	  include/libxml/tree.h, include/libxml/xmlwriter.h,
	  include/libxml/xmlstring.h:
	  moved string and UTF8 routines out of parser.c and encoding.c
	  into a new module xmlstring.c with include file
	  include/libxml/xmlstring.h mostly using patches from Reid
	  Spencer.  Since xmlChar now defined in xmlstring.h, several
	  include files needed to have a #include added for safety.
	* doc/apibuild.py: added some additional sorting for various
	  references displayed in the APIxxx.html files.  Rebuilt the
	  docs, and also added new file for xmlstring module.
	* configure.in: small addition to help my testing; no effect on
	  normal usage.
	* doc/search.php: added $_GET[query] so that persistent globals
	  can be disabled (for recent versions of PHP)

Mon Jan  5 20:47:07 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/customfo.xsl
	* doc/tutorial/customhtml.xsl
	update custom tutorial-building stylesheets in preparation
	for tutorial update

Tue Jan  6 00:10:33 CET 2004 Daniel Veillard <daniel@veillard.com>

	* rngparser.c: commiting the compact relax ng parser. It's not
	  completely finished, it's not integrated but I want to save the
	  current state

Mon Jan  5 22:22:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/apibuild.py, doc/APIconstructors.html, doc/libxml2-refs.xml,
	  win32/libxml2.def.src: fixed apibuild.py's generation of
	  "constructors" to be in alphabetical order (instead of previous
	  random sequence); regenerated resulting files.

Mon Jan  5 14:03:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Lucas Brasilino fixing an indent
	  problem.

Sun Jan  4 18:54:29 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/newapi.xsl: change background color of function
	declaration to improve readability
	* doc/*: rebuild docs with new stylesheet

Sun Jan  4 22:45:14 HKT 2004 William Brack <wbarck@mmm.com.hk>

	* parser.c, include/libxml/parser.h: added a routine
	  xmlStrncatNew to create a new string from 2 frags.
	* tree.c: added code to check if node content is from
	  dictionary before trying to change or concatenate.

Sun Jan  4 08:57:51 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlmemory.c: applied suggestion from Miloslav Trmac (see
	  Bug 130419) and eliminated xmlInitMemoryDone.  More
	  improvement needed.
	* xml2-config.in: added an additional flag (--exec-prefix) to
	  allow library directory to be different from include directory
	  (Bug 129558).

Fri Jan  2 21:22:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* error.c: applied patch from Stéphane Bidoul for structured error
	  reporting.

Fri Jan  2 21:03:17 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlwriter.h xmlwriter.c: applied the patch from
	  Lucas Brasilino to add indentation support to xmlWriter

Fri Jan  2 22:58:29 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem with "recursive" include (fallback
	  contains another include - Bug 129969)

Fri Jan  2 11:40:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: found and fixed a bug misallocating some non
	  blank text node strings from the dictionary.
	* xmlmemory.c: fixed a problem with the memory debug mutex
	  release.

Wed Dec 31 22:02:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem caused by wrong dictionary
	  reference count, reported on the list by Christopher
	  Grayce.

Wed Dec 31 15:55:55 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* python/generator.py, python/libxml2class.txt: fixed problem
	  pointed out by Stéphane Bidoul on the list.
	* xinclude.c, xpointer.c, xpath.c, include/libxml/xpointer.h:
	  completed modifications required to fix Bug 129967 (at last!).
	  Now wait to see how long before further trouble...

Tue Dec 30 16:26:13 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* parser.c, xmlmemory.c, include/libxml/xmlmemory.h: Fixed
	  memory leak reported by Dave Beckett
	* xmlschemas.c: Removed spurious comment reported on the mailing
	  list
	* xinclude.c, xpath.c, xpointer.c, libxml/include/xpointer.h:
	  Further work on Bug 129967 concerning xpointer range handling
	  and range-to function; much better, but still not complete

Mon Dec 29 18:08:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: xmlValidateElement could crash for element holding a 
	  namespace declaration but not in a namespace. Oliver Fischer 
	  provided the example.

Mon Dec 29 11:29:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: issue validation status on stderr, not stdout as suggested
	  by Pawel Palucha
	* result/relaxng/*: this change slightly all the output from RNG 
	  regressions.

Mon Dec 28 10:47:32 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: edited a couple of comments in accordance with
	  posting on the mailing list (no logic change)
	* xpointer.c: working on Bug 129967, added check for NULL
	  nodeset to prevent crash.  Further work required.
	* xpath.c: working on Bug 129967, added code to handle
	  XPATH_LOCATIONSET in RANGETO code, also added code to
	  handle it in xmlXPathEvaluatePredicateResult.  Further
	  work required.

Sat Dec 27 12:32:58 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: added tests for xs:all to assure minOccurs
	  and maxOccurs <= 1 (Bug 130020)

Sat Dec 27 09:53:06 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: fixed xmlFAParseCharRange for Unicode ranges
	  with patch from Charles Bozeman.

Fri Dec 26 14:03:41 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: fixed problem causing segfault on validation error
	  condition (reported on mailing list)

Thu Dec 25 21:16:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: fixed missing dictionaries for Memory and Doc
	  parser contexts (problem reported on mailing list)
	* doc/apibuild.py: small change to prevent duplicate lines
	  on API functions list.  It will take effect the next time
	  the docs are rebuilt.

Wed Dec 24 12:54:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: updated the docs and prepared a new
	  release 2.6.4

Wed Dec 24 12:07:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* legacy.c: remove deprecated warning on startElement()

Wed Dec 24 12:04:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c result/XInclude/nodes2.*: XInclude xpointer support
	  was broken with the new namespace. Fixes #129932

Wed Dec 24 00:29:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/schemasInternals.h: types might be
	  redefined in includes, quick fix to allow this but lacks the 
	  equality of the redefinition test.

Tue Dec 23 15:14:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* valid.c: fixed bug concerning validation using external
	  dtd of element with mutiple namespace declarations
	  (Bug 129821)

Tue Dec 23 11:41:42 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* tree.c: inhibited production of "(null):" in xmlGetNodePath
	  when node has default namespace (Bug 129710)

Tue Dec 23 09:29:14 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xpath.c: small enhancement to xmlXPathCmpNodes to assure
	  document order for attributes is retained (Bug 129331)

Mon Dec 22 19:06:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlreader.c: change xmlReadFd() xmlCtxtReadFd()
	  xmlReaderNewFd() xmlReaderForFd(), change those to not close
	  the file descriptor. Updated the comment, should close #129683

Mon Dec 22 00:34:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed a serious problem in XInclude #129021

Sun Dec 21 13:59:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #129489, propagation of parsing flags 
	  in entities.
	* parser.c xmlreader.c: improved the comments of parsing options

Sun Dec 21 18:14:04 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* python/Makefile.am, python/tests/Makefile.am,
	  doc/Makefile.am: applied fixes to allow build from
	  'outside' directory (Bug 129172)

Sat Dec 20 16:42:07 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c - add explanation of namespace inheritance when
	ns is NULL to xmlNewChild and xmlNewTextChild API doc

Sat Dec 20 18:17:28 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xpathInternals.h: undid last change (my
	  bad).  Put necessary fix in libxslt/libexslt instead.
	* include/libxml/DOCBparser.h: put test for __GCC__ on
	  warning directive (Bug 129105)

Sat Dec 20 10:48:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xpathInternals.h: fixed xmlXPathReturnString
	  to cater for NULL pointer (bug 129561)
	* globals.c: added comment to suppress documentation warning
	* doc/apibuild.py: fixed problem which caused last APIchunkxx.html
	  to be lost.  Rebuilt doc/* (including adding APIchunk26.html)

Fri Dec 19 18:24:02 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: trying to fix #129692 xmlTextReaderExpand() when
	  using an xmlReaderWalker()

Thu Dec 18 20:10:34 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c: fix misc. typos in doc comments
	* include/libxml/tree.h: elaborate on macro define doc comments
	* doc/*: rebuild docs

Wed Dec 17 16:07:33 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: don't call the result files .out but .res as
	  the Makefiles tend to try generating binaries for .out targets...

Tue Dec 16 20:53:54 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/html/libxml-pattern.html: - cvs add API docs for new
	pattern stuff

Tue Dec 16 20:40:40 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c
	* doc/*:
	Elaborate in documentation discussion of xmlNewChild
	and xmlNewTextChild. Thanks to Steve Lenti for pointing
	out the usefulness of a more explicit explanation of the
	reserved character escaping issue.

Fri Dec 12 15:55:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: applied patch from Stefan Kost

Thu Dec 11 15:15:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/testWriter.c: applied small fix from Lucas Brasilino

Thu Dec 11 14:55:22 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: Added pattern support

Wed Dec 10 14:11:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* libxml.spec.in: preparing release of
	  libxml2-2.6.3, updated and regenerated the docs.

Wed Dec 10 11:43:33 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c pattern.c: removed some compilation warnings

Wed Dec 10 11:16:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: fixing bug #119264 xmllint failing to report
	  serialization errors in some cases.

Tue Dec  9 23:50:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed an XML entities content serialization
	  potentially triggered by XInclude, see #126817

Tue Dec  9 16:12:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied the patch to xmlTextWriterStartPI()
	  suggested by Daniel Schulman in #128313

Tue Dec  9 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in Makefile.am: another patch from Kenneth Haley
	  for Mingw, c.f. #128787

Tue Dec  9 15:07:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlexports.h: applied patch from Kenneth Haley
	  for compiling on Mingw see #128786

Tue Dec  9 14:52:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: some flags were not passed down correctly as
	  parsing options. Fixes #126806

Tue Dec  9 12:29:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmllint.c xmlreader.c include/libxml/xinclude.h
	  include/libxml/xmlerror.h: augmented the XInclude API
	  to be able to pass XML parser flags down to the Inclusion
	  process. Also resynchronized with the Last Call W3C Working
	  Draft 10 November 2003 for the xpointer attribute.
	* Makefile.am test/XInclude/docs/nodes[23].xml 
	  result/XInclude/*: augmented the tests for the new namespace and
	  testing the xpointer attribute, changed the way error messages
	  are tested
	* doc/*: regenerated the documentation

Mon Dec  8 18:38:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* error.c: filter warning messages if the global setting blocks them
	* xinclude.c xmlreader.c include/libxml/xinclude.h
	  include/libxml/xmlerror.h: updated the change of namespace at
	  the XInclude level, raise a warning if the old one is found,
	  and some cleanup

Mon Dec  8 13:09:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: tentative fix for #126117 character reference in
	  attributes output problem in some cornercase.

Mon Dec  8 11:08:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: tried to fix the problems reported in 
	  bug #126735
	* xpath.c SAX2.c error.c parser.c valid.c include/libxml/xmlerror.h:
	  fixed again some problem trying to use the structured error
	  handlers, c.f. bug #126735
	* result/VC/ElementValid: tiny change due to the fix

Sun Dec  7 22:27:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* error.c: fixed __xmlRaiseError to use structured error handlers
	  defined by xmlSetStructuredErrorFunc(), fixes bug #126211

Sun Dec  7 20:30:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: attempt to fix #126211 ... 

Fri Dec  5 17:07:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmlreader.c xmllint.c include/libxml/pattern.h
	  include/libxml/xmlreader.h: fixed the pattern interfaces
	  but not yet the parser to handle the namespaces.
	* doc/examples/reader3.c doc/*: fixed the example, rebuilt the docs.

Fri Dec  5 15:49:44 CET 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlwriter.c doc/apibuild.py include/libxml/globals.h 
	  include/libxml/pattern.h include/libxml/schemasInternals.h
	  include/libxml/xmlexports.h include/libxml/xmlwriter.h: cleanup
	  the make rebuild in doc, this include new directive to stop
	  documentation warnings
	* doc/* doc/html/*: rebuilt the docs
	* pattern.c xmlreader.c include/libxml/pattern.h
	  include/libxml/xmlreader.h: adding xmlTextReaderPreservePattern()
	  to save nodes while scanning the tree with the reader, cleanup
	  the way element were freed, and xmlTextReaderPreserve()
	  implementation, the API might change for namespace binding support
	  when compiling patterns.
	* doc/examples/*: added reader3.c exposing the xmlTextReaderPreserve()

Thu Dec  4 15:10:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: oops forgot to modify/commit the new code.

Thu Dec  4 13:29:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml_wrap.h:
	  cleanup the output buffer support to at least get the basic
	  to work
	* python/tests/outbuf.py python/tests/serialize.py: fixes and
	  cleanup.
	* include/libxml/xmlwriter.h: cleanup

Wed Dec  3 21:38:56 MST 2003 John Fleck <jfleck@inkstain.net>

	* include/libxml/xmlversion.h.in
	* doc/*: add WITH_TRIO comment so it shows up in the docs, rebuild
	  docs

Wed Dec  3 13:10:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in xmlregexp.c: fix bug #128401 affecting
	  regexp quantifiers

Tue Dec  2 23:29:56 CET 2003 Daniel Veillard <daniel@veillard.com>

	* pattern.c include/libxml/pattern.h: adding the pattern node
	  selection code. Inheried in part from libxslt but smaller.
	* Makefile.am configure.in include/libxml/xmlversion.h.in:
	  integrated the pattern module, made it a configure time option
	* xmllint.c: added --pattern to test when doing --stream

Tue Dec  2 11:25:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed a problem in xmlreader validation when
	  streaming exposed by reader2 example.

Mon Dec  1 20:40:51 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html
	* doc/docs.html:
	add reference to the Code Examples page to docs.html list
	of resources

Mon Dec  1 12:30:28 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb win32/configure.js: Applied the BCB patch
	  from Eric

Sun Nov 30 21:33:37 MST 2003 John Fleck <jfleck@inkstain.net>

	* include/libxml/xinclude.h
	* doc/*: Add comments for macro definitions in xinclude.h and
	rebuild the docs

Sun Nov 30 21:06:29 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/docdescr.doc
	Updating William's explanation of how to build docs, 
	reflecting Daniel's new docs build system

Sat Nov 29 18:38:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlmemory.c: enhanced by adding mutex to protect global
	  structures in a multi-threading environment.  This fixed
	  some random errors on the Threads regression tests.

Fri Nov 28 21:39:49 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html doc/python.html: fix tst.py text, which didn't
	  import sys

Fri Nov 28 17:28:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, include/libxml/encoding.h: Enhanced the handling of
	  UTF-16, UTF-16LE and UTF-16BE encodings.  Now UTF-16 output is
	  handled internally by default, with proper BOM and UTF-16LE
	  encoding.  Native UTF-16LE and UTF-16BE encoding will not generate
	  BOM on output, and will be automatically recognized on input.
	* test/utf16lebom.xml, test/utf16bebom.xml, result/utf16?ebom*:
	  added regression tests for above.

Thu Nov 27 19:25:10 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: Modified to allow coexistent 
	  build with all compilers. Added C-Runtime option for MSVC. Included
	  xmlWriter.
	* xmlwriter.c: Added IN_LIBXML macro

Wed Nov 26 21:54:01 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: applied patch from Eric

Wed Nov 26 21:33:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: stefan on IRC pointed out that XML_GET_LINE
	  is broken on 2.6.x

Tue Nov 25 18:39:44 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed #127877, never output &quot; in element content
	* result/isolat3 result/slashdot16.xml result/noent/isolat3
	  result/noent/slashdot16.xml result/valid/REC-xml-19980210.xml
	  result/valid/index.xml result/valid/xlink.xml: this changes the
	  output of a few tests

Tue Nov 25 16:36:21 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/schemasInternals.h include/libxml/xmlerror.h
	  testSchemas.c xmlschemas.c: added xsd:include support, fixed
	  testSchemas behaviour when a schemas failed to parse.
	* test/schemas/vdv-* result/schemas/vdv-first5_0_0*: added one
	  test for xsd:include from Eric Van der Vlist

Tue Nov 25 08:18:12 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: swapped the attribute defaulting and attribute checking
	  parts of parsing a new element start, fixes bug #127772
	* result/valid/127772.* test/valid/127772.xml
	  test/valid/dtds/127772.dtd: added the example in the regression tests

Tue Nov 25 08:00:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: moved xmlCleanupThreads() to the end of xmlCleanupParser()
	  to avoid bug #127851

Mon Nov 24 15:26:21 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing some Negative Character Group and
	  Character Class Subtraction handling.

Mon Nov 24 14:01:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: more XML Schemas fixes based
	  on Eric van der Vlist examples
	* result/schemas/vdv-first4* test/schemas/vdv-first4*:
	  added regression tests
	* doc/examples/Makefile.am doc/examples/index.py: do not
	  regenerate the index on make all target, but only on
	  make rebuild to avoid troubles.

Sat Nov 22 21:35:42 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h
	  include/libxml/schemasInternals.h: lot of bug fixes, cleanup,
	  starting to add proper namespace support too.
	* test/schemas/* result/schemas/*: added a number of tests
	  fixed the result from some regression tests too.

Fri Nov 21 20:50:59 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html, docs.html: remove reference to gtk-doc now that
	Daniel has removed it, fix link to George's IBM article, other
	minor edits

Fri Nov 21 01:26:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Robert Stepanek to start 
	  import os schemas support, cleaned up stuff and the patch.
	* test/schemas/import0_0.* result/schemas/import0_0_0*: added test
	  to regression, fixed a few regressions too.

Thu Nov 20 22:58:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied two parsing fixes from James Bursa

Thu Nov 20 19:20:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added two xmlReader examples
	* xmlreader.c: cleaned up some bugs in the process

Thu Nov 20 12:54:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h: applied patch from
	  Alfred Mickautsch, bugfixes and comments
	* doc/examples/*: added his test as the xmlWriter example
	* doc/html/ doc/*.html: this resulted in some improvements
	* include/libxml/hash.h: fixed an inclusion problem when
	  <libxml/hash.h> wasn't preceeded by <xml/parser.h>

Wed Nov 19 17:19:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fix an error message
	* doc/examples/*: added tree2 example from Lucas Brasilino

Wed Nov 19 17:50:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/newapi.xsl: improve the sort sequence for page content
	* doc/html/*.html: regenerate the web pages

Wed Nov 19 00:48:56 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: do not package cvs versioning temp files.
	* doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl: more cleanup,
	  slightly improved the API xml format, fixed a lot of small
	  rendering problems
	* doc/html/libxml*.html: rebuilt

Tue Nov 18 21:51:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/*.h include/libxml/*.h.in: modified the file
	  header to add more informations, painful...
	* genChRanges.py genUnicode.py: updated to generate said changes
	  in headers
	* doc/apibuild.py: extract headers, add them to libxml2-api.xml
	* *.html *.xsl *.xml: updated the stylesheets to flag geprecated
	  APIs modules. Updated the stylesheets, some cleanups, regenerated
	* doc/html/*.html: regenerated added back book1 and libxml-lib.html

Tue Nov 18 14:43:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/*.xsl doc/*.html doc/apibuild.py: cleaned up
	  the build process to remove all remains from the old gtk-doc
	  inherited, libxml2-refs.xml is now generated by apibuild.py, the
	  stylesheets have been improved, and the API*html now generated
	  are XHTML1 valid too

Tue Nov 18 14:28:32 HKT 2003 William Brack <mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h: minor
	  enhancement to prevent comment with unreferenced variable.
	* threads.c xmlreader.c xmlwriter.c: edited some comments to
	  improve auto-generation of documentation
	* apibuild.py: minor change to an error message

Mon Nov 17 17:55:51 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl: more cleanup,
	  improving navigation
	* doc/html/*.html: updated the result

Mon Nov 17 14:54:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl:
	  improvement of the stylesheets, fixed a API generation problem,
	  switched the stylesheet and Makefile to build the HTML output.
	* doc/html/*.html: complete update, ditched some old files, might
	  introduce some breakage...

Mon Nov 17 12:50:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/newapi.xsl: lot of improvements, this starts looking good
	  enough to be usable.

Mon Nov 17 00:58:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/newapi.xsl: stylesheet to build HTML pages from the
	  API XML description, Work in Progress

Sun Nov 16 16:03:24 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed bug 126976 (string != empty nodeset
	  should be false)

Sun Nov 16 14:00:08 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/html/*.html: Finally - found the problem with the
	  page generation (XMLPUBFUN not recognized by gtkdoc).
	  Re-created the pages using a temporary version of
	  include/libxml/*.h.
	* testOOMlib.c,include/libxml/encoding.h,
	  include/libxml/schemasInternals.h,include/libxml/valid.h,
	  include/libxml/xlink.h,include/libxml/xmlwin32version.h,
	  include/libxml/xmlwin32version.h.in,
	  include/libxml/xpathInternals.h: minor edit of comments
	  to help automatic documentation generation
	* doc/docdescr.doc: small elaboration
	* doc/examples/test1.c,doc/examples/Makefile.am: re-commit
	  (messed up on last try)
	* xmlreader.c: minor change to clear warning.

Sat Nov 15 19:20:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Copyright: fixed some wording
	* libxml.spec.in: make sure doc/examples is packaged
	* include/libxml/tree.h valid.c xmlreader.c: fixed the really
	  annoying problem about xmlRemoveID and xmlReader streaming.
	  Thing looks fixed now, had to add a doc reference to the
	  xmlID structure though...

Sat Nov 15 09:53:36 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/docdescr.doc: added description of man page building

Sat Nov 15 19:08:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/html/libxml-chvalid.html, doc/html/libxml-dict.html,
	  doc/html/libxml-list.html, doc/html/libxml-testOOMlib.html,
	  doc/html/libxml-wincecompat, doc/html/winsockcompat.html,
	  doc/html/libxml-xmlexports.html, doc/html/libxml-xmlversion.html,
	  doc/html/libxml-xmlwin32version.html, doc/html/libxml-xmlwriter.html:
	  added missing pages for the website.

Sat Nov 15 18:23:48 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am doc/*.html doc/html/*.html: rebuilt the
	  generated pages (again), manually restored doc/html/index.html
	  and manually edited generated file doc/gnome-xml.xml to put
	  in appropriate headings.
	* doc/docdescr.doc: new file to describe details of the
	  document generation (helps my memory for the next time)
	* genChRanges.py,chvalid.c,include/libxml/chvalid.h: minor
	  enhancement to please the automatic documentation generation.

Fri Nov 14 23:47:31 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* catalog.c,relaxng.c,testAutomata.c,xpointer.c,genChRanges.py,
	  chvalid.c,include/libxml/chvalid.h,doc/examples/test1.c:
	  minor error cleanup for gcc-3.3.[12] compilation warnings.

Fri Nov 14 15:08:13 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* tree.c: minor changes to some comments
	* doc/*.html: rebuilt the generated HTML pages for changes
	  from jfleck (bug 126945)

Thu Nov 13 12:44:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added Dodji's example, added output handling

Thu Nov 13 11:35:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added Aleksey XPath example, fixed bugs
	  in the indexer

Wed Nov 12 23:48:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*: integrating the examples in the navigation menus
	* doc/examples/*: added make tests, updated the navigation,
	  added a new test, cleanups, updates.

Wed Nov 12 17:50:36 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*.html: rebuilt the generated HTML pages
	* doc/examples/*: updated the stylesheets, added a synopsis,
	  Makefile.am is now generated by index.py

Wed Nov 12 01:38:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/site.xsl doc/examples/Makefile.am doc/examples/index.html:
	  added autogeneration of a web page for the examples
	* doc/examples/example1.c doc/examples/.cvsignore
	  doc/examples/examples.xml doc/examples/index.py: updated the
	  informations extracted, improved the format and indexing.

Tue Nov 11 22:08:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py: less verbose on difference
	* libxml.spec.in: cleanup
	* parser.c: fixed xmlCleanupParser() doc
	* doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml
	  doc/examples/Makefile.am doc/examples/example1.c 
	  doc/examples/examples.xml doc/examples/index.py
	  doc/examples/test1.xml: work on adding C examples and
	  generating automated information about those. examples.xml
	  is autogenerated describing the examples.
	* example/Makefile.am: cleanup

Mon Nov 10 23:47:03 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genUnicode.py, xmlunicode.c, include/libxml/xmlunicode.h:
	  fixed missing '-' in block names, enhanced the hack for
	  ABI aliasing.

Sun Nov  9 20:28:21 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genUnicode.py, xmlunicode.c, include/libxml/xmlunicode.h,
	  python/libxml2class.txt: enhanced for range checking,
	  updated to Unicode version 4.0.1 (API docs also updated)
	* python/generator.py: minor change to fix a warning

Wed Nov  5 23:46:36 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: apply fix from Karl Eichwalder for script path

Wed Nov  5 10:49:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: applied patch from Mark Vakoc to simplify
	  his work from CVS checkouts.

Tue Nov  4 21:16:47 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmlreader.html: minor cleanups

Tue Nov  4 15:52:28 PST 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xmlversion.h.in: changed macro ATTRIBUTE_UNUSED
	  for gcc so that, if undefined, it's defined as
	  __attribute__((unused))

Tue Nov  4 15:28:07 PST 2003 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: small enhancement to assure ATTRIBUTE_UNUSED
	  appears after the variable declaration.
	* valid.c: trivial change to eliminate a warning message

Tue Nov  4 11:24:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.2, updated and
	  rebuilt the docs

Tue Nov  4 09:38:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: change --html to make sure we use the HTML serialization
	  rule by default when HTML parser is used, add --xmlout to allow to
	  force the XML serializer on HTML.
	* HTMLtree.c: ugly tweak to fix the output on <p> element and 
	  solve #125093
	* result/HTML/*: this changes the output of some tests

Mon Nov  3 17:51:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed bug #125812, about XPointer in XInclude 
	  failing but not returning an error.

Mon Nov  3 17:18:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed bug #125811 related to DTD post validation
	  where the DTD doesn't pertain to a document.

Mon Nov  3 15:25:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlIO.c include/libxml/parserInternals.h: implemented
	  the XML_PARSE_NONET parser option.
	* xmllint.c: converted xmllint.c to use the option instead of 
	  relying on the global resolver variable.

Mon Nov  3 13:26:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmlreader.c include/libxml/xinclude.h: adding XInclude
	  support to the reader interface. Lot of testing of the walker,
	  various bug fixes.
	* xmllint.c: added --walker and made sure --xinclude --stream --debug
	  works as expected
	* Makefile.am result/dtd11.rdr result/ent6.rdr test/dtd11 test/ent6
	  result/XInclude/*.rdr: added regression tests for the walker and
	  XInclude xmlReader support, had to slightly change a couple of tests
	  because the walker can't distinguish <foo/> from <foo></foo>

Sat Nov  1 17:42:27 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c nanohttp.c threads.c: second BeOS patch from 
	  Marcin 'Shard' Konicki

Fri Oct 31 15:35:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: always generate line numbers

Fri Oct 31 11:53:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed another regression introduced in fixing #125823

Fri Oct 31 11:33:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: previous fix for #124044 was broken, correct
	  fix provided.
	* HTMLparser.c parser.c parserInternals.c xmlIO.c: fix xmlStopParser()
	  and the error handlers to address #125877

Thu Oct 30 23:10:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: side effect of #123105 patch, namespace resolution
	  would fail when defined in internal entities, fixes #125823

Thu Oct 30 14:10:42 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: be more defensive in the xmlReader python bindings
	  fixing bug #124044

Thu Oct 30 11:14:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: the a-posteriori DTD validation code was not validating
	  the namespace declarations, this fixes #124110

Wed Oct 29 14:13:03 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: enhanced to bypass compression detection code
	  when input file is stdin (bug 125801)

Wed Oct 29 18:21:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix needed when HTTP is not compiled in by Mark Vakoc

Wed Oct 29 18:05:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: more fixes about unregistering objects
	* include/libxml/relaxng.h: applied patch from Mark Vakoc
	  missing _cplusplus processing clause

Wed Oct 29 07:49:52 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* include/libxml/parser.h parser.c: added xmlStrVPrintf function

Wed Oct 29 14:37:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c testThreads.c threads.c: applied patch from
	  Marcin 'Shard' Konicki to provide BeOS thread support.

Wed Oct 29 14:20:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h: applied patch
	  from Steve Ball to make a schema parser from a preparsed document.

Wed Oct 29 13:52:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied a couple of patches from Mark Lilback about text
	  nodes coalescing

Wed Oct 29 12:16:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: change suggested by Anthony Carrico when unregistering
	  a namespace prefix to a context
	* hash.c: be more careful about calling callbacks with NULL payloads.

Wed Oct 29 00:04:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.1, updated and
	  regenerated docs and APIs
	* parser.c: cleanup and last change to fix #123105

Tue Oct 28 23:02:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Fix #124907 by simply backporting the same
	  fix as for the XML parser
	* result/HTML/doc3.htm.err: change to ID detecting modified one
	  test result.

Tue Oct 28 22:28:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: included a new function
	  to reuse a Push parser context, based on Graham Bennett original
	  code
	* valid.c: in HTML, a name in an input is not an ID
	* TODO: bug list update

Tue Oct 28 19:54:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied patch from nico@xtradyne.com for #125030

Tue Oct 28 16:42:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* error.c valid.c include/libxml/xmlerror.h: fixing bug #125653
	  sometimes the error handlers can get a parser context on DTD
	  errors, and sometime they don't. So be very careful when trying
	  to grab those informations.

Tue Oct 28 15:26:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Kasimier Buchcik which fixes a 
	  problem in xmlSearchNs introduced in 2.6.0

Tue Oct 28 14:57:03 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #123263, the encoding is mandatory in a textdecl.

Tue Oct 28 13:48:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix bug #125047 about serializing when finding a 
	  document fragment node.

Mon Oct 27 11:11:29 EST 2003 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: fix bug #125592 need a NULL check
	* include/libxml/chvalid.h: rename a parameter

Mon Oct 27 09:43:48 EST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from #123105 about defaulted attributes
	  from element coming from an entity

Mon Oct 27 21:12:27 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmllint.c: fixed warning message from IRIX (bug 125182)
	* python/libxml.py: removed tabs, replaced with spaces
	  (bug 125572)

Mon Oct 27 06:17:30 EST 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.h parserInternals.c xmlIO.c: make sure we report errors
	  if xmlNewInputFromFile() fails.
	* xmlreader.c: avoid using _private for the node or document
	  elements.

Sat Oct 25 17:33:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js: added declaration for verMicroSuffix

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

	* libxml.m4: applied patch from Patrick Welche provided in
	  bug #125432 , future proofing the .m4 file.
	* parser.c: resetting the context should also reset the error
	* TODO: problem of conformance w.r.t. E20 was raised in the
	  XML Core telconf and libxml2 isn't conformant there.

Wed Oct 22 14:33:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Alfred Mickautsch fixing #125180

Wed Oct 22 10:50:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.c genChRanges.py: Stéphane Bidoul pointed out another
	  small glitch missing a const

Wed Oct 22 10:43:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.c genChRanges.py: Stéphane Bidoul pointed out that
	  it doesn't define IN_LIBXML

Tue Oct 21 21:14:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.mingw: typo pointed out by Stéphane Bidoul

Tue Oct 21 11:26:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc
	  win32/configure.js: set of Win32 patches for 2.6.0 by Joachim Bauch

Tue Oct 21 02:07:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: last minute patch from Eric Zurcher making it into 2.6.0

Tue Oct 21 02:03:03 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/libxml2.xsa: preparing libxml2-2.6.0
	* doc/*: updated and regenerated the docs and API

Tue Oct 21 01:01:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c error.c tree.c: moved the line number to their proper
	  field in elements now.

Tue Oct 21 00:28:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in xmlwriter.c Makefile.am include/libxml/xmlwriter.h
	  include/libxml/Makefile.am include/libxml/xmlversion.h.in:
	  added the xmlWriter module contributed by Alfred Mickautsch
	* include/libxml/tree.h: added room for line and extra information
	* xmlreader.c python/tests/reader6.py: bugfixing some problem some
	  of them introduced in September
	* win32/libxml2.def.src doc/libxml2-api.xml: regenerated the API

Mon Oct 20 19:02:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in xmldwalk.c xmlreader.c
	  include/libxml/Makefile.am include/libxml/xmldwalk.h
	  include/libxml/xmlversion.h.in: removing xmldwalk module
	  since it got merged with the xmlreader.
	* parser.c: cleanup
	* win32/libxml2.def.src python/libxml2class.txt doc/libxml2-api.xml:
	  rebuilt the API
	* python/tests/Makefile.am python/tests/reader7.py
	  python/tests/walker.py: adding regression testing for the
	  new xmlreader APIs, new APIs for reader creation, including
	  makeing reader "walker" operating on preparsed document trees.

Sun Oct 20 22:37:03 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* entities.c, valid.c: fixed problem reported on the mailing
	  list by Melvyn Sopacua - wrong argument order on functions
	  called through xmlHashScan.

Sun Oct 19 23:57:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlIO.c: fixes for compiling using --with-minimum

Sun Oct 19 23:46:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: cleanup xmlNodeGetContent() reusing xmlNodeBufGetContent(),
	  tested it through the xslt regression suite.

Sun Oct 19 22:42:16 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: adding xmlNodeBufGetContent()
	  allowing to grab the content without forcing allocations.
	* python/libxml2class.txt doc/libxml2-api.xml: rebuilt the API
	* xpath.c xmldwalk.c: removed a couple of comment errors.

Sun Oct 19 16:39:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Chris Anderson to change back
	  memcmp with CMPx()

Sun Oct 19 16:24:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed to not send NULL to %s printing
	* python/tests/error.py result/HTML/doc3.htm.err
	  result/HTML/test3.html.err result/HTML/wired.html.err
	  result/valid/t8.xml.err result/valid/t8a.xml.err: cleaning
	  up some of the regression tests error

Sun Oct 19 15:31:43 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/nanohttp.h include/libxml/parserInternals.h 
	  include/libxml/xmlIO.h nanohttp.c parserInternals.c xmlIO.c:
	  Fixed the HTTP<->parser interraction, which should fix 2 long
	  standing bugs #104790 and #124054 , this also fix the fact that
	  HTTP error code (> 400) should not generate data, we usually
	  don't want to parse the HTML error information instead of the
	  resource looked at.

Sun Oct 19 19:20:48 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: enhanced the installation of tutorial files
	  to avoid installing CVS subdirectories (bug 122943)

Sun Oct 19 17:33:27 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: fixed segfault when input file not present
	* tree.c: changed output formatting of XML_CDATA_SECTION
	  (bug 120917)

Sun Oct 19 00:15:38 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/parserInternals.h HTMLparser.c HTMLtree.c
	  SAX2.c catalog.c debugXML.c entities.c parser.c relaxng.c
	  testSAX.c tree.c valid.c xmlschemas.c xmlschemastypes.c
	  xpath.c: Changed all (?) occurrences where validation macros
	  (IS_xxx) had single-byte arguments to use IS_xxx_CH instead
	  (e.g. IS_BLANK changed to IS_BLANK_CH).  This gets rid of
	  many warning messages on certain platforms, and also high-
	  lights places in the library which may need to be enhanced
	  for proper UTF8 handling.

Sat Oct 18 20:34:18 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h,
	  doc/apibuild.py: enhanced to include enough comments to
	  make the api doc generation happy.

Sat Oct 18 07:28:25 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c xmlIO.c include/libxml/nanohttp.h: starting work
	  to fix the HTTP/XML parser integration.

Sat Oct 18 11:04:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: added new APIs
	  for creating reader from sources or reusing a reader with
	  a new source, like the xmlReadxx and xmlCtxtReadxxx
	* win32/libxml2.def.src doc/libxml2-api.xml doc/apibuild.py
	  doc/Makefile.am: regenerated the APIs
	* doc/xml.html: applied a patch from Stefan Kost for namespace docs

Sat Oct 18 12:46:02 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h,
	  include/libxml/parserInternals.h: enhanced macros to avoid
	  breaking ABI from previous versions.
	* catalog.c, parser.c, tree.c: modified to use IS_* macros
	  defined in parserInternals.h.  Makes maintenance much easier.
	* testHTML.c, testSAX.c, python/libxml.c: minor fixes to avoid
	  compilation warnings
	* configuration.in: fixed pushHTML test error; enhanced for
	  better devel (me) testing

Fri Oct 17 14:38:54 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* legacy.c: remove the warning for startDocument(), as it is used by
	  glade (or glade-python)
	* parser.c relaxng.c xmlschemastypes.c: fixed an assorted set of
	  invalid accesses found by running some Python based regression
	  tests under valgrind. There is still a few leaks reported by the
	  relaxng regressions which need some attention.
	* doc/Makefile.am: fixed a make install problem c.f. #124539
	* include/libxml/parserInternals.h: addition of xmlParserMaxDepth
	  patch from crutcher

Wed Oct 15 12:47:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: Marc Liyanage pointed out that xmlCleanupParser()
	  was missing xmlCleanupInputCallbacks and xmlCleanupOutputCallbacks
	  calls.

Wed Oct 15 10:16:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* vms/build_libxml.com trionan.c: VMS patch from Craig A. Berry

Mon Oct 13 21:46:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: small fix from Bjorn Reese

Mon Oct 13 15:59:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix a call missing arguments

Sun Oct 12 18:42:18 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h: fixed
	  a bug in the range search; enhanced range generation (inline code
	  if a small number of intervals); enhanced the readability of the
	  output files.

Sun Oct 12 00:52:14 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.def chvalid.c include/libxml/chvalid.h: rebuilt 
	  chvalid.def from scratch based on XML 2nd edition REC
	  and regenerated the code.

Sat Oct 11 22:54:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: removed some annoying warnings
	* chvalid.def chvalid.c include/libxml/chvalid.h: fixed a bug
	  in the PubidChars definition, regenerated, there is still
	  a bug left somewhere
	* genChRanges.py: save the header directly in include/libxml/
	* configure.in: I generated a 2.6.0beta6 earlier today

Sat Oct 11 23:32:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* fixed small error on previous commit (chvalid.h in
	  base dir instead of include directory)

Sat Oct 11 23:11:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRange.py, chvalid.def, chvalid.c, include/libxml/chvalid.h:
	  new files for a different method for doing range validation
	  of character data.
	* Makefile.am, parserInternals.c, include/libxml/Makefile.am,
	  include/libxml/parserInternals.h: modified for new range method.
	* catalog.c: small enhance for warning message (using one
	  of the new range routines)

Sat Oct 11 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/valid.h: adding an serror field to
	  the validation context breaks the ABI for the xmlParserCtxt
	  structure since it's embedded by content and not by reference

Sat Oct 11 12:46:49 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: patch from Mike Hommey
	* threads.c: applied Windows patch from Jesse Pelton and Stephane
	  Bidoul
	* parser.c: fix the potentially nasty access to ctxt->serror
	  without checking first that the SAX block is version 2

Fri Oct 10 21:34:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed a nasty bug with interning some text strings
	* configure.in: prepare for beta5 of 2.6.0
	* libxml.h nanoftp.c nanohttp.c xmlIO.c include/libxml/xmlerror.h:
	  better error handling for I/O and converted FTP and HTTP
	* parser.c: fixed another bug

Fri Oct 10 16:45:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed uninitialized new field.
	* result/VC/OneID2 result/relaxng/*.err: fixed a typo updating
	  all messages

Fri Oct 10 16:19:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: make room in Doc, Element, Attributes
	  for PSVI type 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 easily.
	* result/VC/* result/valid/rss.xml.err result/valid/xlink.xml.err:
	  updated the results to follow the errors string generated by
	  last commit.

Tue Oct  7 14:16:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/xmlerror.h: last cleanup of error
	  handling in the Relax-NG module.

Tue Oct  7 13:30:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c relaxng.c include/libxml/xmlerror.h: switched Relax-NG
	  module to the new error reporting. Better default report, adds
	  the element associated if found, context and node are included
	  in the xmlError
	* python/tests/reader2.py: the error messages changed.
	* result/relaxng/*: error message changed too.

Mon Oct  6 10:46:35 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc
	  win32/configure.js: applied patch from Stéphane Bidoul to
	  fix the compilation of 2.6.0 code on Win32

Mon Oct  6 10:16:30 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: fixing the script
	* parser.c: replace sequences of RAW && NXT(.) == '.' with
	  memcmp calls, seems to not break conformance, slightly inflate
	  the size of the gcc generated code though.

Sun Oct  5 23:30:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c parser.c valid.c include/libxml/parserInternals.h:
	  more cleanup of error handling in parserInternals, sharing the
	  routine for memory errors.

Sun Oct  5 15:49:14 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c Makefile.am legacy.c parser.c parserInternals.c
	  include/libxml/xmlerror.h: more code cleanup, especially around
	  error messages, the HTML parser has now been upgraded to the new
	  handling.
	* result/HTML/*: a few changes in the resulting error messages

Sat Oct  4 23:06:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: more error/warning
	  handling cleanups, the XML parser module should be okay now.

Sat Oct  4 01:58:27 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in xmldwalk.c include/libxml/Makefile.am
	  include/libxml/xmldwalk.h include/libxml/xmlversion.h.in:
	  integrated the xmlDocWalker API given by Alfred Mickautsch,
	  and providing an xmlReader like API but working on a xmlDocPtr.

Sat Oct  4 00:18:29 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: more cleanup in make tests
	* error.c valid.c parser.c include/libxml/xmlerror.h: more work
	  in the transition to the new error reporting strategy.
	* python/tests/reader2.py  result/VC/* result/valid/*:
	  few changes in the strings generated by the validation output

Fri Oct  3 00:19:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: changed 'make tests' to use a concise output,
	  scrolling to see where thing broke wasn't pleasant
	* configure.in: some beta4 preparation, but not ready yet
	* error.c globals.c include/libxml/globals.h include/libxml/xmlerror.h:
	  new error handling code, last error informations are stored
	  in the parsing context or a global variable, new APIs to
	  handle the xmlErrorPtr type.
	* parser.c parserInternals.c valid.c : started migrating to the
	  new error handling code, it's a royal pain.
	* include/libxml/parser.h include/libxml/parserInternals.h:
	  moved the definition of xmlNewParserCtxt()
	* parser.c: small potential buffer access problem in push code
	  provided by Justin Fletcher
	* result/*.sax result/VC/PENesting* result/namespaces/*
	  result/valid/*.err: some error messages were sligthly changed.

Thu Oct  2 13:01:13 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* include/libxml/parser.h parser.c: introduced xmlStrPrintf
	function (wrapper around snprintf)

Wed Oct  1 21:12:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: Fix error on output of high codepoint charref like
	  &#x10FFFF; , reported by Eric Hanchrow

Wed Oct  1 14:20:10 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c include/libxml/DOCBparser.h: let's see how much
	  of a pain murrayc is really gonna be.

Wed Oct  1 11:03:40 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: Applied fix for bug #123481 reported by Peter Derr

Tue Sep 30 15:34:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c legacy.c parser.c: made the predefined entities
	  static predefined structures to avoid the work, memory and
	  hazards associated to initialization/cleanup.

Tue Sep 30 14:30:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c Makefile.am configure.in legacy.c parser.c
	  parserInternals.c testHTML.c xmllint.c include/libxml/HTMLparser.h
	  include/libxml/parser.h include/libxml/parserInternals.h
	  include/libxml/xmlversion.h.in: added a new configure
	  option --with-push, some cleanups, chased code size anomalies.
	  Now a library configured --with-minimum is around 150KB,
	  sounds good enough.

Tue Sep 30 12:31:00 AEST 2003 Malcolm Tredinnick <malcolm@commsecure.com.au>

	* libxml-2.0-uninstalled.pc.in: New file for building against
	uninstalled libxml2 builds.
	* configure.in, Makefile.am: Support the *-uninstalled.pc file.
	* .cvsignore: Ignore the new generated *.pc file.

Tue Sep 30 02:38:16 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am SAX.c SAX2.c configure.in globals.c parser.c
	  parserInternals.c testReader.c testSAX.c xmlIO.c xmllint.c
	  xmlreader.c example/gjobread.c include/libxml/xmlversion.h.in:
	  added 2 new configure option: --with-reader --with-sax1
	  to allow removing the reader or non-xmlReadxxx() interfaces.

Mon Sep 29 19:58:26 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in entities.c tree.c valid.c xmllint.c
	  include/libxml/tree.h include/libxml/xmlversion.h.in:
	  Adding a configure option to remove tree manipulation
	  code which is not strictly needed by the parser.

Mon Sep 29 15:23:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: last finishing touch to the BeOS
	  patch from Marcin 'Shard' Konicki

Mon Sep 29 15:15:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c SAX2.c c14n.c catalog.c configure.in debugXML.c
	  encoding.c entities.c nanoftp.c nanohttp.c parser.c relaxng.c
	  testAutomata.c testC14N.c testHTML.c testRegexp.c testRelax.c
	  testSchemas.c testXPath.c threads.c tree.c valid.c xmlIO.c
	  xmlcatalog.c xmllint.c xmlmemory.c xmlreader.c xmlschemas.c
	  example/gjobread.c include/libxml/HTMLtree.h include/libxml/c14n.h
	  include/libxml/catalog.h include/libxml/debugXML.h
	  include/libxml/entities.h include/libxml/nanohttp.h
	  include/libxml/relaxng.h include/libxml/tree.h
	  include/libxml/valid.h include/libxml/xmlIO.h
	  include/libxml/xmlschemas.h include/libxml/xmlversion.h.in
	  include/libxml/xpathInternals.h python/libxml.c:
	  Okay this is scary but it is just adding a configure option
	  to disable output, this touches most of the files.

Mon Sep 29 12:53:56 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: better fix, avoids breaking the python bindings

Mon Sep 29 11:21:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: fix a compilation problem when configuring
	  with debug but without mem-debug

Sun Sep 28 20:53:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup, creating a new legacy.c module,
	  made sure make tests ran in reduced conditions
	* SAX.c SAX2.c configure.in entities.c globals.c parser.c
	  parserInternals.c tree.c valid.c xlink.c xmlIO.c xmlcatalog.c
	  xmlmemory.c xpath.c xmlmemory.c include/libxml/xmlversion.h.in:
	  increased the modularization, allow to configure out 
	  validation code and legacy code, added a configuration
	  option --with-minimum compiling only the mandatory code
	  which then shrink to 200KB.

Sun Sep 28 02:15:07 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a bug raised by the Mips compiler.
	* include/libxml/SAX.h include/libxml/parser.h: move the 
	  SAXv1 block definitions to parser.h fixes bug #123380
	* xmlreader.c include/libxml/xmlreader.h: reinstanciate
	  the attribute and element pool borken 2 commits ago.
	  Start playing with an entry point to preserve a subtree.
	* entities.c: remove a warning.

Sat Sep 27 12:19:38 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, parser.c, relaxng.c: further (final?) minor
	  changes for compilation warnings. No change to logic.

Fri Sep 26 18:03:42 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed small problem with missing entities (test/ent2)

Sat Sep 27 01:25:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: William's change allowed to spot a nasty bug in xmlDoRead
	  if the result is not well formed that ctxt->myDoc is not NULL
	  and uses the context dictionary.

Fri Sep 26 21:09:34 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: other patches from William Brack to avoid
	  compilation warnings on AIX.

Fri Sep 26 11:03:08 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c, entities.c, xmlreader.c: minor change to
	  avoid compilation warnings on some (e.g. AIX) systems

Fri Sep 26 16:49:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixed a backward compatibility problem
	  when formatting "deprecated SAXv1 function ignorableWhitespace"
	  could be reproduced by xmllint --format

Fri Sep 26 15:50:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml: rebuilt the API
	* xmllint.c doc/xmllint.1 doc/xmllint.xml: added the new options
	  --nocdata and --nsclean to remove CDATA section and surperfluous
	  namespace declarations
	* parser.c SAX2.c: implementation of the 2 new options

Fri Sep 26 14:41:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c testHTML.c xmllint.c include/libxml/HTMLparser.h:
	  added the same htmlRead APIs than their XML counterparts
	* include/libxml/parser.h: new parser options, not yet implemented,
	  added an options field to the context.
	* tree.c: patch from Shaun McCance to fix bug #123238 when ]]>
	  is found within a cdata section.
	* result/noent/cdata2 result/cdata2 result/cdata2.rdr
	  result/cdata2.sax test/cdata2: add one more cdata test

Thu Sep 25 23:03:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmllint.c doc/libxml2-api.xml include/libxml/parser.h:
	  Changed the new xmlRead/xmlCtxtRead APIs to have an extra
	  base URL parameter when not loading from a file or URL.

Thu Sep 25 16:23:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing a beta3 solving the ABI problems
	* globals.c parser.c parserInternals.c testHTML.c HTMLparser.c SAX.c
	  include/libxml/globals.h include/libxml/SAX.h: make sure the
	  global variables for the default SAX handler are V1 ones to
	  avoid ABI compat problems.
	* xmlreader.c: cleanup of uneeded code
	* hash.c: fix a comment

Thu Sep 25 14:16:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c hash.c parser.c include/libxml/xmlexports.h 
	  include/libxml/xmlmemory.h include/libxml/xmlversion.h.in:
	  fixing some comments to avoid warnings from apibuild.py

Wed Sep 24 23:42:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: patch from Stéphane Bidoul for configuring
	  the beta2 version #123104

Wed Sep 24 23:17:59 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: adding repeated parsing and validating tests
	* SAX2.c parser.c tree.c include/libxml/parser.h: make the new
	  DOM tree building interfaces use the dictionary from the 
	  parsing context to build the element and attributes names
	  as well as formatting spaces and short text nodes
	* include/libxml/dict.h dict.c: added some reference counting
	  for xmlDictPtr because they can be shared by documents and
	  a parser context.
	* xmlreader.c: a bit of cleanup, remove the specific tree freeing
	  functions and use the standard ones now.
	* xmllint.c: add --nodict
	* python/libxml.c: fix a stupid bug so that ns() works on 
	  attribute nodes.

Tue Sep 23 23:07:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: adding a new set of
	  API for parsing xmlReadDoc() xmlReadFile() ... xmlReadIO()
	  and xmlCtxtReadDoc() ... xmlCtxtReadIO(). That with
	  a clear define of xmlParserOption, xmlCtxtUseOptions()
	  should simplify custom parsing without being tempted to
	  use global variables, and xmlCtxtReset() should allow reuse
	  of a context for multiple parsing.
	* xmllint.c: switched to use xmlReadXXX, allow options to
	  be used simultaneously with less troubles.
	* tree.c: simple warning removal
	* doc/apibuild.py: small fix
	* doc/libxml2-api.xml win32/libxml2.def.src: updated

Tue Sep 23 11:15:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: revert xmlCreateDocParserCtxt() since this break
	  the parseDoc() python bindings

Tue Sep 23 11:00:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: make sure xmlDetectSAX2() is called only at 
	  parsing time to avoid breaking apps changing the SAX
	  callbacks after context allocation, change xmlCreateDocParserCtxt()
	  to use an immutable buffer instead of a copy

Tue Sep 23 09:40:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Markus Keim fixing a problem
	  with I/O callback registration.
	* include/libxml/xmlerror.h: fixed #122994 comment numbering
	  for xmlParserErrors

Mon Sep 22 12:21:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: the uri arg to xmlNodeSetBase is
	  really a const xmlChar*
	* xmlreader.c include/libxml/xmlreader.h: addin the
	  xmlTextReaderConstString() to get an interned string from
	  the reader

Sun Sep 20 17:22:20 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c: fixed a warning message (trivial)
	* doc/search.php: removed incorrect warning message when word
	  search not found in last of multiple tables (bug 119535)

Fri Sep 19 14:26:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing a 2.6.0-beta2 release
	* xmlIO.c: avoid a warning
	* tree.c: avoid duplicate code in xmlReplaceNode as pointed out
	  by Chris Ryland
	* include/libxml/dict.h: add a QName access lookup to the
	  dictionary.
	* xmlreader.c include/libxml/xmlreader.h: adding const access
	  based on the dictionary interface for string read from the
	  reader, the node content access is still TODO, it's too different

Fri Sep 19 00:01:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixing namespace DTD validations
	* result/valid/ns2.xml result/valid/ns.xml: the output of defaulted
	  namespaces is slightly different now.
	* Makefile.am: report the memory used in Timingtests (as well as time)

Thu Sep 18 15:29:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: add streaming on memory regression tests, found
	  bad bugs in the reader interface
	* xmlreader.c: fixing bugs w.r.t. very large names, and special
	  condition in end of file.
	* xmlIO.c tree.c include/libxml/tree.h include/libxml/xmlIO.h:
	  adding immutable buffers, and parser input based on those,
	  but this should not be used (yet) for general parsing
	* parser.c: added a comment about using immutable buffers for
	  general parsing.
	* result/bigname.xml.rdr result/bigname2.xml.rdr: fixing the
	  output of the regression tests
	* xmllint.c: using the immutable buffers when streaming on
	  mmaped file (--stream --memory)

Thu Sep 18 12:04:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c: the last patch broke unicity of returned strings, removed

Thu Sep 18 00:31:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: add a Timingtests target to check bad behaviour
	  from the streaming engine
	* dbgen.pl dbgenattr.pl: perl script to generate big instances
	* xmlreader.c: fix a bad behaviour on large buffer inputs

Wed Sep 17 23:25:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c xmlreader.c: two small improvements

Wed Sep 17 22:53:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: avoid a leak with previous patch

Wed Sep 17 22:06:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: use stderr and not stdout for default errors
	  in python environment bug #122552

Wed Sep 17 21:33:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: small fix from Rob Richards for input filename
	* xmllint.c: fixes for --repeat and --memory/--stream for speed tests
	* xmlIO: adding a guard in one function

Wed Sep 17 15:57:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c xmlreader.c include/libxml/parser.h: more performance hunting
	  reducing memory allocation and free and avoiding expensive routines

Wed Sep 17 12:23:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c parser.c parserInternals.c xmlreader.c: started messing
	  seriously with per-document dict and element and attribute nodes
	  reuse in the xmlReader. This seems to lead to an interesting
	  speedup of the xmlReader already.

Wed Sep 17 01:07:56 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h: do string allocations in large
	  pools, allowing to find if a string pertain to a dict quickly
	* xmllint.c: fix --stream --repeat --timing
	* Makefile.am: the testThreads run output should be seen.

Mon Sep 15 16:46:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c include/libxml/parser.h: starting work on reusing the
	  parser dictionary for the element and attribute tag names.
	  Add pools for Element and Attributes in the parser context,
	  which should help speeding up the reader.
	* Makefile.am result/*.rdr : adding non-python reader regression
	  tests.

Mon Sep 15 14:54:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c parser.c valid.c: starting to cleanup some of the
	  problems exposed by the W3C/NIST regression suite.
	* result/ent7.sax result/xml2.sax: small fixes.

Mon Sep 15 11:46:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: more parser error factoring

Sun Sep 14 21:53:39 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLtree.c: Fixed bug 121394 - missing ns on attributes

Sun Sep 14 21:43:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: factoring of more 
	  error handling code, serious size reduction and more lisibility
	  of the resulting code.
	* parserInternals.c parser.c include/libxml/parserInternals.h
	  include/libxml/parser.h: changing the way VC:Proper Group/PE Nesting
	  checks are done, use a counter for entities. Entities where freed and
	  reallocated at the same address failing the check.
	* tree.c: avoid a warning
	* result/valid/* result/VC/*: this slightly changes some validation
	  error messages.

Sun Sep 14 11:03:27 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* valid.c: fixed bug 121759 - early declaration of
	  attribute-list in external DTD

Sat Sep 13 14:42:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: starting cleaning up
	  error handling, factorize error processing
	* doc/xmllint.html: update of the page, remove --sgml

Sat Sep 13 02:13:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am DOCBparser.c parserInternals.c testDocbook.c
	  xmllint.c doc/xmllint.xml doc/xmllint.1: removing the 
	  broken pseudo SGML DocBook parser code.

Fri Sep 12 17:24:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix a problem with strcpy() in xmlXPathFormatNumber()
	  valgrind pointed out the strings overlapped. cleanup .

Fri Sep 12 11:43:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied speedup to xmlSearchNs() as suggested by
	  Luca Padovani. Cleaned up xmlSearchNsByHref() in the process
	  applying the same trick.

Fri Sep 12 01:36:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c tree.c include/libxml/parser.h
	  include/libxml/xmlerror.h: adding namespace checkings
	  while making sure they still parse as wellformed documents.
	  Add an nsWellFormed status report to the context, and 
	  provide new appropriate error codes.
	* Makefile.am result/namespaces/* test/namespaces/*: add 
	  specific regression testing for the new namespace support
	* test/att5 result/noent/att5 result/att5 result/att5.sax:
	  add more coverage for the attribute parsing and normalization
	  code.

Fri Sep 12 01:34:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* threads.c: backport of a thread bugfix from 2_5_X branch

Thu Sep 11 18:29:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug in one corner case of attribute parsing.

Thu Sep 11 16:21:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* : 2.6.0beta1 changes
	* SAX2.c hash.c parser.c parserInternals.c: Fixing attribute
	  normalization, might not be totally fixed but this should 
	  make sure SAX event provide the right strings for attributes
	  except entities for which libxml2 is different by default
	  This should fix #109564
	* result/attrib.xml.sax result/ent3.sax result/p3p.sax: minor changes
	  in attribute callback values
	* result/c14n/with-comments/example-4
	  result/c14n/without-comments/example-4: this also fixes a subtle
	  bug in the canonicalization tests.

Wed Sep 10 12:38:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	Time to commit 3 days of work rewriting the parser internal,
	fixing bugs and migrating to SAX2 interface by default. There
	is some work letf TODO, like namespace validation and attributes
	normalization (this break C14N right now)
	* Makefile.am: fixed the test rules
	* include/libxml/SAX2.h include/libxml/parser.h
	  include/libxml/parserInternals.h SAX2.c parser.c
	  parserInternals.c: changing the parser, migrating to SAX2,
	  adding new interface to switch back to SAX1 or initialize a
	  SAX block for v1 or v2. Most of the namespace work is done
	  below SAX, as well as attribute defaulting
	* globals.c: changed initialization of the default SAX handlers
	* hash.c tree.c include/libxml/hash.h: added QName specific handling
	* xmlIO.c: small fix
	* xmllint.c testSAX.c: provide a --sax1 switch to test the old
	  version code path
	* result/p3p result/p3p.sax result/noent/p3p test/p3p: the new code
	  pointed out a typo in a very old test namespace

Sun Sep  7 19:58:33 PTD 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c include/libxml/xmlIO.h parser.c: Implemented detection
	  of compressed files, setting doc->compressed appropriately
	  (bug #120503).

Sun Sep  7 22:53:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: try to cope with the fact that apps may still
	  have allocated smaller SAX callbak block

Sun Sep  7 11:11:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c: allow to give -1 for undefined length in lookups
	* include/libxml/parser.h parser.c parserInternals.c testSAX.c:
	  first round of work on the new SAX2 interfaces, the API
	  will change but commiting before changing for historical
	  reference.

Sat Sep  6 10:55:01 PTD 2003 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, xmlIO.c: fixed bug #121210 (callback to sax->error,
	  sax->warning with wrong params).

Fri Sep  5 10:33:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h: patch from Stéphane Bidoul to export
	  globals entry points to the python bindings

Wed Sep  3 15:24:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: when creating a DOCTYPE use "html" lowercase
	  by default instead of "HTML"
	* parser.c xmlreader.c: optimization, gain a few % parsing speed by
	  avoiding calls to "areBlanks" when not needed.
	* include/libxml/parser.h include/libxml/tree.h: some structure
	  extensions for future work on using per-document dictionaries.

Wed Sep  3 15:08:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am results/*.sax SAXResult/*: removing the SAXresults
	  tree, keeping result in the same tree, added SAXtests to the
	  default "make tests"

Tue Sep  2 15:59:04 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlexports.h: defined additional macros which
	  affect exports and added mingw section

Mon Sep  1 15:15:18 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/index.py: fixed problem parsing xhtml docs
	* doc/xmlreader.html,doc/guidelines.html: small modification
	  to avoid problem in python parsing.
	* doc/search.php: fixed upper case filename problem for XSLT docs

Mon Sep  1 22:55:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: patch from Mark Vakoc that allows compiling 
	  with XInclude but without XPointer support.

Mon Sep  1 22:31:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in xml2-config.in: Applied a patch from Kevin P. Fleming
	  to add --libtool-libs option to xml2-config script.

Sun Aug 31 21:52:12 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/README.docs, doc/Makefile.am: new file added,
	  giving some description of the documentation generation process
	* doc/search.php: fixed problem with upper case on filenames

Fri Aug 29 12:25:01 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: updates by Eric Zurcher

Thu Aug 28 22:58:38 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/apibuild.py, doc/libxml2-api.xml: enhanced code
	  to compensate for pollution from Igor's header taint
	  (quick before Daniel notices)

Thu Aug 28 23:01:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed a namespace error on attribute reporting bug
	  pointed out by Tobias Reif
	* test/p3p result/p3p result/noent/p3p: this test case was wrong
	  using xmlsn instead of xmlns...

Thu Aug 28 18:25:07 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/globals.h include/libxml/xmlexports.h: fixed
	  typos reported by Mark Vakoc

Thu Aug 28 08:59:51 MDT 2003 John Fleck <jfleck@inkstain.net>

	add:
	* doc/tutorial/api.html
	* doc/tutorial/ar01s09.html
	* doc/tutorial/includexpath.c
	updated
	* doc/tutorial/*.html
	fix my bad - forgot to check in new files when I last
	updated

Thu Aug 28 14:31:13 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: new file, support for Borland C++
	* xmllint.c: fixed time inclusion for various compilers

Thu Aug 28 12:32:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c parserInternals.c DOCBparser.c HTMLparser.c: added
	  few casts to shut the compiler warnings

Thu Aug 28 12:23:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: fixed for mingw

Thu Aug 28 10:01:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c threads.c: fixing bug #120870 try to avoid problem
	  with uninitialized mutexes

Wed Aug 27 16:12:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed an error reporting bug in Relax-NG when we end
	  up with multiple states, select the "best" one. Fix #120682
	* result/relaxng/tutor11_2_3.err: small change resulting 

Wed Aug 27 11:25:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied base64 support patch from Anthony Carrico

Wed Aug 27 10:58:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/[threads-xpointer].h: realigned parameters
	  after taint

Wed Aug 27 09:59:54 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlexports.h: fixed defs for Borland compiler,
	  as reported by Eric Zurcher

Tue Aug 26 15:54:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #120386 again a problem introduced when
	  trying to reuse automata for content validation. Fix a bug report
	  problem on zeroOrMore
	* result/relaxng/tutor3_7_err: change slightly error reporting.

Mon Aug 25 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: make sure the new header will
	  be included when generating a new distribution.

Mon Aug 25 12:37:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a couple of stupid bugs in the state allocation
	  routines which led to bug #120040 and the ones reported by
	  Martijn Faassen

Mon Aug 25 12:37:23 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/parserInternals.h include/libxml/relaxng.h
	  include/libxml/SAX.h include/libxml/SAX2.h: realigned the
	  parameters after taint.

Mon Aug 25 11:16:01 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlversion.h.in: moved export defs to a separate
	  file for consistency.
	* include/libxml/xmlexports.h: new file, contains export defs.

Mon Aug 25 11:01:49 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/*.h genUnicode.py: exportability taint
	  of the headers.

Thu Aug 21 12:37:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: make the deprecated interfaces log an error message
	  to be sure it won't get used.

Thu Aug 21 00:50:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am SAX2.c include/libxml/Makefile.am include/libxml/SAX2.h:
	  Adding new version of the SAX interface, it's not there yet,
	  currently just preparing the work
	* globals.c parser.c SAX.c include/libxml/SAX.h 
	  include/libxml/globals.h include/libxml/parser.h: doing some
	  refactoring of the SAXv1 interfaces, obsoleting a bunch of them
	  while keeping functionalities, preparing SAX2 integration.
	* dict.c: small cleanup.

Wed Aug 20 00:20:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixes a small bug introduced in last commit and detected
	  by valgrind.

Tue Aug 19 16:54:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c hash.c: optimization when freeing hash tables.
	* parser.c xmlIO.c include/libxml/tree.h: some tuning of buffer
	  allocations
	* parser.c parserInternals.c include/libxml/parser.h: keep a
	  single allocated block for all the attributes callbacks,
	  avoid useless malloc()/free()
	* tree.c: do not realloc() when growing a buffer if the buffer
	  ain't full, malloc/memcpy/free avoid copying memory.

Mon Aug 18 18:37:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c doc/xmllint.xml doc/xmllint.1: added option
	  --dtdvalidfpi for Tobias Reif

Mon Aug 18 14:03:03 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h Makefile.am include/libxml/Makefile.am:
	  new dictionary module to keep a single instance of the names used
	  by the parser
	* DOCBparser.c HTMLparser.c parser.c parserInternals.c valid.c:
	  switched all parsers to use the dictionary internally
	* include/libxml/HTMLparser.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/valid.h:
	  Some of the interfaces changed as a result to receive or return
	  "const xmlChar *" instead of "xmlChar *", this is either
	  insignificant from an user point of view or when the returning
	  value changed, those function are really parser internal methods
	  that no user code should really change
	* doc/libxml2-api.xml doc/html/*: the API interface changed and
	  the docs were regenerated

Sun Aug 17 23:05:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch to xmlCleanupParser from Dave Beckett

Sat Aug 16 22:53:42 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/parsedecl.py, doc/libxml2-refs.xml, doc/API*.html:
	  fixed part (2) of bug 119535 (wrong alpha case on filenames)

Sat Aug 16 20:35:28 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/API*.html, doc/html/*: regenerated API documentation
	  for xmlsoft.org (part of Bug 119535)

Fri Aug 15 14:58:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, threads.c, include/libxml/HTMLparser.h,
	  doc/libxml2-api.xml: Minor changes to comments, etc. for
	  improving documentation generation
	* doc/Makefile.am: further adjustment to auto-generation of
	  win32/libxml2.def.src

Fri Aug 15 02:24:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* News configure.in: preparing libxml2-2.5.10 release
	* doc/* : updated the doc and rebuilt

Fri Aug 15 01:55:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing the xmlSAXParseDTD bug #119536 raised by
	  Malcolm Tredinnick with the patch he suggested.

Fri Aug 15 01:37:10 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: allocation error #119784 raised by Oliver Stoeneberg

Fri Aug 15 00:41:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c: fixing an use of strcpy() where both strings overlap
	  pointed out by valgrind.

Thu Aug 14 17:10:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c globals.c include/libxml/xmlmemory.h: get rid of
	  some compilation warnings.
	* xinclude.c: fix the performance problem reported by Kevin Ruscoe
	  plus some cleanup and better error reporting.

Thu Aug 14 14:13:43 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applied UTF-16 encoding handling patch provided by
	  Mark Itzcovitz
	* encoding.c parser.c: more cleanup and fixes for UTF-16 when 
	  not having iconv support.

Thu Aug 14 03:19:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in example/Makefile.am libxml.h nanoftp.c
	  nanohttp.c xmllint.c: Applied patch from Mikhail Grushinskiy for
	  mingw compiler on Windows.

Thu Aug 14 02:28:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the serious CPU usage problem reported by
	  Grant Goodale
	* HTMLparser.c: applied patch from Oliver Stoeneberg about a free
	  missing in htmlSAXParseDoc

Tue Aug 12 22:48:10 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: Removed dependency from libxml2.def.src

Tue Aug 12 18:55:08 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* autogen.sh: took away the requirement for automake-1.4,
	  changed the messages for getting auto* tools to current
	  gnu pages.
	* configure.in: added check for Linux Dec alpha requiring
	  -ieee flag, fixed test for ipv6
	* trionan.c: fixed problem for compiling on Linux Dec alpha
	  using native compiler
	* doc/Makefile.am: implemented regeneration of win32/libxml2.def.src
	  whenever libxml2-api.xml is changed.

Mon Aug 11 17:02:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: cleaning up a problem when parsing UTF-16 and libiconv
	  is not used.

Sun Aug 10 08:13:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/libxml2.def.src: renerated with fixed libxml2-api.xml

Sun Aug 10 00:22:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* News configure.in: preparing libxml2-2.5.9 release
	* doc/* : updated the doc and rebuilt

Sat Aug  9 20:00:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlreader.h doc/libxml2-api.xml: changing an enum
	  definition to get a correct API XML description. This was apparently
	  breaking Windows build.

Sat Aug  9 13:41:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed a nasty bug #119387, bad heuristic from
	  the progressive HTML parser front-end on large character data
	  island leading to an erroneous end of data detection by the
	  parser. Some cleanup too to get closer from the XML progressive
	  parser.

Sat Aug  9 00:42:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/configure.js: Added in support for the ISO8859X
	  module (patch provided by Jesse Pelton)

Fri Aug  8 15:56:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c threads.c: hum try to avoid some troubles
	  when the library is not initialized and one try to save, the 
	  locks in threaded env might not been initialized, playing safe
	* xmlschemastypes.c: apply patch for hexBinary from Charles Bozeman
	* test/schemas/hexbinary_* result/schemas/hexbinary_*: also added
	  his tests to the regression suite.

Fri Aug  8 18:47:38 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/defgen.xsl, win32/libxml2.def.src: Bug 119343
	  (with apologies to Igor) - Enhanced handling of docb and
	  nanohttp.

Thu Aug  7 21:13:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c: further small changes for warnings when
	  configured with --with-iconv=no

Wed Aug  6 12:32:11 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c trionan.[ch] testThreads.c python/generator.py:
	  further small changes to elminate most of the remaining
	  warnings.

Tue Aug  5 23:51:21 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c HTMLparser.c testC14N.c testHTML.c testURI.c
	  xmlcatalog.c xmlmemory.c xmlreader.c xmlschemastypes.c
	  python/libxml.c include/libxml/xmlmemory.h: small changes
	  to syntax to get rid of compiler warnings.  No changes
	  to logic.

Mon Aug  4 22:40:54 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/html/*: rebuilt the API and docs.

Mon Aug  4 21:40:34 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a small problem in the patch for #118763
	* result/HTML/doc3.htm*: this reverts back to the previous result

Sun Aug  3 21:41:49 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* doc/FAQ.html doc/xml.html: applied doc patch to xml.html
	  and rebuilt, apparently some C++ wrappers are not available,
	  c.f. bug #118943

Sun Aug  3 21:30:31 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixing HTML attribute serialization bug #118763
	  applying a modified version of the patch from Bacek
	* result/HTML/doc3.htm*: this modifies the output from one test

Sun Aug  3 21:02:30 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: added a new API to split a
	  QName without generating any memory allocation
	* valid.c: fixed another problem with namespaces on element
	  in mixed content case
	* python/tests/reader2.py: updated the testcase with 
	  Bjorn Reese fix to reader for unsignificant white space
	* parser.c HTMLparser.c: cleanup.

Sun Aug  3 20:55:40 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* catalog.c: trying to fix #118754 of possible recursion in the
	  catalogs. Not fantastically happy about the current fix since
	  it's likely to break under very thread intensive concurrent
	  access to the catalog. Better solution might to keep the depth
	  an extra argument to the resolution functions.

Sun Aug  3 18:56:54 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed bug #118712 about mixed content, and namespaced
	  element names.
	* test/valid/mixed_ns.xml result/valid/mixed_ns*: added a check
	  in the regression tests

Fri Aug 1 23:55:23 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Coninuing work on bug 118559
	* DOCBparser.c: removed 2 unsed vars
	* xmlregexp.c: changed some numeric const to their enum symbols
	* xmlreader.c: changed one var define from int to enum
	  (a little more to be done, awaiting co-ordination)
	* relaxng.c: deleted one unused var
	* xmllint.c: deleted some unused vars, changed one arg
	  val from int to enum
	* testHTML.c, testDocbook.c: changed some arg vals to enum const
	* xmlIO.c: fixed typo from last night (small warning msg)

Thu Jul 31 22:44:33 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Working on bug 118559
	* error.c: deleted unused variable
	* parserInternals.c: deleted unneeded 'const' qualifier
	* parser.c: changed variable type for enum temp storage
	* xmlIO.c: changed debugging var to be inside #ifdef
	* valid.c: removed unused variable
	* HTMLparser.c: removed some unneeded 'const' qualifiers
	* xpath.c: added some type casts, removed some unused vars
	* xinclude.c: added one type cast
	* nanohttp.c: repositioned some #ifdef to avoid unused var
	* nanoftp.c: removed unused var

Wed Jul 30 14:57:55 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied a patch from William Brack about
	  the problem of parsing very large HTML instance with comments
	  as raised by Nick Kew

Wed Jul 30 12:29:38 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: applying cleanup
	  patch from Bjorn Reese for xmlTextReaderNodeType() and 
	  significant whitespace. There is an enum for node type
	  values now.

Wed Jul 30 11:08:21 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applying patch from Peter Jacobi to added 
	  ISO-8859-x encoding support when iconv is not available
	* configure.in include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: added the glue needed
	  at the configure level and made it the default for Windows

Tue Jul 29 16:43:48 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml2class.txt:
	  patch from Joachim Bauch + cleanup for Relax NG error callbacks
	  in python

Tue Jul 29 12:46:08 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c tree.c: applied Peter Jacobi encoding
	  cleanup patch, and also avoided a possible memory leak

Tue Jul 29 09:28:09 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fix the previous commit

Tue Jul 29 12:28:17 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: fixed problem with comments reported by Nick Kew
	* encoding.c: added routines xmlUTF8Size and xmlUTF8Charcmp for
	  some future cleanup of UTF8 handling

Mon Jul 28 16:39:14 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied a change suggested by Sean Griffin in bug
	  #118494 about a memory leak in EXSLT

Sun Jul 27 14:30:56 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a Relax-NG compilation/streaming bug introduced
	  when fixing the previous Relax-NG bugs
	* result/relaxng/*: This slightly changes the output messages of
	  some regression tests.
	* configure.in: added support of -with-fexceptions for nested C++
	  support.

Thu Jul 24 15:46:02 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/apa.html
	* doc/tutorial/apb.html
	* doc/tutorial/apc.html
	* doc/tutorial/apd.html
	* doc/tutorial/ape.html
	* doc/tutorial/apf.html
	* doc/tutorial/apg.html
	* doc/tutorial/aph.html
	* doc/tutorial/ar01s02.html
	* doc/tutorial/ar01s03.html
	* doc/tutorial/ar01s04.html
	* doc/tutorial/ar01s05.html
	* doc/tutorial/ar01s06.html
	* doc/tutorial/ar01s07.html
	* doc/tutorial/ar01s08.html
	* doc/tutorial/index.html
	* doc/tutorial/ix01.html
	* doc/tutorial/xmltutorial.pdf
	* doc/tutorial/xmltutorial.xml
	update tutorial with XPath example

Thu Jul 24 17:07:06 IST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c: fixing a bug about a special case of namespace
	  handling, this closes bug #116841

Wed Jul 23 20:52:36 IST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c result/relaxng/*: checked and fixed the compilation
	  of RNG schemas, fixes a couple of bugs #117097 and #117001 .
	  This slightly changes the output messages of some regression tests.

Wed Jul 23 15:15:08 IST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed an out of bound error #118052 , the good
	  part if that base64 code was not in use yet ...

Tue Jul 22 19:42:15 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.html
	include html version of the xmllint man page, so an
	up-to-date version is visible on the Web

Mon Jul 21 21:53:43 IST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c include/libxml/xinclude.h: added a new API
	  xmlXIncludeProcessTree() to process XInclude only on a subtree
	  this should fix bug #115385

Fri Jul 18 17:11:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: adding Get interface for
	  the error callback and parameters of parsing and validation
	  contexts
	* xmlreader.c: patch to fix bug #117702 about incomplete Read()
	  on text nodes.

Wed Jul 16 23:15:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: patch from Dodji Seketeli about UTF16 BOM
	  when using the push XML parser.
	* result/utf16bom.xml result/noent/utf16bom.xml test/utf16bom.xml:
	  added the test to the regression suite.

Tue Jul 15 22:03:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c: add xmlThrDefMutex = NULL in xmlCleanupGlobals() 
	  as suggested by Rob Richards

Tue Jul 15 15:30:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c entities.c parser.c relaxng.c 
	  xmlschemas.c xpath.c: removed some warnings by casting xmlChar
	  to unsigned int and a couple of others.

Fri Jul 11 16:44:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixes a segfault on empty hexBinary strings

Thu Jul 10 16:02:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: cleanup patches from Peter Breitenlohner

Tue Jul  8 16:02:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c threads.c: fixes some problem when freeing unititialized
	  mutexes

Tue Jul  8 14:15:07 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: the modules should not import <config.h>
	  directly, some cleanups
	* xmlschemas.c: Peter Sobisch found a nasty bug in the Schemas
	  validation code.

Mon Jul  7 18:00:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: Jesse Pelton pointed out a problem in the
	  javascript code.

Mon Jul  7 16:39:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*: regenerated
	* nanoftp.c nanohttp.c: might fix includes problems with the
	  Ipv6 support on solaris
	* tree.c: patch from Markus Keim about xmlHasNsProp() on attributes
	  defined as #IMPLIED

Sun Jul  6 23:09:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: preparing release 2.5.8
	* nanohttp.c: changed some preprocessor block
	* xmlschemastypes.c: applied patch from Charles Bozeman adding
	  hexBinary schema datatype and adding support for totalDigits and
	  fractionDigits facets.

Sun Jul  6 19:56:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* debugXML.c xpath.c: fixed 2 bugs pointed in #116448

Sun Jul  6 19:34:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed bug #116095 removing the error message when
	  reapplying XInclude to a document.

Sat Jul  5 22:40:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied small changes to portability layer for 
	  compilation on DJGPP Ms-DOS compiler.

Sat Jul  5 22:30:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c HTMLparser.c: use the character() SAX callback
	  if the cdataBlock ain't defined.
	* xpath.c: fix bug #115349 allowing compilation when configured
	  with --without-xpath since the Schemas code needs NAN and co.

Sat Jul 5 00:51:30 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Fixed problem with multi-threading, shown by the test program
	testThreads.  After fix, ran mutiple tests on various speed
	machines (single and dual processor X86), which all seem okay.

	* catalog.c: added missing xmlRMutexUnlock in xmlLoadCatalog

	* threads.c: added missing initialisation for condition variable
	  in xmlNewRMutex.

Sat Jun 21 16:10:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	Applying IPv6 patch from Archana Shah <archana.shah@wipro.com>
	closing bug #114837

	* configure.in: Added checks for IPv6 support and getaddrinfo().

	* acconfig.h: Defined HAVE_GETADDRINFO and SUPPORT_IP6.

	* config.h.in: Defined HAVE_GETADDRINFO and SUPPORT_IP6.

	* nanoftp.c: Structure xmlNanoFTPCtxt contains either sockaddr_storage
	  field or sockaddr_in field, depending upon the availability of IPv6
	  support.
	  have_ipv6(): Added to check for run-time IPv6 support.
	  (xmlNanoFTPScanURL), (xmlNanoFTPUpdateURL), (xmlNanoFTPScanProxy):
	  Modified to parse a URI with IPv6 address given in [].
	  (xmlNanoFTPConnect): Changed to use getaddrinfo for address
	  resolution, if it is available on the system, as gethostbyname
	  does not return IPv6 addresses on some platforms.
	  (xmlNanoFTPGetConnection): Modified type of dataAddr variable to
	  sockaddr_storage or sockaddr_in depending upon the IPv6 support.
	  Sending EPSV, EPRT or PASV, PORT depending upon the type of address
	  we are dealing with.

	* nanohttp.c: (have_ipv6): Added to check for run-time IPv6 support.
	  (xmlNanoHTTPScanURL), (xmlNanoHTTPScanProxy): Modified to parse
	  a URI with IPv6 address given in [].
	  (xmlNanoHTTPConnectHost): Modified to use getaddrinfo if it is
	  available on the system. Also IPv6 addresses will be resolved by
	  gethostbyname only if IPv6 run-time support is available.
	  (xmlNanoHTTPConnectAttempt): Modified to deal with IPv6 address.

Sat Jun 14 18:46:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js include/win32config.h 
	  include/libxml/xmlversion.h.in: Applied the patch for BCB
	  by Eric Zurcher.

Fri Jun 13 14:27:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/html/*: reverted back patch for #113521,
	  due to #115104 and while fixing #115101 . HTML URLs must not
	  be version dependent.

Fri Jun 13 12:03:30 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: do not generate &quot; for " outside of attributes
	* result//*: this changes the output of some tests

Mon Jun  9 12:28:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlIO.c: trying to fix #114277 about when file
	  remapping and escaping should really be attempted.

Mon Jun  9 11:06:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*: applied a patch from Gman for building docs
	* valid.c xmllint.c include/libxml/valid.h: applied a patch from
	  Gary Pennington to provide an allocator for xmlValidCtxt
	* xmlreader.c: applied patch from Jacek Konieczny fixing bug
	  #113580 about data not being passed immediately.

Thu Jun  5 11:31:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied a couple of patches from Mark Itzcovitz
	  to handle saving back "UTF-16" documents.

Mon Jun  2 21:56:15 MVT 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemas.c include/libxml/schemasInternals.h: 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 symmetric and dependent on python internal hash order,
	  as reported by Stéphane Bidoul

Fri Apr 25 21:52:33 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/tutorial:
	xmltutorial.xml
	xmltutorial.pdf
	*.html
	add appendix on generating compiler flags, more indexing

Sat Apr 26 01:10:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* triodef.h vms/build_libxml.com: applied patch from Craig A. Berry
	  to get libxml-2.5.7 to compile on OpenVMS

Fri Apr 25 18:42:35 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing an xmlParseDTD bug raised by Petr Pajas

Fri Apr 25 15:20:29 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/xmlcatalog.1 doc/xmlcatalog_man.xml
	  doc/xmllint.1 doc/xmllint.xml: automated the generation of the
	  man page based on xsltproc and a stylesheet PI in the XML.

Fri Apr 25 12:37:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.*: trying to fix #110541 where &nbsp; generated
	  character preventing rendering by the man command.

Fri Apr 25 01:09:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in: preparing release 2.5.7
	* doc/*: updated and rebuilt the docs
	* doc/apibuild.py: fixed the script

Thu Apr 24 19:11:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/apibuild.py: make sure the OOM code don't
	  get in the way of the builds
	* doc/libxml2-api.xml python/libxml2class.txt: automatic update

Thu Apr 24 18:01:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am testOOM.c testOOMlib.[ch] : integrated the Out Of
	  Memory test from Havoc Pennington #109368
	* SAX.c parser.c parserInternals.c tree.c uri.c valid.c
	  xmlmemory.c xmlreader.c xmlregexp.c include/libxml/tree.h
	  include/libxml/parser.h: a lot of memory allocation cleanups
	  based on the results of the OOM testing
	* check-relaxng-test-suite2.py: seems I forgot to commit the
	  script.

Wed Apr 23 17:16:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: trivial fix for 109774 removing a warning

Wed Apr 23 15:49:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c SAX.c catalog.c debugXML.c parser.c: try to find
	  more places where xmlCanonicPath() must be used to convert
	  filenames to URLs, trying to fix #111088

Wed Apr 23 09:35:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: applied patch from 
	  Brent M Hendricks adding binding for xmlCatalogAddLocal

Tue Apr 22 15:18:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: tried to fix #98879 again in a more solid
	  way.

Tue Apr 22 13:58:43 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: added more exports from the relaxng and
	  xmlreader clan

Tue Apr 22 10:35:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c test/valid/ns* test/result/ns*: applied the patch
	  provided by Brent Hendricks fixing #105992 and integrated the
	  examples in the testsuite.

Tue Apr 22 01:06:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* TODO: updated a bit
	* configure.in: fixed the comment, threads now default to on
	* parserInternals.c: fixed an erroneous xmlMallocAtomic() call

Mon Apr 21 23:33:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c libxml.h parser.c parserInternals.c tree.c xmllint.c
	  xmlreader.c include/libxml/parser.h: a lot of performance work
	  especially the speed of streaming through the reader and push
	  interface. Some thread related optimizations. Nearly doubled the
	  speed of parsing through the reader.

Sun Apr 20 10:36:05 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	update man page to explain use of --stream

Sat Apr 19 02:03:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c catalog.c encoding.c globals.c
	  nanohttp.c parser.c parserInternals.c relaxng.c tree.c uri.c
	  xmlmemory.c xmlreader.c xmlregexp.c xpath.c xpointer.c
	  include/libxml/globals.h include/libxml/xmlmemory.h: added
	  xmlMallocAtomic() to be used when allocating blocks which
	  do not contains pointers, add xmlGcMemSetup() and xmlGcMemGet()
	  to allow registering the full set of functions needed by
	  a garbage collecting allocator like libgc, ref #109944

Fri Apr 18 16:37:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: switched to have thread support enabled by default,
	  didn't got troubles with ABI compatibility on Linux, hope it
	  won't break on strange OSes, if yes, report the system ID
	* doc/libxml2-api.xml: just rebuilt the API

Fri Apr 18 14:31:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.h include/libxml/parser.h parser.c xmlIO.c DOCBparser.c: 
	  added support for large file, tested with a 3+GB instance,
	  and some cleanup.
	* catalog.c: added a TODO
	* Makefile.am: added some "make tests" comments

Thu Apr 17 14:51:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: some cleanups
	* doc/xmlreader.html: extended the document to cover RelaxNG and
	  tree operations
	* python/tests/Makefile.am python/tests/reader[46].py: added some
	  xmlReader example/regression tests
	* result/relaxng/tutor*.err: updated the output of a number of tests

Thu Apr 17 11:35:37 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: valgrind pointed out an uninitialized variable error.

Thu Apr 17 11:06:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/relaxng.h relaxng.c include/libxml/xmlreader.h
	  xmlreader.c: augnemting the APIs, cleanups.
	* parser.c: cleanup bug #111005
	* xmlIO.c: added some missing comments

Wed Apr 16 17:46:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmllint.c: more work on RelaxNG streaming validation
	  trying to improve the subset compiled, and more testing.
	* doc/downloads.html doc/xml.html doc/xmlmem.html: some updates on the
	  documentation
	* test/relaxng/tutor11_1_3.xml: fixes the DTD path
	* result/relaxng/*.err: fix some of the outputs

Wed Apr 16 01:28:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlreader.c xmllint.c include/libxml/relaxng.h
	  include/libxml/xmlreader.h: implemented streaming of
	  RelaxNG (when possible) on top of the xmlReader interface,
	  provided it as xmllint --stream --relaxng .rng .xml
	  This seems to mostly work.
	* Makefile.am: updated to test RelaxNG streaming

Mon Apr 14 18:08:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: integrated the regexp
	  based validity checking of fragments of the document for
	  which the RNG can be compiled to regexps. Works on all regression
	  tests, only fix needed is related to error messages.

Sun Apr 13 21:51:00 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlregexp.c include/libxml/xmlautomata.h
	  include/libxml/xmlregexp.h: Starting work precompiling
	  parts of RelaxNG schemas. Not plugged onto validity checking
	  yet, just the regexp building part. Needed to extend some
	  of the automata and regexp APIs.

Fri Apr 11 21:36:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlreader.c include/libxml/xmlreader.h: make sure
	  xmllint --stream and xmllint --stream --valid returns errors
	  code appropriately

Fri Apr 11 10:59:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: Added the Expand()
	  and Next() operation to work on subtrees within the reader
	  framework.
	* doc/libxml2-api.xml python/libxml2class.txt: resulting updates
	* python/tests/reader5.py: added an example for those new
	  functions of the reader.

Thu Apr 10 23:38:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: patch from Vasily Tchekalkin to fix #109865

Thu Apr 10 15:32:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixing HasValue for namespace as raised by 
	  Denys Duchier

Wed Apr  9 14:07:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c include/libxml/HTMLparser.h:  exported
	  htmlCreateMemoryParserCtxt() it was static

Wed Apr  9 13:21:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
	  update from Charles Bozeman for date and duration types
	* test/schemas/date_0.* test/schemas/dur_0.*
	  result/schemas/date_0.* result/schemas/dur_0.*: updated too

Mon Apr  7 12:19:26 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c valid.c xpath.c include/libxml/tree.h include/libxml/valid.h:
	  fixing bug #107129, removing excessive allocation and calls
	  to *printf in the code to build QName strings.

Sat Apr  5 11:41:36 CEST 2003 Igoe Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: fixed conditional exports, reported by
	  Luke Murray.

Fri Apr  4 18:08:00 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a possible problem with xmlRecoverMemory()

Thu Apr  3 17:24:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* trio.c trio.h triodef.h trionan.c trionan.h triop.h triostr.c
	  triostr.h: Bjorn sent an update for the TRIO portability layer.

Tue Apr  1 21:57:26 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: exported new functions

Tue Apr  1 13:09:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing release 2.5.6
	* doc/*: updated and rebuilt the docs

Tue Apr  1 11:52:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed an uninitialized memory access pointed by valgrind
	  on C14Ntests

Tue Apr  1 00:12:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: one more fixup of error message reporting

Mon Mar 31 18:36:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on bug #109225, and fixed an uninitialized
	  variable pointed out by valgrind

Mon Mar 31 18:05:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: try to work on bug #109225 and provide better
	  error reports.
	* result/relaxng/* : this change the output of a number of tests
	* xinclude.c: fixing the parsed entity redefinition problem
	  raised on the list.
	* test/schemas/date_0.xsd: updated the date test c.f. E2-12

Mon Mar 31 13:19:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixed date comparison to handle the tzo
	  The only failures left are disagreements on Notations and
	  '+1' not being allowed for ulong, uint, ushort and ubyte.

Mon Mar 31 12:11:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixed gMonth parsing routine accordingly
	  to the XML Schemas errata
	  http://www.w3.org/2001/05/xmlschema-errata#e2-12

Sun Mar 30 23:04:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemastypes.c: more work on XML Schemas datatypes
	  and facets support. Currently only schemas with binHex or
	  base64 don't compile. A few error left in the test suite:
	  found 1035 test instances: 919 success 23 failures
	  most are gdate or gdateyear failing check, and a few cases where
	  James clark tests results are strange.
	* valid.c: allow to reuse the Notation checking routine without
	  having a validation context.
	* SAX.c: removed a #if 0

Sat Mar 29 17:35:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: forgot to apply one check from #106931 patch
	* xmlschemastypes.c: more work on XML Schemas datatypes

Sat Mar 29 11:49:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h xmlschemastypes.c: more work
	  on cleaning up XML Schemas datatypes based on James Clark tests
	  test/xsdtest/xsdtest.xml

Fri Mar 28 14:24:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented comparisons for Schemas values.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h: fixed
	  some bugs in duration handling, comparisons for durations
	  and decimals, removed all memory leaks pointed out by James
	  testsuite. Current status is now
	  found 238 test schemas: 197 success 41 failures
	  found 1035 test instances: 803 success 130 failures

Fri Mar 28 00:41:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h: fixed bugs and memory
	  leaks in the W3C XML Schemas code
	* xmlschemastypes.c: implemented nonPositiveInteger
	* test/schemas/length2_0.xsd result/schemas/length2_0_0.err:
	  fixed the test and result.

Thu Mar 27 22:23:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c tree.c: two patches from James Bursa on the HTML
	  parser and a typo
	* xmlschemastypes.c: reindenting, fixing a memory access
	  problem with dates.

Thu Mar 27 15:53:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing #109227 providing more context in case of 
	  start/end tag mismatch
	* python/tests/ctxterror.py python/tests/readererr.py: update the
	  tests accordingly

Thu Mar 27 15:22:41 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: should fix #109327 errors on memory accesses

Thu Mar 27 15:06:13 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: Fixed reopening of #78662 <form action="...">
	  is an URI reference

Wed Mar 26 22:38:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed bug #109160 on non-ASCII IDs

Wed Mar 26 17:30:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: Norm suggested a nicer error message for xml:space values
	  errors

Wed Mar 26 01:34:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c include/libxml/xpath.h: first part of the fix to
	  performance bug #108905, adds xmlXPathOrderDocElems() providing
	  document order for nodes.
	* python/libxml.c: Python may require TRIO as Albert Chin pointed out

Tue Mar 25 16:07:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: removing a warning with Sun compiler
	  bug #109154

Tue Mar 25 07:02:56 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	update xmllint man page with --relaxng option

Tue Mar 25 12:07:03 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/setup.py.in : was missing "drv_libxml2.py"

Mon Mar 24 19:38:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c xpath.c: some changes related to the new way of 
	  handling Result Value Tree, before 2.5.5

Mon Mar 24 16:36:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing release 2.5.5
	* doc/* : updated the documentation and regenerated it.

Mon Mar 24 14:56:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed some problems related to #75813 about handling
	  of Result Value Trees

Sun Mar 23 22:57:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied a set of patches from Lorenzo Viali correcting
	  URI parsing errors.

Sun Mar 23 22:00:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: validity status was not passed back when validating in
	  entities, but raised by Oliver Fischer

Sun Mar 23 21:30:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: avoid escaping ',' in URIs

Sun Mar 23 12:57:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #108976 get the ID/REFs to reference 
	  the ID in the document content and not in the entity copy
	* SAX.c include/libxml/parser.h: more checking of the ID/REF
	  stuff, better solution for #107208
	* xmlregexp.c: removed a direct printf, dohhh
	* xmlreader.c: fixed a bug on streaming validation of empty 
	  elements in entities
	* result/VC/ElementValid8 test/VCM/v20.xml result/valid/xhtml1.xhtml:
	  cleanup of the validation tests
	* test/valid/id* test/valid/dtds/destfoo.ent result/valid/id*:
	  added more ID/IDREF tests to the suite

Sat Mar 22 23:38:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed #107043 removing 2 warnings with Sun One
	  compiler.

Sat Mar 22 18:50:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: valgrind'ed and cleaned up a couple of memory issues.

Sat Mar 22 16:15:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fix bug #107208 avoid false duplicates when ID/REFs are
	  defined in entities content

Sat Mar 22 15:53:27 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: Fixed validation bug #108858 on namespace names using
	  entities and reported by Brent Hendricks
	* xmllint.c: report xmlTextReaderHasValue() result in --stream
	  --debug output.

Sat Mar 22 13:32:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed bug #108801 reported by Malcolm Tredinnick
	  about the DocType node not being reported sometimes.
	* python/tests/reader.py: added to test to the regression checks

Sat Mar 22 01:57:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed bug #108546 on long CDATA (or text nodes)
	  reported by Edd Dumbill

Sat Mar 23 01:00:24 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c parserInternals.c: patch from
	  johan@evenhuis.nl for #107937 fixing some line counting
	  problems, and some other cleanups.
	* result/HTML/: this result in some line number changes

Fri Mar 21 22:19:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in Makefile.am: fixed Red Hat bug #86118 use libxml2.spec
	  instead of libxml.spec
	* relaxng.c: fixed some of the error reporting excessive
	  verbosity
	* catalog.c debugXML.c valid.c xmlreader.c xmlschemas.c xpath.c
	  xmlschemastypes.c: removed some warnings from gcc
	* doc/libxml2-api.xml: rebuilt

Fri Mar 21 17:25:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: another optimization, for choice this time
	* result/relaxng/spec1* result/relaxng/tutor12_1* 
	  result/relaxng/tutor3_7: cleanups.

Fri Mar 21 13:41:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed xmlRelaxNGNodeMatchesList
	* test/relaxng/testsuite.xml: augmented the test suite
	* result/relaxng/spec1* result/relaxng/tutor12_1*: this fixes
	  some schemas validation tests in the presence of foreign 
	  namespaces.

Fri Mar 21 02:23:34 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: added another interleave speedup.

Thu Mar 20 17:22:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: added integer and fixed one of the
	  IDREFS regression tests pbm
	* result/relaxng/docbook_0.err: updated

Wed Mar 19 21:58:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlschemastypes.c: attempt to cope with ID/IDREF(S)
	  declared both in the DTD and in the Schemas <grin/>
	* relaxng.c: more debug, added a big optimization for <mixed>
	* test/relaxng/testsuite.xml: augmented the testsuite
	* test/relaxng/ result/relaxng: added the RelaxNG spec and a 
	  DocBook example to the regression tests

Wed Mar 19 11:34:10 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py: cosmetic change for output
	* relaxng.c: try to minimize calls to malloc/free for states.

Tue Mar 18 17:50:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: removed a warning
	* xmlschemastypes.c: more cleanup, added ENTITY and ENTITIES
	  support
	* check-relaxng-test-suite.py check-xsddata-test-suite.py:
	  cleanup/improvements of the regression tests batch
	* test/relaxng/testsuite.xml: augmented libxml2 own testsuite

Tue Mar 18 12:36:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed error msg cleanup deallocation
	* xmlschemastypes.c: added a function to handle lists of
	  atomic types, added support for IDREFS

Tue Mar 18 01:28:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c valid.c xmlschemastypes.c: added Datatype ID
	  and IDREF, usable from RelaxNG now
	* include/libxml/xmlschemastypes.h: need to add a new interface
	  because the validation modifies the infoset
	* test/relaxng/testsuite.xml: extended the testsuite

Mon Mar 17 16:34:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed the last core RelaxNG bug known #107083,
	  schemas datatype ID/IDREF support still missing though.
	* xmlreader.c: fix a crashing bug with prefix raised by
	  Merijn Broeren
	* test/relaxng/testsuite.xml: augmented the testsuite with
	  complex inheritance tests

Sun Mar 16 18:45:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: switched back to the previous Relax-NG code base,
	  the derivation algorithm need severe constraining code to avoid
	  combinatorial explosion. Fixed the problem with Sebastian Rahtz
	  TEI based example and other bugs
	* result/relaxng/*err: updated the results
	* test/relaxng/testsuite.xml: started a new test suite 

Sat Mar 15 22:26:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: After coming to the conclusion
	  that the original RelaxNG validation code was un-fixeable, it got
	  rewritten to use the derivation algorithm from James Clark and
	  redebugged it (nearly) from scratch:
	  found 373 test schemas: 372 success 1 failures
	  found 529 test instances: 529 success 0 failures

Tue Mar 11 12:08:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c: fix some recursion problems introduced in the
	  last release.
	* relaxng.c: more debugging of the RNG validation engine, still
	  problems though.

Mon Mar 10 14:10:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: stop generating wrong result file with * in name
	* relaxng.c: fixing the include bug raised by Sebastian Rahtz
	* result/relaxng/demo* test/relaxng/demo: added the tests from
	  Sebastian reproducing the problem.

Sun Mar  9 18:02:31 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.1: regenerating man page from xmllint.xml to pick
	  up Aleksey's change

Sun Mar  9 13:53:16 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* xmllint.c doc/xmllint.xml: use $XMLLINT_INDENT environment
	variable to control the indentation for the xmllint "--format" 
	option

Sat Mar  8 14:27:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* encoding.c: applied Gennady's patch against buffer overrun

Fri Mar  7 19:29:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* test/xsdtest/xsdtest.xml uri.c: after and exchange with James
	  Clark it appeared I had bug in URI parsing code ...
	* relaxng.c include/libxml/relaxng.h: completely revamped error
	  reporting to not lose message from optional parts.
	* xmllint.c: added timing for RNG validation steps
	* result/relaxng/*: updated the result, all error messages changed

Fri Mar  7 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix bug #107804, the algorithm used for document order
	  computation was failing on attributes.

Thu Mar  6 22:35:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix bug #107764 , possibility of buffer overflow
	  in xmlValidDebug()

Wed Mar  5 17:41:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c include/libxml/nanoftp.h: adding xmlNanoFTPDele()
	  from Philipp Dunkel

Wed Mar  5 10:57:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastype.c: made powten array static it should not be exported
	* HTMLparser.c: fix bug #107361 by reusing the code from the XML 
	  parser function.
	* testHTML.c: get rid of valgrind messages on the HTML SAX tests

Fri Feb 28 00:23:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a node dump crash on attributes
	* test/xsdtest/xsdtest.xml test/xsdtest/xsdtest.xsl: fixed
	  an URI test bug and get better output.

Thu Feb 27 22:28:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py: give more infos
	* relaxng.c: fix a bug reported by Sebastian Rahtz and
	  REF->DEF in attribute values.

Thu Feb 27 21:09:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py test/xsdtest/xsdtest.xml
	  test/xsdtest/xsdtest.xsl: import of the XSD Datatype
	  regression tests from James Clark.

Thu Feb 27 18:40:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemas.c xmlschemastypes.c
	  include/libxml/xmlschemastypes.h: added param support for relaxng
	  type checking, started to increment the pool of simple types
	  registered, still much work to be done on simple types and
	  facets checkings.

Wed Feb 26 16:45:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixes again one of the problem raised by
	  James Clark in #106788

Wed Feb 26 15:46:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: Fixed a couple of problem raised by James Clark
	  in bug #107083, the support for ID/IDREF/IDREFS at the WXS
	  datatype level still not fixed though.

Mon Feb 24 21:09:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release 2.5.4
	* doc/*: updated and rebuilt the docs
	* relaxng.c: removed warnings
	* result/relaxng/*: updated the results

Mon Feb 24 20:53:17 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixes a DTD regexp generation problem.

Mon Feb 24 20:12:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixes bug #105998 about false detection of
	  attribute consumption loop.

Mon Feb 24 19:14:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: Fixes bug #106931 in XInclude entities merging.

Mon Feb 24 18:50:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed bug #105992

Mon Feb 24 18:14:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed xmlSetProp and al. when the node passed is not an
	  element.
	* relaxng.c: fixed bugs 7.3 (though not complete) and memory leaks
	  found 373 test schemas: 369 success 4 failures
	  found 529 test instances: 525 success 4 failures
	* check-relaxng-test-suite.py: added memory debug reporting

Mon Feb 24 12:41:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c parser.c: some warning removal on Igor's patch
	* tree.c: seems I messed up with #106788 fix
	* python/libxml.c: fixed some base problems when Python provides
	  the resolver.
	* relaxng.c: fixed the interleave algorithm 
	  found 373 test schemas: 364 success 9 failures
	  found 529 test instances: 525 success 4 failures
	  the resulting failures are bug in the algorithm from 7.3 and
	  lack of support for params

Sun Feb 23 14:49:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: another fix for nodeinfo in entities problem
	* tree.c entities.c: fixed bug #106788 from James Clark
	  some spaces need to be serialized as character references.

Sat Feb 22 18:28:16 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c uri.c: fixed the bug I introduced in the path
	  handling, reported by Sebastian Bergmann

Sat Feb 22 00:19:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing some nodeinfo in entities problem raised
	  by Glenn W. Bach
	* relaxng.c: implemented the first section 7.3 check
	* result/relaxng/*: updated the results

Fri Feb 21 18:12:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed some problems in the previous commit
	  and finished implementing 4.16 rules checking
	  found 373 test schemas: 353 success 20 failures
	  found 529 test instances: 519 success 6 failures
	* result/relaxng/*: updated the results

Fri Feb 21 16:37:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented checks from section 7.2

Thu Feb 20 16:00:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented the checks from section 7.1, fixed
	  some of the 4.20 and 4.21 problems.
	  found 373 test schemas: 338 success 35 failures
	  found 529 test instances: 519 success 6 failures
	* result/relaxng/*: updated the results

Thu Feb 20 01:09:24 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented the 4.20 and 4.21 simplification rules.
	* result/relaxng/*: updated the results

Wed Feb 19 18:30:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more bugfixes
	* result/relaxng/*: updated the results

Wed Feb 19 15:39:56 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* DOCBparser.c: obsoleted xmlNormalizeWindowsPath
	* HTMLparser.c: obsoleted xmlNormalizeWindowsPath
	* SAX.c: ensured xmlDoc.URL is always canonic
	* parser.c: obsoleted xmlNormalizeWindowsPath
	* uri.c include/libxml/uri.h: introduced xmlCanonicPath
	* xmlIO.c include/libxml/xmlIO.h: obsoleted xmlNormalizeWindowsPath
	* win32/libxml2.def.src: added few exports

Wed Feb 19 14:26:51 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: patched to have shared libraries
	  for Python regression tests and static binaries for gdb debug
	  in my development environment
	* relaxng.c: more bugfixes 
	  found 373 test schemas: 296 success 77 failures
	  found 529 test instances: 516 success 8 failures
	* result/relaxng/*: updated the results

Wed Feb 19 01:17:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: guess what ! Relax-NG bugfixing, what a 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 craziness, that time in
	  external parsed entities if substitution is asked.
	* python/tests/reader3.py: added a specific test.

Thu Jan  9 22:35:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/drv_libxml2.py: update from Stéphane Bidoul: python 2.1
	  support and improved error handler registration

Thu Jan  9 14:16:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c: fixes #102920 about namespace handling in
	  HTML output and section 16.2 "HTML Output Method" of XSLT-1.0
	* README: fixed a link

Wed Jan  8 18:32:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* NEWS: preparing 2.5.1 release
	* SAX.c parser.c: fixing XmlTextReader bug

Wed Jan  8 00:13:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fuck, I introduced a memory leak on external parsed
	  entities in 2.5.0 :-(

Tue Jan  7 12:12:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: another fix needed as pointed by Christophe Merlet
	  for --stream --debug if compiled without debug support.

Mon Jan  6 20:53:08 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1:
	update man page with --stream and --chkregister

Tue Jan  7 01:17:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c: fixed --with-threads compile
	* xmllint.c: fixed --without-debug compile
	* include/libxml/globals.h: cleanup
	* include/libxml/schemasInternals.h: add a missing include

Mon Jan  6 14:06:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing 2.5.0 release
	* SAX.c: only warn in pedantic mode about namespace name 
	  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 nonexistent close tag.

Mon Dec 23 15:42:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/setup.py.in: patch from Stéphane Bidoul
	  for Python 2.1

Sun Dec 22 11:24:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* testC14N.c vms/config.vms: applied Craig A. Berry patches for VMS

Fri Dec 20 11:27:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml python/tests/reader.py: one really need
	  to provide the base URI information when creating a reader parser
	  from an input stream. Updated the API and the example using it.

Fri Dec 20 01:11:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* testReader.c xmlreader.c valid.c include/libxml/tree.h
	  include/libxml/valid.h include/libxml/xmlreader.h: working on
	  DTD validation on top of xml reader interfaces. Allows to
	  validate arbitrary large instances. This required some extensions
	  to the valid module interface and augmenting the size of xmlID
	  and xmlRef structs a bit.
	* uri.c xmlregexp.c: simple cleanup.

Wed Dec 18 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: more
	  work on the xml reader interfaces.
	* AUTHORS MAINTAINERS doc/* win32/*: updated Igor's mail and the
	  Web page for the Windows binaries.

Tue Dec 17 19:31:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied a patch for VMS following the report by
	  Nigel Hall

Tue Dec 17 11:29:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: the parseStartTag bug fix wasn't complete.

Mon Dec 16 23:00:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Vyacheslav Pindyura managed to trigger a bug in
	  parseStartTag, fixing it.
	* test/att4 result/att4 result/noent/att4: adding the test
	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
	  more methods to XmlTextReader.

Mon Dec 16 19:31:16 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: added more xml reader exports
	* win32/Makefile.msvc win32/Makefile.mingw: added xml reader interface
	  to the build

Mon Dec 16 06:36:54 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	plus generated html and pdf
	Updating tutorial again based on further comments from Niraj
	Tolia on the last iteration

Sun Dec 15 21:27:30 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/includekeyword.c
	* doc/tutorial/includegetattribute.c
	plus generated html and pdf
	Adding fix from Niraj Tolia to tutorial to properly free memory.

Mon Dec 16 00:34:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
	  more methods of XmlTextReader.
	* python/libxml2class.txt python/tests/reader.py: this increased the
	  methods in the bndings, augmented the test to check those new
	  functions.

Sat Dec 14 23:57:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c doc/libxml2-api.xml: added the close and getattribute
	  methods of XmlTextReader.
	* python/generator.py python/libxml_wrap.h python/types.c 
	  python/libxml2class.txt: added the reader to the Python bindings
	* python/tests/Makefile.am python/tests/reader.py: added a specific
	  test for the Python bindings of the Reader APIs
	* parser.c: small cleanup.

Fri Dec 13 11:39:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fallback was only copying the first child not the
	  full child list of the fallback element, closes #89684 as reopened
	  by Bernd Kuemmerlen

Thu Dec 12 13:34:59 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: exported htmlNodeDumpOutput

Thu Dec 12 10:59:11 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release of 2.4.30
	* doc/apibuild.py doc/libxml2-api.xml: fixups to the api builder,
	  gives enum values, fix functype return type, put back fields in
	  structs 
	* doc/*: updated the docs rebuilt

Thu Dec 12 01:09:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: patch from Mark Vakoc
	  about htmlNodeDumpOutput location.
	* xpath.c: removed an undefined function signature
	* doc/apibuild.py doc/libxml2-api.xml: the script was exporting
	  too many symbols in the API breaking the python bindings.
	  Updated with the libxslt/libexslt changes.

Wed Dec 11 20:26:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release of 2.4.29
	* doc/*: rebuilt the docs and API
	* xmlreader.c: a few more fixes for the XmlTextReader API

Wed Dec 11 18:01:15 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: applied mingw patch from Magnus Henoch

Wed Dec 11 16:58:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* catalog.c doc/libxml2-api.xml: a bit more cleanup

Wed Dec 11 14:54:47 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/apibuild.py doc/libxml2-api.xml doc/Makefile.am: new API
	  building Python script, does the C parsing directly, generates
	  a better API description including structure fieds defs and
	  enums. Still a couple of bugs, but good enough for the python
	  wrappers now.
	* DOCBparser.c SAX.c nanohttp.c parser.c parserInternals.c tree.c
	  valid.c xmlIO.c xmlmemory.c xmlreader.c xmlregexp.c xmlschemas.c
	  include/libxml/schemasInternals.h include/libxml/tree.h: more
	  cleanup based on the python analysis script reports.
	* libxml.spec.in: make sure the API XML description is part of the
	  devel package.

Tue Dec 10 16:16:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c debugXML.c encoding.c hash.c
	  nanoftp.c nanohttp.c parser.c parserInternals.c testC14N.c
	  testDocbook.c threads.c tree.c valid.c xmlIO.c xmllint.c xmlmemory.c
	  xmlreader.c xmlregexp.c xmlschemas.c xmlschemastypes.c xpath.c:
	  code cleanup, especially the function comments.
	* tree.c: fixed a small bug when freeing nodes which are XInclude ones.

Mon Dec  9 15:08:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlreader.c include/libxml/Makefile.am
	  include/libxml/xmlreader.h:  Adding a new set of APIs based on
	  the C# TextXmlReader API but converted to C. Allow to parse
	  in constant memory usage, far simpler to program and explain
	  than the SAX like APIs, unfinished but working.
	* testReader.c: test program

Sun Dec  8 18:36:01 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: applied YALDSP from Mark Vakoc

Wed Dec  4 16:08:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Chip turner indicated that XHTML1 serialization
	  rule for style actually break on both IE and Mozilla, 
	  try to avoid the rule if escaping ain't necessary

Wed Dec  4 12:43:28 CET 2002 Daniel Veillard <daniel@veillard.com>

	* nanhttp.c: handle HTTP URL escaping, problem reported by
	  Glen Nakamura and Stefano Zacchiroli

Sat Nov 30 12:19:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c parser.c valid.c xpath.c: code cleanup

Thu Nov 28 12:53:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* uri.c: Johann Richard pointed out some XPointer problems for
	  URN based URI references in XInclude. Modified the URI parsing
	  and saving routines to allow correct parsing and saving of 
	  XPointers, especially when attached to "opaque" scheme accordingly
	  to RFC 2396

Wed Nov 27 20:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: applied the same kind
	  of refactoring to the HTML saving code.
	* doc/libxml2-*.xml doc/API*.html: slight API changes got reflected
	  in the doc.

Wed Nov 27 12:40:16 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: refactored the XML dump of a node
	  to a buffer API to reuse the generic dump to an OutputIO layer,
	  this reduces code, fixes xmlNodeDump() for XHTML, also made
	  xmlNodeDump() now return the number of byte written.

Wed Nov 27 09:00:00 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/setup.py.in: another patch from Stéphane Bidoul for 
	  Python bindings on Windows
	* doc/parsedecl.py: small cleanup

Mon Nov 25 17:28:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in configure.in: add a line in %changelog for releases

Mon Nov 25 14:18:27 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Marcus Clarke fixing a problem in entities
	  parsing that was detected in KDe documentations environment.

Mon Nov 24 14:13:21 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>

	* python/libxml.c (libxml_prev): Return the previous as opposed to
	the next node (I guess this is the result of some cut & paste programming:)

Sat Nov 23 17:22:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: Jan Rafaj pointed a bug in the Makefile.

Sat Nov 23 12:21:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/setup.py.in: trying
	  to fix the Python bindings build on Windows (Stéphane Bidoul)

Fri Nov 22 22:41:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: added option for python bindings
	* win32/libxml2.def.src: added more exports

Fri Nov 22 18:50:34 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.mingw: fixed unresolved symbols when linking with
	  pthreads
	* win32/wince/*: applied updates to Windows CE port from Javier

Fri Nov 22 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.28
	* libxml.spec.in doc/Makefile.am: some cleanup
	* doc/*: updated the news and regenerated.

Fri Nov 22 14:15:14 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: final touch at closing #87235 </p> end tags
	  need to be generated.
	* result/HTML/cf_128.html result/HTML/test2.html result/HTML/test3.html:
	  this change slightly the output of a few tests
	* doc/*: regenerated

Fri Nov 22 13:26:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixing bug #99190 when UTF8 document are
	  parsed using the progressive parser and the end of the chunk
	  is in the middle of an UTF8 multibyte character.

Fri Nov 22 13:13:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* threads.c: fixed initialization problem in xmlNewGlobalState
	  which was causing crash.
	* globals.c: removed duplicate call to initxmlDefaultSAXHandler
	  in xmlInitializeGlobalState.
	* parserInternals.c: cleaned up ctxt->sax initialisation.

Thu Nov 21 15:05:45 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: modified the existing APIs
	  to handle XHTML1 serialization rules automatically, also add
	  xmlIsXHTML() to libxml2 API. Some tweaking to make sure
	  libxslt serialization uses it when needed without changing
	  the library API.
	* test/xhtml1 result/noent/xhtml1 result/valid/xhtml1.xhtml
	  result/xhtml1: added a new test specifically for xhtml1 output
	  and updated the result of one XHTML1 test

Wed Nov 20 14:24:56 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c parserInternals.c encoding.c: fixed #99082
	  for xi:include encoding="..." support on text includes.
	* result/XInclude/tstencoding.xml test/XInclude/docs/tstencoding.xml
	  test/XInclude/ents/isolatin.txt : added a specific regression test
	* python/generator.py python/libxml2class.txt: fixed the generator
	  the new set of comments generated for doc/libxml2-api.xml were
	  breaking the python generation.

Tue Nov 19 23:25:47 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: repair some problem if gtk-doc fail or such
	* configure.in: patch for Solaris on new autoconf closes #98880 
	* doc/parsedecl.py: repair the frigging API building script,
	  did I say that python xmllib sucks ?
	* doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated, reordering
	  and some comment are no more truncated.

Tue Nov 19 09:09:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Martin Stoilov pointed out a potential leak in
	  xmlCreateMemoryParserCtxt

Mon Nov 18 16:05:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed bug #98879 a corner case when 0 is
	  included in HTML documents and using the push parser.

Mon Nov 18 00:11:24 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>

	* configure.in (PYTHON_SITE_PACKAGES): If --with-python is
	  specified, look for the Python interpreter not just in the
	  specified root but also in the specified location. Fixes #98825

Sun Nov 17 23:36:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fixing bug #98792 , node may have no doc
	  and dereferencing without checking ain't good ...

Sun Nov 17 10:25:43 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release 2.4.27
	* doc/* : updated and rebuilt the docs
	* doc/Makefile.am libxml.spec.in: try to make sure the tutorial
	  and all the docs are actually packaged and in the final RPMs
	* parser.c parserInternals.c include/libxml/parser.h: restore
	  xmllint --recover feature.

Sat Nov 16 16:30:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c xpath.c: fixing #96925 wich was also dependent on the
	  processing of parsed entities, and XPath computation on sustitued
	  entities.
	* testXPath.c: make sure entities are substituted.

Fri Nov 15 16:22:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #96594, which was totally dependent on the 
	  processing of internal parsed entities, which had to be changed.

Fri Nov 15 12:16:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am python/Makefile.am python/tests/Makefile.am:
	  trying to fix bug #98517 about building outside the source tree
	* doc/xml.html doc/FAQ.html: fixed the link to libiconv #94585

Thu Nov 14 18:41:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: cleanup
	* win32/Makefile.mingw: integrated mingw in JScript configure
	* win32/Makefile.msvc: modified to allow mingw coexistence
	* win32/configure.js: integrated mingw
	* win32/Readme.txt: cleanup

Tue Nov 12 22:06:45 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: strengthen the guard in the Pop macros,
	  like in the XML parser, closes bug #97315

Tue Nov 12 21:56:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h: fixed bug #98338 , fatalError SAX
	  callback is never used.

Tue Nov 12 13:32:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixed the initialization of the SAX structure
	  which was breaking xsltproc
	* xpath.c: patch from Petr Pajas for CDATA nodes
	* tree.c: patch from Petr Pajas improving xmlGetNodePath()
	* parser.c include/libxml/parser.h: patch from Peter Jones
	  removing a leak in xmlSAXParseMemory() and adding the
	  function xmlSAXParseMemoryWithData()

Mon Nov 11 20:47:03 MST 2002 John Fleck <jfleck@inkstain.net>

	adding pdf of tutorial, changing web page to link to it
	* doc/tutorial/xmltutorial.pdf
	* doc/xml.html
	* doc/docs.html

Sun Nov 10 20:48:57 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/ar01s08.html
	adding file what I forgot for tutorial

Sun Nov 10 20:33:13 MST 2002 John Fleck  <jfleck@inkstain.net>

	Adding encoding discussion to tutorial
	Added:
	* doc/tutorial/images/*.png: DocBook admonition image files
	* doc/tutorial/apf.html, apg.html: new generated html
	* doc/tutorial/includeconvert.c: conversion code entity file
	changed:
	* doc/tutorial/xmltutorial.xml: DocBook original
	* doc/tutorial/*.html: generated html

Fri Nov  8 17:59:32 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/libxml/*.h: retired xmlwin32version.h
	* doc/Makefile.am: retired xmlwin32version.h
	* win32/configure.js: retired xmlwin32version.h

Fri Nov  8 16:55:47 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: exported additional symbols
	* include/libxml/xmlmemory.h: exported the rest of the xmlMem* 
	  sisterhood

Fri Nov  8 16:08:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* globals.c: fixed a typo pointed out by Igor
	* xpath.c: try to speed up node compare using line numbers
	  if available.

Thu Nov  7 15:16:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: make xmlFreeNode() handle attributes correctly.

Wed Nov  6 23:51:11 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* catalog.c: completed the #96963 fix, as reported by Karl
	  Eichwalder

Wed Nov  6 16:48:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpointer.c: tried to fix bug #97852 reported by Nicolas Noffke

Sun Nov  3 10:43:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: switched the order of a couple of includes
	  to fix bugs #97100

Thu Oct 31 17:11:46 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* catalog.c: fixed bug #96963, reverted to the old behaviour of
	  xmlLoadCatalogs that used to separate directories with a ':'.

Thu Oct 31 16:55:21 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* threads.c: improvements to the Windows-side of thread handling
	* testThreads.c: conditionally excluded unistd.h
	* testThradsWin32.c: broke overlong lines
	* include/win32config.h: adapted thread-related macros to the new
	  scheme and for pthreads on Windows
	* win32/Makefile.msvc: introduced a more flexible thread build, 
	  added testThreads[Win32].c to the build
	* win32/configure.js: introduced a more flexible thread config

2002-10-31  John Fleck  <jfleck@inkstain.net>

	* doc/xml.html (and, by implication, FAQ.html)
	added UTF-8 conversaion FAQ from Marcus Labib Iskander

Tue Oct 29 18:32:33 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* configure.in: removed xmlwin32version.h
	* include/libxml/Makefile.am: removed xmlwin32version.h

Mon Oct 28 14:01:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Brian Stafford to fix a bug
	  in xmlReconciliateNs()

Mon Oct 28 13:51:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Christian Glahn to allow
	  xmlNewChild() on document fragment nodes

Sat Oct 26 15:27:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Christian Glahn found a problem with a recent
	  patch to xmlParseBalancedChunkMemoryRecover()
	* xmlschemas.c: Charles Bozeman fixed some Schemas validation
	  problems
	* result/schemas/elem* result/schemas/seq* test/schemas.elem*
	  test/schemas/seq*: added the test cases from Charles

Wed Oct 23 16:42:29 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am config.h.in libxml.spec.in doc/Makefile.am:
	  serious cleanup of the spec file and associated changes
	  in the Makefiles.
	* valid.c: try to remove some warnings on x86_64

Wed Oct 23 10:53:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/Makefile.am: added winsockcompat.h to EXTRA_DIST to
	  fix bug #96586

Tue Oct 22 21:13:06 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Mikhail Sogrine pointed out a bug in HTML
	  parsing, applied his patch
	* result/HTML/attrents.html result/HTML/attrents.html.err
	  result/HTML/attrents.html.sax test/HTML/attrents.html:
	  added the test and result case provided by Mikhail Sogrine

Tue Oct 22 19:33:20 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* vms/build_libxml.com vms/config.vms vms/readme.vms
	  include/libxml/parser.h include/libxml/parserInternals.h
	  include/libxml/tree.h include/libxml/xmlIO.h
	  HTMLparser.c catalog.c debugXML.c parser.c parserInternals.c
	  tree.c triodef.h trionan.c uri.c xmlIO.c xpath.c:
	  Applied the VMS update patch from Craig A. Berry
	* doc/*.html: update

Tue Oct 22 16:27:31 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/encoding.h encoding.c: made xmlGetUTF8Char public

Tue Oct 22 16:25:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: adding a grep command to --shell in xmllint
	  for T.V. Raman

Tue Oct 22 16:23:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: tried to fix some of the problem with --sgml

Mon Oct 21 09:57:10 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: tried to fix bug #91500 where doc->children may
	  be overridden by a call to xmlParseBalancedChunkMemory()

Mon Oct 21 09:04:32 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* catalog.c: tried to fix bug #90945 w.r.t. parsing of system
	  identifiers in SGML catalogs containing '&'

Sun Oct 20 23:31:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/types.c: fixed bugs when passing result value tree
	  to Python functions.

Fri Oct 18 13:18:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing the release of 2.4.26
	* doc/*: updated and rebuilt the documentation

Wed Oct 16 20:01:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a XML Namespace compliance bug reported by
	  Alexander Grimalovsky

Wed Oct 16 17:18:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed serialization of script and style when
	  they are not lowercase (i.e. added using the API to the tree).

Wed Oct 16 16:31:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: make xmlValidateDocument emit a warning msg if there
	  is no DTD, pointed by Christian Glahn

Wed Oct 16 16:05:38 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: fixed the validation of sequences
	  content model when some of the blocks have min or max, and a couple
	  of bugs found in the process.
	* result/schemas/list0* test/schemas/list0*: added some specific
	  regression tests

Tue Oct 15 12:41:01 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* README: updated the contact 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 the docs and web pages.

Thu Sep 26 17:33:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c valid.c include/libxml/valid.h: fixed bug #92518 validation
	  error were not covering namespace declarations.
	* result/valid/dia.xml test/valid/dia.xml: the test wasn't valid,
	  it was missing the attribute declaration for the namespace
	* result/VC/NS3: the fix now report breakages in that test

Thu Sep 26 14:39:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixing bug #94241 on HTML boolean attributes

Thu Sep 26 14:25:33 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*: added the 3 new modules xmlregexp xmlautomata and xmlunicode
	  and regenerated the docs and web site

Thu Sep 26 11:45:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmlschemas.c xmlschemastypes.c xpath.c: make sure
	  ATTRIBUTE_UNUSED is always put after the attribute declaration,
	  not before

Thu Sep 26 11:33:28 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml2class.txt: fixed a stupid error
	  breaking the python API

Thu Sep 26 00:31:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* trio.c trio.h triodef.h trionan.c trionan.h triop.h
	  triostr.c triostr.h: applied a trio update patch from 
	  Bjorn Reese which should work with MinGW

Thu Sep 26 00:21:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: improving some documentation comments
	* xmlregexp.c: found and fixed a mem leak with python regression tests
	* doc/*: rebuilt the doc and the API XML file including the 
	  xmlregexp.h xmlautomata.h and xmlunicode.h headers
	* python/generator.py python/libxml2class.txt python/libxml_wrap.h
	  python/types.c: added access to the XML Schemas regexps from
	  python
	* python/tests/Makefile.am python/tests/regexp.py: added a 
	  simple regexp bindings test

Tue Sep 24 08:10:48 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/xml.html:
	  fixing ftp links - thanks to Vitaly Ostanin

Tue Sep 24 16:08:17 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixed the data callback on transition functionality
	  which was broken when using the compact form
	* result/schemas/*: updated the results, less verbose, all tests
	  pass like before
	* DOCBparser.c testAutomata.c testC14N.c testSchemas.c testThreads.c
	  testXPath.c valid.c xinclude.c xmllint.c xmlregexp.c xmlschemas.c
	  xmlschemastypes.c xpath.c python/libxml.c: removed a bunch of
	  annoying warnings
	* xpath.c: try to provide better error report when possible

Sat Sep 21 14:56:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: fixed a breakage raised by Jacob

Fri Sep 20 20:08:18 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: added HAVE_ERRNO_H definition for parts
	  which don't use sockets

Fri Sep 20 18:40:50 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: applied zlib patch from Daniel Gehriger
	* win32/configure.js: applied zlib patch from Daniel Gehriger

Fri Sep 20 15:40:14 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: applied the patch from Mark Vakoc for 
	  regexp support
	* win32/libxml2.def.src: applied the patch from Mark Vakoc
	  for regexp support

Fri Sep 20 15:35:33 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: as pointed by Igor Float and Double
	  parsing ain't finished yet

Fri Sep 20 14:00:16 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: trying to fix #88412 by bypassing
	  all the python subdir if python ain't detected

Thu Sep 19 21:46:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in include/libxml/xmlversion.h.in:
	  made configuring with regexps/automata/unicode the default
	  but without schemas ATM
	* testRegexp.c valid.c xmlregexp.c include/libxml/xmlregexp.h:
	  fixed the regexp based DTD validation performance and memory
	  problem by switching to a compact form for determinist regexps
	  and detecting the determinism property in the process. Seems
	  as fast as the old DTD validation specific engine :-) despite
	  the regexp built and compaction process.

Wed Sep 18 18:27:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: determinism is debugged, new DTD checking code now works
	  but xmlFAComputesDeterminism takes far too much CPU and the whole
	  set usues too much memory to be really usable as-is

Wed Sep 18 00:54:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed another stupid bug in xmlGetNodePath()
	* xmllint.c: --version now report the options compiled in

Tue Sep 17 23:48:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: small cleanup
	* valid.c xmlregexp.c: switched DTD validation to use only regexp
	  when configured with them. A bit of debugging around the determinism
	  checks is still needed

Tue Sep 17 21:22:25 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml_wrap.h: stupid bug found by mattam@netcourrier.com

Tue Sep 17 19:58:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: small portability glitch fixed.

Mon Sep 17 12:38:08 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: incomplete steps for real/double support
	* testAutomata.c include/libxml/xmlautomata.h
	  include/libxml/xmlregexp.h: avoiding a compilation problem
	* valid.c include/libxml/valid.h: starting the work toward using
	  the regexps for actual DTD validation

Fri Sep 13 16:46:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: cosmetic cleanup
	* valid.c include/libxml/tree.h include/libxml/valid.h: started 
	  integrating a DTD validation layer based on the regexps

Thu Sep 12 18:01:29 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: fixed a bug reported by Jeff Goff,
	  the determinism was tested before eliminating the epsilon
	  transitions :-(

Thu Sep 12 16:57:45 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml2-python-api.xml python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: updated the python
	  bindings, added code for easier File I/O, and the ability to
	  define a resolver from Python fixing bug #91635
	* python/tests/Makefile.am python/tests/inbuf.py
	  python/tests/outbuf.py python/tests/pushSAXhtml.py
	  python/tests/resolver.py python/tests/serialize.py: updated
	  and augmented the set of Python tests.

Tue Sep 10 21:05:28 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: added more readme info for the binary
	  package.

Tue Sep 10 14:15:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fixed a stupid out of bound array error

Tue Sep 10 13:09:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlIO.h xmlIO.c parser.c HTMLparser.c DOCBparser.c:
	  messing around with support for Windows path, cleanups,
	  trying to identify and fix the various code path to the
	  filename access. Added xmlNormalizeWindowsPath()

Thu Sep  5 16:19:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* error.c valid.c: working on better error reporting of validity
	  errors, especially providing an accurate context.
	* result/valid/xlink.xml.err result/valid/rss.xml.err: better
	  error reports in those cases.

Thu Sep  5 13:29:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c entities.c list.c
	  parser.c parserInternals.c xmlIO.c: get rid of all the 
	  perror() calls made in the library execution paths. This
	  should fix both #92059 and #92385

Thu Sep  5 13:13:17 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: memory leak reporting was broken after a change
	  of the preprocessor symbol used to activate it.

Thu Sep  5 13:10:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: try to make the copy function work for node of
	  type XML_DOCUMENT_FRAG_NODE, they are only created by the
	  DOM layers though, not libxml2 itself.

Thu Sep  5 12:57:38 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: try to provide file and line 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 library path for x86_64 AMD

Tue Sep  3 21:14:19 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/includekeyword.c
	* doc/tutorial/xmltutorial.xml:
	(plus resulting generated html files)
	fixing one spot I missed in the tutorial where I hadn't freed
	memory properly

Sat Aug 31 19:31:17 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/includeaddattribute.c
	* doc/tutorial/includeaddkeyword.c
	* doc/tutorial/includegetattribute.c
	* doc/tutorial/includekeyword.c
	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/*.html:
	update tutorial to properly free memory (thanks to Christopher
	R. Harris for pointing out that this needs to be done)
	* doc/tutorial/images/callouts/*.png:
	added image files so the callouts are graphical, making it
	easier to read ( use "--param callout.graphics 1" to generate
	html with graphical callouts)

Wed Aug 28 13:44:54 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Libxml2-Logo-180x168.gif doc/Libxml2-Logo-90x34.gif:
	  nice logos generated by Marc Liyanage
	* doc/site.xsl *.html: changed the stylesheet to show the new
	  logo and regenerated the pages

Sun Aug 25 16:38:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: handle Windows 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 similarly to the libxslt one.

Thu Aug 22 09:15:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* win32/win32/Makefile.mingw: updated with version from 
	  Elizabeth Barham at http://soggytrousers.net/repository/

Tue Aug 20 16:40:48 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: added the prefix location to the include
	and lib search path.

2002-08-18  Havoc Pennington  <hp@pobox.com>

	* autogen.sh: hardcode aclocal-1.4/automake-1.4 so that users with
	both automake 1.6 and 1.4 installed get the right automake. Means
	compilation from CVS will now require the latest automake 1.4
	release, or manually creating symlinks called "automake-1.4" and
	"aclocal-1.4"

Wed Aug 14 18:54:19 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in python/Makefile.am: more AMD 64 induced changes from
	  Frederic Crozat

Wed Aug 14 16:43:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: oops I was missing the xml:base fixup too
	* result/XInclude/*.xml: this adds xml:base attributes to most
	  results of the tests

Wed Aug 14 16:05:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: quick but apparently working implementation of
	  xi:fallback, should close bug #89684
	* Makefile.am test/XInclude/docs/fallback.xml 
	  result/XInclude/fallback.xml: added a basic test for fallback,
	  and run with --nowarning to avoid a spurious warning
	* configure.in: applied patch from Frederic Crozat for python
	  bindings on AMD 64bits machines.

Wed Aug 14 10:47:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: xmlSAXUserParseMemory() really ought to fail if
	  the caller don't pass a SAX callback block.

Wed Aug 14 10:29:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied the same fix for the XML-1.0 namespace to
	  xmlSearchNsByHref() as was done for xmlSearchNs()

Mon Aug 12 16:52:08 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.3: small cleanup of the man page
	* HTMLtree.c: fixed a potential problem raised by Petr Vandrovec
	  when serializing HREF attributes generated by XSLT.

Mon Aug 12 15:24:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: integrated a cleaned up
	  version of Marc Liyanage' patch for boolean attributes in HTML
	  output

Mon Aug 12 14:11:59 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/tests/serialize.py: fixed the test results, indenting
	  behaviour changed slightly

Thu Aug  8 11:00:26 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* win32/dsp/libxml2.def.src win32/libxml2.def.src: added
	new c14n function to Windows def files

Fri Aug  2 16:46:46 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* c14n.c: fixed a memory leak in c14n code

Sat Aug  3 00:15:06 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: adding a new API for Christian
	  Glahn: xmlParseBalancedChunkMemoryRecover
	* valid.c: patch from Rick Jones for some grammar cleanup in
	  validation messages
	* result/VC/* result/valid/*: this slightly change some of the
	  regression tests outputs

Thu Aug  1 14:50:28 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: trying to fix a problem in namespaced attribute handling
	  raised by Christian Glahn

Thu Aug  1 12:17:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* encoding.c include/libxml/encoding.h: Opening the interface
	  xmlNewCharEncodingHandler as requested in #89415
	* python/generator.py python/setup.py.in: applied cleanup
	  patches from Marc-Andre Lemburg
	* tree.c: fixing bug #89332 on a specific case of losing 
	  the XML-1.0 namespace on xml:xxx attributes

Wed Jul 31 23:27:42 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* c14n.c include/libxml/c14n.h: fixed one more c14n + namespaces
	corner case from new Merlin's test suite and added a callback
	that will be used to improve xmlsec performance

Mon Jul 29 18:22:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: trying to fix the <style> escaping problem in
	  HTML serialization bug #89342

Thu Jul 25 01:33:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/*.html: applied syntax patch from Rick Jones
	  and rebuilt the web site.

Mon Jul 22 11:04:48 PDT 2002  Aleksey Sanin <aleksey@aleksey.com>

	* include/libxml/tree.h: added _private member to xmlNs struct

Sun Jul 21 17:48:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixing bug #84876 based on the xml working
	  code.

Sun Jul 21 19:15:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* python/Makefile.am: enhanced to fix bug 72012 (errors
	  when using '-jX' make parameter)

Fri Jul 19 16:35:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: small additional enhancement for booleans
	  compared to nodesets

Wed Jul 17 19:48:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: changed the order of the encoding declaration
	  attributes in the meta tags due to a bug in IE/Mac

Fri Jul 12 08:45:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: enhanced handling of booleans (especially '='
	  and '!=' for nodesets) - fixes bug 85256.  Added new
	  routine xmlXPathNotEqualValues for more proper handling
	  of '!=' when nodesets are involved.

Thu Jul 11 21:45:52 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: fixing Red Hat bug #68614 by adding the
	  doc/xmlcatalog_man.xml to the source distribution

Wed Jul 10 21:26:13 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: Added a copy *.pdb to install, few have
	  asked for this.

Sat Jul  6 21:55:59 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.23
	* doc/*: rebuilt the docs

Sat Jul  6 21:11:20 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #84169 by fixing the
	  comment of xmlCreatePushParserCtxt to describe the 
	  encoding detection parameters better.

Sat Jul  6 19:44:56 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing bug #79331 in one path the lookup for
	  ID attributes on a namespaced node wasn't handled correctly :-\

Fri Jul  5 20:07:43 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: trying to fix 87235 about discarded white
	  spaces in the HTML parser.
	* result/HTML/*: this changes the output of a number of HTML
	  regression tests

Mon Jul  1 23:23:41 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied patch from Richard Jinks for the namespace
	  axis + fixed a memory error.
	* parser.c parserInternals.c: applied patches from Peter Jacobi
	  removing ctxt->token for good.
	* xmlschemas.c xmlschemastypes.c: fixed a few memory leaks
	  popped out by the regression tests.
	* Makefile.am: patch for threads makefile from Gary Pennington

Fri Jun 28 19:38:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: enhanced behaviour of position() after usage of
	  expressions involving preceding-sibling (et al).

Tue Jun 18 09:58:48 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: applied a patch from Peter Jacobi to solve a problem
	  when compiling with the Watcom C on Win32 
	* result/schemas/*.err: the change of hashing algo generated
	  permutations in the output

Mon Jun 17 19:02:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: applied patch from Sander Vesik improving the quality of
	  the hash function.

2002-06-14  Aleksey Sanin  <aleksey@aleksey.com>

	* DOCBparser.c HTMLparser.c debugXML.c encoding.c
	nanoftp.c nanohttp.c parser.c tree.c uri.c xmlIO.c
	xmllint.c xpath.c: replaced sprintf() with snprintf()
	to prevent possible buffer overflow (the bug was pointed
	out by Anju Premachandran) 

Thu Jun 13 17:30:25 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed an uninitialized data error popped by valgrind
	  on PE references

Wed Jun 12 21:38:46 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/xml.html
	adding tutorial reference to the web page

Wed Jun 12 21:26:08 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/ar01s07.html
	* doc/tutorial/ape.html
	* doc/tutorial/includegetattribute.c
	adding section to tutorial about retrieving an attribute
	value

Tue Jun 11 12:07:04 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied a couple of patches from Peter Jacobi to start
	  to get rid of ctxt->token, with a possible significant speed
	  improvement to be gained once done. Better compliance with PE
	  references constructs in DTDs too.
	* test/valid/t[0-9]* result/valid/t[0-9]*: added a set of tests
	  from Peter too

Tue Jun 11 09:25:12 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Babak Vahedipour-Kunze reported that openTag in 
	  xmlParseElement was likely to have been deallocated at the
	  time of the report, possibly leading to segfault. Just report
	  the tag name now.

Mon Jun 10 18:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks for XPath substring() function
	* result/XPath/expr/strings test/XPath/expr/strings: new set of tests

2002-06-06  Aleksey Sanin  <aleksey@aleksey.com>

	* xmlIO.c: patch from Rachel Hestilow to fix bug #84340

Wed Jun  5 19:14:49 MDT 2002 John Fleck <jfleck@inkstain.net>

	*doc/FAQ.html
	fixing typos in FAQ, thanks to Robert Funnell for the
	editing help

Wed Jun  5 14:50:24 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* NEWS: got complaints from rpmlint that it was empty

Tue Jun  4 09:09:18 MDT 2002 John Fleck <jfleck@inkstain.net>

	* added doc/tutorial, including:
	apa.html
	apb.html
	apc.html
	apd.html
	ar01s02.html
	ar01s03.html
	ar01s04.html
	ar01s05.html
	ar01s06.html
	includeaddattribute.c
	includeaddkeyword.c
	includekeyword.c
	includestory.xml
	index.html
	xmltutorial.xml
	libxml tutorial, including generated html

Mon Jun  3 21:21:26 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* result/c14n/exc-without-comments/merlin-c14n-two-*
	  result/c14n/without-comments/merlin-c14n-two-*
	  test/c14n/exc-without-comments/merlin-c14n-two-*
	  test/c14n/without-comments/merlin-c14n-two-*
	  testC14N.c Makefile.am: added merlin-c14n-two.tar.gz tests for 
	c14n/exc-c14n and slightly modified test script to handle
	these test cases
	* c14n.c: fixed bugs for complicated nodes set (namespace
	without node and others from merlin-c14n-two.tar.gz)
	* include/libxml/xpathInternals.h win32/dsp/libxml2.def.src
	win32/libxml2.def.src: "opened" xmlXPathNodeSetFreeNs() function
	for xmlsec performance patch
	* xpath.c: fixed self::node() for namespaces and attributes

Mon Jun 03 00:04:21 2002 Chema Celorio <chema@ximian.com>

	* tree.h: added xmlDocFormatDump which is just as xmlDocDump
	  but with the format parameter
	* tree.c: made xmlDocDump a wrapper 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 available but ftime() is

Thu Mar  7 11:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in doc/Makefile.am: Fixed #73408 missing images
	  are now copied on install and part of the -devel RPM

Thu Mar  7 09:34:16 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: trying to avoid bug #72150 which was apparently
	  caused by a gcc bug (or a processor problem) as detailed
	  at http://veillard.com/gcc.bug

Thu Mar  7 01:02:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c python/tests/Makefile.am python/tests/cutnpaste.py:
	  fixed xmlReconciliateNs(), added a Python test/example for
	  inter-document cut'n paste
	* python/libxml.py: fixed node.doc on document nodes and added
	  xpathEval() onto node objects

Wed Mar  6 22:38:03 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed some htmlSetMetaEncoding() problems
	* python/libxml.c python/tests/Makefile.am python/tests/serialize.py:
	  fixup and integrated tests for the serialization stuff

Wed Mar  6 19:40:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am libxml.3 libxml.4 libxml.spec.in: Fixed bug #72570
	  moved the libxml man page to section 3

Wed Mar  6 18:34:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix bug #72490
	* python/libxml.c python/libxml.py: added methods serialize()
	  and saveTo() to all node elements.

Tue Mar  5 21:27:03 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: closed #73430, don't read from an input source
	  which indicated an end-of-file or an error.

Tue Mar  5 16:33:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: make sure SAX endDocument is always called as
	  this could result in a Python memory leak otherwise (it's
	  used to decrement ref-counting)
	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml2-python-api.xml python/libxml2class.txt
	  python/tests/error.py python/tests/xpath.py: implemented
	  the suggestions made by Gary Benson and extended the tests
	  to match it.

Tue Mar  5 10:35:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: applied patch fixing #73450

Mon Mar  4 17:59:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing #61290 "namespace nodes have no parent"
	  long standing divergence from the XPath REC. NodeSets
	  simply hold a copy of namespace nodes and those node ->next
	  points to the parent (which may not be the node carrying the
	  definition).
	* include/libxml/xpath.h: flagged but didn't added a possible
	  speedup
	* DOCBparser.c HTMLparser.c: removed some warnings from push
	  parser due to new state being added.
	* tree.c: new fix from Boris Erdmann
	* configure.in c14n.c include/libxml/c14n.h testC14N.c: added
	  the XML Canonalization support from Aleksey Sanin

Sun Mar  3 15:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: patch from Boris Erdmann fixing some namespace odities
	  with xmlCopyNode()

Sat Mar  2 10:33:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix bug #72706 when loading a NULL entity

Fri Mar  1 17:14:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: Fixed #72346, about handling of xmlns:foo="", this could
	  actually change in a future XML Namespace revision.

Fri Mar  1 17:12:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/types.c python/tests/Makefile.am python/tests/xpathret.py:
	  added the possibility of returning nodesets from XPath extension
	  functions written in Python

Fri Mar  1 13:56:12 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/*: 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 succeeded, 2 failed and 0 generated an error in 8.26 s.
	  The 2 tests left failing are actually in error. Cleanup done.

Tue Feb 19 15:17:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: implemented E59 spaces in CDATA does not match the
	  nonterminal S

Tue Feb 19 14:44:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c valid.c: more validation test fixups
	* check-xml-test-suite.py: added duration info for the tests

Mon Feb 18 23:25:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c valid.c: a couple of errors were reported but not
	  saved back as such in the parsing context. Down to 1% failure rate
	  Ran 1819 tests: 1801 succeeded, 18 failed and 0 generated an error

Mon Feb 18 20:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlInternald.c: isExtender was missing a char 
	* parser.c include/libxml/parser.h: % are acceptable in the
	  internal subset if within a PUBLIC ID

Mon Feb 18 19:27:32 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c parserInternals.c valid.c: more work on the conformance
	  suite. Took the step to finally block documents with encoding
	  errors. It's a fatal error per the spec, people should have fixed
	  their documents by now.

Mon Feb 18 15:30:14 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: fixed the test script after some discussion
	  on the semantic of TYPE="error"
	* Makefile.am: added the script to the distrib

Mon Feb 18 12:17:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c entities.c: fixed a couple of conformances issues deep
	  into the validation code (standalone and undeclared Notations)

Mon Feb 18 00:17:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #71741 supid typo an a bug about encoding parsing
	  stayed there for years !

Mon Feb 18 00:06:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c SAX.c: fixed #71740 NotationDecl with a required field
	  missing

Sun Feb 17 23:45:40 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: improved the behaviour a bit as
	  well as the logs
	* parser.c valid.c SAX.c: fixed a few more bugs 
	  "Ran 1819 tests: 1778 succeeded, 41 failed, and 0 generated an error"

Sun Feb 17 20:41:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: python script to run regression tests
	  against the XML Test suite of W3C/OASis
	* SAX.c: fixed a validation bug
	* parser.c: fixed 3 errors pointed by the test suite
	* doc/buildDocBookCatalog: fixed a typo pointed by drake
	* python/Makefile.am: fixed a dependendy

Fri Feb 15 21:47:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: avoid a warning bug #71594

Wed Feb 13 22:13:33 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: Jesse Perry provided a patch to remove a few
	  warning on alpha/Tru64

Wed Feb 13 14:30:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/entities.h: fixing a comment
	* valid.c: fixing some troubles with validity check on namespaces
	* result/VC/NS3 test/VC/NS3: added a specific regression test

Wed Feb 13 14:05:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Fixing #71342 serializing '\n' in attribute values
	* result/noent/att3 result/att3 test/att3: added a specific
	  test.

Tue Feb 12 14:45:32 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: couple of bug fixes

Mon Feb 11 19:41:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/*.py: removed tabs and used spaces.

Mon Feb 11 19:25:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.15
	* doc/news.html doc/xml.html doc/xmlio.html: rebuilt some docs

Mon Feb 11 14:53:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xmlcatalog_man.xml: trying to close Red Hat bug #58707
	  https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=58707

Mon Feb 11 09:53:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/encoding.h include/libxml/entities.h
	  include/libxml/globals.h include/libxml/parser.h
	  include/libxml/threads.h include/libxml/tree.h
	  include/libxml/xmlmemory.h: trying to fix the include mess

Mon Feb 11 08:53:33 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlmemory.h: reverted part of the previous
	  attempt to provide #69655, this was breaking the build.

Sun Feb 10 14:13:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c Makefile.am build_glob.py configure.in debugXML.c
	  globals.c parser.c threads.c tree.c valid.c xmlmemory.c
	  xpath.c xpointer.c include/libxml/globals.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/tree.h
	  include/libxml/xmlmemory.h include/libxml/xpathInternals.h:
	  Tentatively fixed #69655 , make compiling with -Wredundant-decls
	  clean.
	* python/libxml.c: fixed a warning.

Sun Feb 10 12:02:59 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c valid.c xinclude.c: fix #68882, cleanup the XInclude
	  copying of node, merge back IDs in the target document.
	* result/XInclude/docids.xml test/XInclude/docs/docids.xml
	  test/XInclude/ents/ids.xml: test case
	* result/VC/ElementValid4: output changed due to a typo fix

Sat Feb  9 23:15:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: seems some version of automake didn't
	  generate the dependencies right as Jacob found out. Add
	  an extra dependency rule.

Sat Feb  9 18:59:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c valid.c: Justin Fletcher found some parts
	  of the code needing cleanup
	* libxml.spec.in python/Makefile.am python/generator.py
	  python/libxml.c python/libxml.py: Fixed the python Makefiles
	  corrected a bug showing up on ia64, changed the name of the
	  python internal module too

Fri Feb  8 15:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: applied patch from Andris Pavenis for binary
	  name suffixes

Fri Feb  8 14:43:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c win32/win32config.h: fixing #68748

Fri Feb  8 14:37:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing #70166

Fri Feb  8 14:31:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing #70077

Fri Feb  8 14:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Copyright Makefile.am README configure.in libxml.spec.in:
	  Changed to the MIT Licence
	* doc/FAQ.html doc/catalog.html doc/intro.html doc/xml.html
	  doc/xmlio.html: updated the doc accordingly
	* include/libxml/xmlwin32version.h configure.in: preparing
	  2.4.14 release
	* python/generator.py python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/types.c:
	  fixed the const xmlChar * wrapper and generator, XPath extension
	  functions now use the context as first argument
	* python/tests/tstxpath.py python/tests/xpath.py
	  python/tests/xpathext.py: Updated the tests accordingly
	* tree.c: fixed bug #70067

Thu Feb  7 17:33:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* debugXML.c: always use stdout if output is NULL
	* xmlIO.c: don't close filedescriptors passed to outputBuffers
	* python/Makefile.am python/generator.py python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: augmented the number of bindings
	  handling FILE * and XPath contexts
	* python/tests/Makefile.am: avoid a stupid problem due to the
	  use of TEST.

Wed Feb  6 23:37:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: fixed stupid bug #70738 found by alfons hoogervorst

Wed Feb  6 17:04:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/libxml.c: cleanup the extension function lookup
	* xmlmemory.c include/libxml/xmlmemory.h: always compile the list

Tue Feb  5 17:33:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in python/Makefile.am: do not install outside
	  of prefix

Mon Feb  4 15:05:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/libxml.c: started adding SAX interfaces
	* python/tests/Makefile.am python/tests/pushSAX.py: added a basic
	  SAX test

Mon Feb  4 01:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: hardened the addChild function
	* python/generator.py python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/TODO:
	  added accessors needed for xmlNode, a bit more testing and
	  extension of interfaces
	* python/tests/Makefile.am python/tests/build.py: added a test
	  build from scratch/save/load/check

Sun Feb  3 21:10:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: change a small bit in the way valididy
	  error messages get initialized
	* python/TODO python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/types.c:
	  added some memory debugging to track leaks at the libxml2 level
	* python/tests/*.py: changed all tests to check for leaks,
	  there is just one left in XPath extension registrations.

Sun Feb  3 17:50:46 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/generator.py python/libxml2-python-api.xml
	  python/libxml2class.txt: more accessor classes for the parser
	  context, allow to switch on and check validity
	* python/tests/Makefile.am python/tests/error.py
	  python/tests/invalid.xml python/tests/valid.xml
	  python/tests/validate.py: added more test and added error.py
	  which I forgot to commit in the last step

Sun Feb  3 16:03:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/types.c: cleanup
	* python/libxml.c python/libxml.py python/libxml_wrap.h
	  python/generator.py python/libxml2-python-api.xml 
	  python/libxml2class.txt: added class for parser context, added
	  first cut for push mode support. Added a framework to generate
	  accessors functions.
	* python/tests/Makefile.am python/tests/push.py: added a push
	  test

Sun Feb  3 00:17:26 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/TODO python/libxml.py: fixed a small
	  bug a bit of cleanup.

Sat Feb  2 22:47:10 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt: adding error redirections and preformat
	  to a python handler
	* python/tests/Makefile.am python/tests/*.py: cleanup made all
	  tests self checking

Sat Feb  2 13:18:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: fixed a stupid bug when renaming
	  a function

Sat Feb  2 11:25:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in python/Makefile.am python/TODO python/generator.py
	  python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt: Progressing through the TODOs, class
	  description output, extra XML API, RPM now builds the wrappers
	  for all python installed versions

Sat Feb  2 10:13:52 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.spec.in python/Makefile.am python/TODO
	  python/generator.py python/libxml2class.txt: added more 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
	  exponential buffer growth policy in xmlParserAddNodeInfo()

Wed Jan 23 13:32:40 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/api.xsl doc/APIconstructors.html doc/APIfiles.html
	  doc/APIfunctions.html doc/APIsymbols.html doc/libxml2-refs.xml
	  doc/parsedecl.py doc/Makefile.am: updated the python extractor
	  to generate cross-references, and added/updated the stylesheets
	  to generate and link API indexes. The generic keyword index
	  is not done yet.
	* doc/*.html: regenerated all the usual docs too

Tue Jan 22 23:11:26 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added an xpath function to the shell for T. V. Raman

Tue Jan 22 22:42:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: patch from Anthony Jones to catch NULL nodes in
	  debug routines.

Tue Jan 22 22:38:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: apply an patch from Petr Kozelka for unlink and replace 
	  support of attribute nodes

Tue Jan 22 19:12:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/parsedecl.py: Build a new version
	  hopefully near complete and fully documented of the API in XML
	* HTMLtree.c SAX.c debugXML.c error.c globals.c parser.c tree.c
	 xmlIO.c xmlmemory.c include/libxml/catalog.h include/libxml/hash.h
	 include/libxml/list.h include/libxml/parser.h include/libxml/tree.h
	 include/libxml/parserInternals.h include/libxml/valid.hi
	 include/libxml/xmlIO.h include/libxml/xmlerror.hi
	 include/libxml/xmlmemory.h include/libxml/xmlversion.h.ini
	 include/libxml/xpath.h include/libxml/xpathInternals.h:
	  Cleaned up the doc comments a lot in the process, the interface
	  coverage is now 100%

Tue Jan 22 00:12:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/parsedecl.py: improved the script to
	  extracts comments from the gtk-doc DocBook output (a bit
	  convoluted but seems to work).

Mon Jan 21 18:29:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/Makefile.am doc/libxml2-api.xml doc/parsedecl.py:
	  added an XML description of the API, moved the script generating
	  it here. Added a "make api" target

Mon Jan 21 14:34:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Adam Lounds pointed out a bug in xmlSearchNs()

Mon Jan 21 09:55:21 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c include/libxml/xpathInternals.h: the change made to
	  xmlXPathFuncLookupFunc was incompatible roll it back

Sun Jan 20 23:03:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: cleanup patch from Anthony Jones
	* doc/Makefile.am: fix the headers to avoid in make scan
	* parserInternals.c xpath.c include/libxml/*.h: cleanup of the
	  includes, * vs Ptr and general cleanup
	* parsedecl.py: first version of a script to extract the
	  module interfaces, the goal will be to provide .decl or XML
	  specification of the interfaces to build wrappers.

Sun Jan 20 13:38:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xmlcatalog_man.xml xmlcatalog.c: Fixed bug #68830, xmlcatalog
	  now provides return codes in case of errors

Sat Jan 19 16:36:21 CET 2002 Bjorn Reese <breese@users.sourceforge.net>

	* trio.h trio.c triodef.h triop.h trionan.h trionan.c Makefile.am:
	  Upgraded to trio baseline 1.6
	* strio.h strio.c: Replaced by triostr.h and triostr.c

Fri Jan 18 17:22:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlIO.c xmlcatalog.c: removed the last occurrences
	  of strdup usage in the code

Fri Jan 18 12:47:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c error.c: Keith Isdale complained rightly that 
	  xmlInitParser() did not preserve value set by xmlSetGenericErrorFunc

Thu Jan 17 09:44:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed the funxtion to set the xml: attributes
	* debugXML.c: added "setbase" to test it.

Wed Jan 16 16:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: update xmlNodeSetContent() and xmlNodeSetContentLen()
	  to allow updating an attribute content

Tue Jan 15 18:09:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.h: try to avoid problems when compiling on Windows

Mon Jan 14 18:56:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: patch from Anthony Jones for hash.c allocation size
	* Makefile.am: trying to work around Yet Another Libtool Madness
	  and build the 2.4.13 release finally ...

Mon Jan 14 18:27:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: updated to 2.4.13
	* doc/* : update of the documentation

Mon Jan 14 17:53:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c tree.c: some cleanup after an unsuccessful attempt
	  at fixing #61290 :-(

Sun Jan 13 21:30:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed xmlSaveFormatFileEnc() when encoding == NULL
	  Fixes bug #67229

Sun Jan 13 17:14:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: trying to avoid troubles when a subtree is copied
	  and coalesced in part with the target tree. Should fix 
	  bug #67407

Sun Jan 13 16:37:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed validation of attributes content of type
	  NAME NAMES NMTOKEN and NMTOKENS to accept internationalized
	  values, very old bug. Fixes #67671

Sun Jan 13 15:07:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parserInternals.h tree.c: integrated
	  a couple of fixes and a new API function xmlSetEntityReferenceFunc()
	  from Keith Isdale and dedicated to xsldbg the XSLT debugger.

Sun Jan 13 14:23:21 CET 2002 Daniel Veillard <daniel@veillard.com>

	* threads.c: applied Serguei Narojnyi's patch to add native
	  thread support on the Win32 platform
	* testThreadsWin32.c Makefile.am: added the test program also
	  from Serguei, Win32 specific
	* include/win32config.h include/libxml/xmlwin32version.h.in:
	  added patch from Igor for the Windows thread specific defines.

Wed Jan  9 12:50:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* entities.c: Anthony Jones pointed a bug in xmlCopyEntity()

Tue Jan  8 14:23:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*.html doc/site.xsl doc/Makefile: renamed XML.html
	  output page into XMLinfo.html. Close bug #66951 and
	  raised by Robert Collins too.

Tue Jan  8 14:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>

	* encoding.c: Paul Keogh pointed out a possibility of segfault
	  on repeted xmlAddEncodingAlias() / xmlCleanupEncodingAlias().
	  Closes bug # 68238

Tue Jan  8 12:48:27 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*.html: updated the Gdome2 links

Tue Jan  8 11:32:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.h: Applied following patches from Robert Collins
	  and make sure IN_LIBXML is defined when compiling it
	-------
	* include/libxml/xmlversion.h.in (LIBXML_DLL_IMPORT): Use on Cygwin
	  as well as Visual C.
	* parser.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
	* parserInternals.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
	* strio.c (PLATFORM_UNIX): Define for Cygwin.
	* triodef.h (TRIO_PLATFORM_UNIX): Define for Cygwin.
	* xmlIO.c (xmlFileOpen): Use unix behaviour for Cygwin.
	  Use binary mode opens for Cygwin (xmlFileOpenW xmlParserGetDirectory
	  xmlSysIDExists xmlNoNetExists).
	* xmllint.c: Don't include winsock2.h for Cygwin.

Mon Jan  7 17:52:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Jirka Kosek pointer out a bug in xmlParseTextDecl()
	  when the version info is not present.

Mon Jan  7 00:03:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Anthony Jones  pointed out a problem in
	  xmlStringGetNodeList() and provided a fix for it

Sun Jan  6 13:45:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Frank J Franklin to remove a bug in
	  xmlCreatePushParserCtxt() when the initial buffer passed
	  is large.

Sat Jan  5 19:24:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* win32/*: big cleanup of the Windows/MSVC project files
	  from Igor Zlatkovic

Wed Jan  2 14:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: should fix #67674 and avoid troubles if 
	  xsltproc is not available or fails in the prefix provided

Tue Jan  1 17:48:56 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: one more doc patch from Charlie Bozeman.

Mon Dec 31 17:35:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c parser.c valid.c include/libxml/parserInternals.h
	  include/libxml/xmlerror.h include/libxml/xpathInternals.h:
	  Fixed a few other problems raised by Charlie Bozeman.
	* result/VC/ElementValid[5-7]: fixed the output

Mon Dec 31 17:13:34 CET 2001 Daniel Veillard <daniel@veillard.com>

	* *.c include/libxml/*.h doc/html/*: applied 42 documentation
	  patches from Charlie Bozeman. Regenerated the HTML docs.

Thu Dec 20 14:59:52 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/debugXML.h win32/dsp/libxml2.def.src: fixes
	  for Windows from Igor

Tue Dec 18 12:13:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Justin Fletcher patch for --output or -o

Tue Dec 18 08:52:32 CET 2001 Daniel Veillard <daniel@veillard.com>

	* win32/libxml2/libxml2.def.src: close #67019

Tue Dec 18 08:08:51 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Justin Fletcher generic timing patch
	  similar to the one already applied to xsltproc.

Mon Dec 17 16:29:08 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h tree.c: applied documentation patches
	  from Charlie Bozeman

Thu Dec 13 21:24:16 MST 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmllint.xml, xmllint.1 - document --dropdtd

Thu Dec 13 23:19:50 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix the xmlStrdup() used in the previous patch.
	* valid.c: added --dropdtd
	* tree.c: fixed xmlUnlinkNode so it also removes the references
	  from the document if the node is a DTD

Thu Dec 13 15:54:35 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c valid.c: cleanup some static declarations

Thu Dec 13 15:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: removed another strdup()
	* doc/FAQ: removed the HP/UX entry

Thu Dec 13 09:44:58 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix bug #66816 when validating.
	* xmllint.c: don't use sys/time.h if configure did not found it

Mon Dec 10 21:39:55 MST 2001 John Fleck <jfleck@inkstain.net>

	* docs/xmllint.1, xmllint.xml, xmlcatalog.1, xmlcatalog_man.html,
	xmlcatalog_man.xml

Mon Dec 10 22:06:16 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlmemory.h: Hietaniemi Jarkko pointed out that
	  xmlInitMemory() was declared twice

Sun Dec  9 14:59:23 CET 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c: do not reference strdup() !
	* configure.in libxml-2.0.pc.in: trying to fix the libs
	  of the various config extraction modules

Fri Dec  7 15:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in : preparing 2.4.12
	* doc/* : updated and rebuilt the docs

Fri Dec  7 12:32:00 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: closed bug #66159
	* testURI.c: added --escape option
	* configure.in: some cleanup for xml2-config --cflags

Thu Dec  6 15:31:30 CET 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c testThreads.c: removed some misplaced includes
	  of xmlversion.h

Thu Dec  6 09:06:08 EST 2001 Daniel Veillard <daniel@veillard.com>

	* threads.c: patch from Gary Pennington fixing a possible
	  problem at initialization time.

Wed Dec  5 13:01:37 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.h parser.c testThreads.c macos/: integrated
	  Eric Lavigne contribution to build libxml2 on MacOS using
	  CodeWarrior.

Tue Dec  4 14:13:44 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Geert Kloosterman's patch to fix
	  --repeat --timing output

Thu Nov 29 17:10:22 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: Robin Berjon <robin@knowscape.com> found a case
	  where non-wellformed XML declaractions were not detected.

Wed Nov 28 15:41:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xpointer.c: fixed a compilation bug pointed by Danny Jamshy

Wed Nov 28 10:09:51 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: as robert pointed again, xmlInputCallbackInitialized
	  gets reset by xmlCleanupInputCallbacks() and this makes the
	  function useless. Same for output.

Tue Nov 27 17:22:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: robert pointed out a loop error in callback cleanups

Mon Nov 26 16:56:00 CET 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c debugXML.c include/libxml/tree.h include/libxml/debugXML.h:
	  moved xmlGetLineNo() and xmlGetNodePath() into the main tree module,
	  they are not really tied to debugging

Mon Nov 26 11:31:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.11
	* xmllint.c: better --catalogs description

Sun Nov 25 11:34:24 CET 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a couple of problems in xmlSetProp()

Thu Nov 22 19:19:10 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c tree.c xmlIO.c xmlmemory.c: some cleanups when chasing
	  unappropriate stdout output.

Thu Nov 22 13:58:14 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: Fixed a couple of macro errors pointed out
	  by Denis Beurive, closes #65111

Tue Nov 20 10:34:01 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: in case of content model validity error, don't
	  print it if validity warnings were not requested.

Tue Nov 20 09:30:02 CET 2001 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied a couple of patches from Brian D Ripley.
	* parserInternals.c: removed the last exit() call. Print an
	  unmaskable error on stderr instead (library mismatch detection)

Sat Nov 17 17:16:51 MST 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, doc/xmllint.1 - update xmllint man page with
	shell instructions from Heiko Rupp

Thu Nov 15 14:53:42 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: use the URL notation file:// for default catalog paths

Wed Nov 14 16:03:02 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: better comments for _private fields
	* tree.c: removed a problem when copying an entity reference.

Tue Nov 13 16:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>

	* vms/*: updated instructions and diffs from John A Fotheringham

Mon Nov 12 23:43:22 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlerror.h: avoid an include problem if
	  #include <libxml/xmlerror.h> happens first in code
	  seems to be the case in KDE libs

Mon Nov 12 22:32:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/* include/libxml/xmlwin32version.h.in: update
	  from Igor for Windows

Mon Nov 12 10:19:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Gary Pennington pointed out a missing prefix

Sat Nov 10 12:55:42 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.10
	* doc/*: upgraded and rebuilt the docs

Sat Nov 10 12:33:38 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fix comment in scripts element parsing.
	* result/HTML/doc3*: updated the results.

Sat Nov 10 11:18:18 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: another URI bug fix #63336, using Joel Young patch.

Sat Nov 10 11:07:26 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h: add xmlGetNodePath()
	  a cleaned up version of the Pwd shell string generation.

Fri Nov  9 00:34:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/tree.h: trying to fix namespaces +
	  validation problems for good, closing #63619 in the process
	* result/valid/dia.xml test/valid/dia.xml: the Dia test was
	  wrong in this respect, fixed it.

Thu Nov  8 18:31:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: Morus Walter patch to allow --format and --encode

Thu Nov  8 14:52:18 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: Stefan Kost provided an help command for the shell

Wed Nov  7 14:32:55 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: Heiko Rupp pointed that the shell would crash
	  on empty nodesets returns.

Wed Nov  7 13:52:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Weiqi Gao pointed out that xmlcatalog
	  migh need the history libraries

Tue Nov  6 23:49:09 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c test/HTML/lt.html result/HTML/lt.html*:
	  handle the case of < in quoted attributes, Bastian Kleineidam

Tue Nov  6 16:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: releasing 2.4.9
	  fixing catalog breakages
	* Makefile.am catalog.c result/catalogs/catal 
	  result/catalogs/mycatalog.* test/catalogs/catal*:
	  fixed more problems in catalog support, added more regression tests
	  for both XML and SGML catalog handling

Mon Nov  5 20:26:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: applied an improvement to xmlGetLineNo() from
	  Keith Isdale

Mon Nov  5 15:20:16 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: dohhhh XML catalog add and remove ops were broken too.
	  Side effect of the progressive catalog loading

Mon Nov  5 12:40:54 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: confexecdir and confexec_DATA were defined twice
	  pointed out by Karl Eichwalder

Sun Nov  4 23:18:34 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: avoid unlink() and use remove() instead.

Sun Nov  4 23:12:38 CET 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: cleanup
	* include/libxml/xmlwin32version.h: updated with 2.4.8

Sun Nov  4 21:17:24 CET 2001 Daniel Veillard <daniel@veillard.com>

	* encoding.c global.data globals.c testThreads.c: fix bug #63752
	  of compiling libxml with a non standard set of options

Sun Nov  4 13:11:41 MST 2001 John Fleck <jfleck@inkstain.net

	* doc/xmllint.xml, xmllint.1 - updating xmllint man page to
	document --sgml option, fixing gnome bugzilla #63382

Sun Nov  4 20:56:53 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c: Fixed SGML catalogs
	  breakage of 2.4.7, added a couple of really needed APIs
	  like xmlCatalogIsEmpty() and xmlNewCatalog()
	* xmlcatalog.c: updated --sgml --noout to be a suitable replacement
	  for install-catalog
	* configure.in: preparing 2.4.8

Thu Nov  1 15:29:31 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c include/libxml/HTMLtree.h
	  include/libxml/tree.h include/libxml/xmlIO.h: more include
	  cleanups, export cleanly one html output + format function.

Thu Nov  1 14:12:12 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed initGenericErrorDefaultFunc call from
	  xmlInitParser() since it could destroy previous calls to
	  xsltSetGenericErrorFunc() effects

Thu Nov  1 09:37:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h: bool can be a reserved
	  keyword.

Wed Oct 31 18:50:08 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* threads.c: cleanup too
	* xmlIO.c include/libxml/xmlIO.h: added xmlNoNetExternalEntityLoader()
	  from xsltproc
	* include/libxml/tree.h include/libxml/parser.h: trying to break a
	  dependency loop.

Tue Oct 30 18:38:53 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: Justin Fletcher pointed out that xmlParseXMLCatalog
	  was not used anymore !

Tue Oct 30 13:33:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.7
	* Makefile.am doc/Makefile.am: switched to the latest xmllint
	  manual page from John
	* doc/*: updated the doc and rebuilt the generated pages

Tue Oct 30 11:31:19 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: closing bug #62711, the library should never
	  close stdin or stdout.

Tue Oct 30 10:46:12 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: second pass at fixing #63336, using Joel Young
	  final patch. looks okay.

Tue Oct 30 00:56:05 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c include/libxml/uri.h: trying to clear #63336
	  allowing the escaping routine to parse unconformant
	  URI-References.

Mon Oct 29 19:09:46 CET 2001 Daniel Veillard <daniel@veillard.com>

	* vms/readme.vms vms/build_libxml.com nanoftp.c 
	  include/libxml/xmlversion.h.in: a few VMS updates from
	  John A Fotheringham
	* include/libxml/xmlIO.h xmlIO.c: added xmlCleanupInputCallbacks()
	  and xmlCleanupOutputCallbacks() for the Perl binding people.

Mon Oct 29 12:44:17 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c globals.c DOCBparser.c HTMLparser.c error.c:
	  apply fixes to close #63271 and avoid segfaults when
	  the error routine gets callbed before xmlInitParser()
	  get called.
	* nanoftp.c error.c: Applied patches from Justin Fletcher
	  correcting some xmlGenericError misuses.

Sat Oct 27 14:04:45 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmllint.xml, doc/xmllint.1
	New and improved man page for xmllint - .xml is the original, .1
	is the generated man page

Wed Oct 24 14:34:25 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* doc/site.xsl doc/*.html doc/Makefile.am: now autogenerate
	  the web site from the main HTML document.

Tue Oct 23 14:32:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed an erroneous validation bug when PE refs
	  occurs in external parsed entities referenced from the
	  internals subset
	* test/valid/index.xml test/valid/dtds/nitf-2-5.dtd
	  test/valid/dtds/NewsMLv1.0.dtd result/valid/index.xml*:
	  added the associated testcase, it's a nice one.
	* HTMLparser.c: generate the DTD node as HTML still ...
	* HTMLtree.c: fixed errors in Set/GetMetaEncoding 

Mon Oct 22 14:20:17 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed a bug in htmlNewDoc()

Mon Oct 22 11:32:36 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* test/threads/*: added entities testing to the Thread test
	* testThreads.c: make the test reasonable
	* DOCBparser.c: fix the DTD public and system ID
	* xmllint.c: added --sgml for SGML DocBook importing
	* Makefile.am: added Docbtests target

Fri Oct 19 11:47:13 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: use only "anonymous@" string for anonymous passwds
	* testThreads.c: removed bogus include

Thu Oct 18 16:56:23 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c valid.c result/valid/rss.xml result/valid/rss.xml.err:
	  fixed a very serious (looping) validation bug

Wed Oct 17 11:56:25 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h include/libxml/threads.h threads.c
	  testThreads.c: far more testing, cleaning up bugs
	* *.c : make sure globals.h is always included.

Wed Oct 17 17:41:41 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: try to get rid of parser loops for good.

Wed Oct 17 13:29:02 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: fixed some bugs in CFLAGS passing.
	* test/threads Makefile.am testThreads.c: added a specific
	  threaded test case (really nasty, guaranteed).

Tue Oct 16 23:01:49 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: serious cleanup on the management of the
	  XML catalog tree, more tests done, especially with
	  the catalog PI.

Tue Oct 16 08:43:43 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: avoid a problem in catalog cleanup on SMP if
	  catalogs were not initialized.

Tue Oct 16 14:33:19 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xpath.c: trying to cleanup the not thread safe
	  parts of the library.

Mon Oct 15 14:30:11 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h configure.in global.data: make
	  the allocation be per-thread a configure option
	* encoding.c include/libxml/parser.h: fixed compilation
	  errors

Mon Oct 15 12:45:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h: Norm reported that a few lines
	  added were breaking libxslt compile, removed them for now

Sun Oct 14 05:55:01 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c threads.c: debugged and fixed
	  initialization problems which were giving troubles on SMP
	  boxes.

Sat Oct 13 16:17:13 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: missing globals.h

Sat Oct 13 14:15:00 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c: added a couple of standard includes.

Sat Oct 13 11:08:20 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/SAX.h include/libxml/globals.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/tree.h
	  include/libxml/xmlerror.h HTMLparser.c SAX.c error.c globals.c
	  nanoftp.c nanohttp.c parser.c parserInternals.c testDocbook.c
	  testHTML.c testSAX.c tree.c uri.c xlink.c xmlmemory.c:
	  Applied the last patches from Gary, cleanup, activated threading
	  all user accessible global variables are now handled in globals.[ch]
	  Still a bit rought but make tests passes with either 
	  --with-threads defined at configure time or not.
	* Makefile.am example/Makefile.am: added globals.[ch] and threads
	  linking options

Fri Oct 12 19:25:55 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am include/libxml/Makefile.am
	  include/libxml/globals.h globals.c  include/libxml/threads.h
	  threads.c build_glob.py global.data xmlcatalog.c acconfig.h
	  configure.in: started integrating the core of the thread support
	  not activated yet but half integrated. The code should still
	  compile and work anyway.

Fri Oct 12 00:53:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c catalog.c debugXML.c entities.c nanoftp.c
	  parser.c valid.c xmlmemory.c xpath.c xpointer.c: started
	  integrating the non-controversial parts of Gary Pennington
	  multithread patches
	* catalog.c: corrected a small bug introduced

Thu Oct 11 20:58:15 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c include/libxml/catalog.h: very serious cleanup,
	  isolating unportable code and as much as possible the accesses
	  to the global shared catalog. May need more testing !

Thu Oct 11 11:10:31 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/debugXML.h debugXML.c tree.c: integrating
	  Keith Isdale patches for the XSLT debugger interfaces. Some
	  cleanup

Thu Oct 11 08:44:01 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.mingw: update from Tobias Peters for 2.4.5
	* DOCBparser.c: generate line nubers in elements

Wed Oct 10 11:35:45 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.6 release
	* doc/xml.html doc/html/*: updated and rebuilt the docs
	* include/libxml/*.h *.c: fixed a number of teh/the widht/width typos

Mon Oct  8 20:38:27 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog.1, xmlcatalog_man.html
	adding documentation for DV's supercatalog support

Mon Oct  8 17:00:16 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c xmlcatalog.c: adding SGML
	  super catalog support adding one API and one flag --sgml to
	  xmlcatalog

Sun Oct  7 16:43:57 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog.1
	One more crack at
	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392 

Sun Oct  7 18:47:02 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* xpath.c: implemented xmlXPathObjectCopy for external objects
	* include/libxml/xpathInternals.h: added xmlXPathStackIsExternal

Sat Oct  6 16:25:52 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
	finishing up fix to
	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392, making
	the xmlcatalog man page display more elegantly

Sat Oct  6 15:27:12 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: closing bug #61832
	* HTMLparser.c: removed a warning

Sat Oct  6 15:07:14 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing #61673 part I, do not lose doc information
	  when copying result value trees.

Sat Oct  6 11:58:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: trying to harden the XPath interpreter

Fri Oct  5 20:37:51 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog.1 updated using a new stylesheet to address, in
	part, https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392

Fri Oct  5 23:35:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* HTMLparser: repaired another loop problem

Fri Oct  5 11:16:21 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied fix from Mathias Hasselmann about a bug in URI
	  parsing.
	* xpath.c: fix bug #61291 the default XML namespace node is
	  missing from the namespace axis.
	* tree.c: refuse to create namespaces nodes with prefix "xml"

Thu Oct  4 16:47:44 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: ouch a non-defined namespace could lead to a crash,
	  fixed #61215

Thu Oct  4 16:24:26 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: closed bug #61054

Wed Oct  3 15:19:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: closing #60708

Tue Oct  2 15:52:05 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src include/libxml/parser.h parser.c:
	  adding xmlSAXParseFileWithData following Marco Stipek suggestion

Tue Oct  2 11:27:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: close bug #61550 when xml: wasn't considered a namespace

Tue Oct  2 11:18:32 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: Igor Zlatkovic patches
	* DOCBparser.c HTMLparser.c parser.c: fixed typos

Mon Oct  1 09:34:51 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: Justin Fletcher provided cleaup code in case
	  HAVE_STAT is not defined
	* include/win32config.h: Igor Zlatkovic suggested to have
	  HAVE_STAT defined there

Sat Sep 29 00:15:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* catalog.c - fixed typing error reported by M. Barros

Sun Sep 23 21:02:39 MDT 2001 John Fleck <jfleck@inkstain.net>

	* xmllint.c - fixing typo

Sat Sep 22 10:00:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: small enhancement to prevent loop on
	  unrecognizable data

Fri Sep 21 11:45:53 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: applying patch from bug #60757 this
	  should close it

Thu Sep 20 15:54:29 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xmlcatalog.c: removed a couple of warning
	* xpath.c: try to solve the linking problem on platforms
	  needing trio to compile

Wed Sep 19 10:01:37 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am libxml.spec.in: backing up non-documented changes
	  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 substituted

Mon Sep 10 22:14:42 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.h include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h include/libxml/xmlwin32version.h.in:
	  Tried to close bug #60131

Mon Sep 10 20:46:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed a bug in the HTML parser introduced Sep  9

Mon Sep 10 20:13:09 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixing bug #59946 on xmlns=""

Mon Sep 10 16:39:42 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlerror.h SAX.c: fixing bug 59732, simple
	  but allocates a new error code.

Sun Sep  9 10:33:15 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: John Fleck fixed typos in the options output
	* parser.c SAX.c: fix ignorable white space SAX selection

Sat Sep  8 11:43:53 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* entities.c: Steve Underwood found the possibility of an
	  ininite loop in case of error.

Fri Sep  7 11:35:00 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Need $(ICONV_LIBS) in libxml2_la_LIBADD

Wed Sep  5 17:47:43 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: warn if version is not 1.0 but it's not
	  strictly speaking an error after analyzing the spec

Mon Sep  3 10:07:03 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/catalog.html - add link to the html version of the
	man page, other linguistic cleanups

Mon Sep  3 09:10:08 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
	adding documentation for xmlcatalog. Note: xmlcatalog.1, the man
	file, has not yet been included in the build.

Sat Sep  1 18:17:47 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: removed a duplicate affectation Justin Fletcher

Fri Aug 31 22:02:10 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: Armin Sander pointed a possible text coalescing 
	  problem, completed his patch.

Fri Aug 31 18:30:28 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* trionan.c: Fixed const and volatile re-definition problem

Fri Aug 31 16:51:28 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.4 parser.c: doc updates from Heiko Rupp
	* parserInternals.c: 2 sanity checks from Heiko Rupp

Tue Aug 28 22:38:45 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Armin Sander to make some pointers
	  const in xmlCopyNode()
	* include/libxml/tree.h: added fix to the header

Mon Aug 27 16:24:47 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: hum, restrict the integer usage gcc bug workaround
	  to only gcc compilers so that other architecture don't get
	  penalized by this limitation.
	* include/libxml/xpath.h: small typo fix from Heiko W. Rupp

Sun Aug 26 20:45:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed a Windows compiler warning (Chris Poblete)
	* xpath.c: fix for mod when dividend is 0 (Chris Poblete)

Sat Aug 25 15:30:17 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c xmlcatalog.c: added a 
	  --convert option to xmlcatalog to convert SGML ones to
	  the XML syntax.
	* xmllint.c: small cleanup for $SGML_CATALOG_FILES support.

	2.4.3 got released at that point
Thu Aug 23 23:16:32 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xmlIO.c: started some serious testing and fixed
	  a few bug and 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 occurred on content with element child

Mon Jul  9 17:59:08 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed XML Base computation which was broken
	* debugXML.c: added a base function to the shell
	* Makefile.am result/scripts/* test/scripts/*: added scripts
	  based regression tests, and adding 2 XML Base tests

Mon Jul  9 12:31:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: set properties doc and call xmlSetListDoc for properties
	  content when grafting them in a different tree.
	* aclocal.m4: remove from CVS

Sun Jul  8 23:09:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* win32/libxml2/libxml2.def.src: added some missing entry point
	  for XPath (Mark Vakoc)

Sun Jul  8 20:34:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: fixed an old bug raised by Bernhard Zwisch, the I/O
	  layer should URI-Unescape before trying to open resources.

Sun Jul  8 16:26:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fix the name() bug for elements in the default 
	  namespace reported by Charlie Bozeman

Sun Jul  8 15:11:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c parser.c testXPath.c xpath.c: trying to fix #56948, this
	  led to an XPath fix, improvements of SAX initialization, and
	  an added option --nocdata to testXPath

Sat Jul  7 21:09:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: Felix Natter provided anew version working
	  with XEmacs too

Sat Jul  7 02:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xpath.h: small cleanup
	* doc/xml.html: update

Fri Jul  6 01:40:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am configure.in include/libxml/xmlwin32version.h:
	  released 2.3.14

Fri Jul  6 00:47:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/html/*: rebuilt the docs for the release
	* doc/xml.html: added 2.3.14 release.

Thu Jul  5 22:01:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: a bug reported by Stephan Kulow empty nodesets
	  were not equal to empty strings

Thu Jul  5 00:52:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c: fixed a URI-Reference computation problem when validating
	* xmlIO.c: small cleanup

Thu Jul  5 00:04:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: improved the description of a couple of interfaces
	  upon Larry Stamper suggestion

Wed Jul  4 21:42:24 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c entities.c parser.c: changed completely the way entities
	  are handled when running the parser in entity substitution mode.
	  This fixes a bug reported by Stephan Kulow and nearly divides
	  by 3 the amount of memory required by libxslt to load and process
	  DocBook TDG.

Wed Jul  4 18:02:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: fixing a too early root closing problem raised
	  byt Prashanth Naidu

Wed Jul  4 01:42:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a missing copy in xmlXPathVariableLookupNS() 
	  raised by Mark Vakoc.

Tue Jul  3 18:35:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* example/Makefile.am: fixed the include path to add srcdir/include
	* Makefile.am configure.in: fix from Albert Chin for iconv detection
	  and some cleanup

Tue Jul  3 10:12:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c include/libxml/xpath.h include/libxml/xpathInternals.h:
	  lot of optimization work, results in significant improvements
	  when handling really complex XPath queries. Add a small optimizer
	  for unions, improve [n] and [last()], avoid some costly ops.

Fri Jun 29 23:26:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/parser.h parser.c: xmlStrstr args are both const
	* xpath.c: small cleanup
	* xmlGetNsList: reformated, fixed problems if used on Entities

Thu Jun 28 18:19:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: added 1.8.14 and 2.3.13 releases

Thu Jun 28 18:16:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in include/libxml/xmlwin32version.h: released 2.3.13
	* Makefile.am example/Makefile.am: workaround automake generating
	  erroneous deps

Thu Jun 28 15:08:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: bug #56801 Yon Derek provided a patch
	  to the windows config file.

Thu Jun 28 14:51:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpointer.c include/win32config.h win32/libxml2/libxml2.def.src
	  libxml.h : Yon Derek provided a set of changes to compile from
	  CVS on Windows/MSC

Thu Jun 28 14:11:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed UTF8 BOM support in push mode
	* test/utf8bom.xml result/utf8bom.xml result/noent/utf8bom.xml:
	  added a specific testcase

Wed Jun 27 18:33:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: added --push regression tests
	* parserInternals.c: the XML parser segfaulted in --push mode

Wed Jun 27 13:09:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: moved the symlinks detection within a CVS
	  check, this is not portable and will be removed soon.
	* xpath.c: small cleanup/speedup

Tue Jun 26 18:05:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in doc/xml.html include/libxml/xmlwin32version.h:
	  release of 2.3.12
	* parser.c: make an error message if unknown entities in all cases

Tue Jun 26 09:46:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.c: fixed 2 uri normalization bugs on '//' reduction

Mon Jun 25 18:06:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/Makefile.am: Laszlo Peter pointed out that
	  includes were installed in the wrong dir

Mon Jun 25 17:07:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/html.xml: warn against sending code to exhibit bugs.

Sun Jun 24 23:31:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: patch to xmlXPathFormatNumber for the optimizer on
	  Tru64 from Thomas Leitner

Sun Jun 24 14:05:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* AUTHORS: added William and Bjorn
	* include/libxml/*.h *.c README doc/*.html etc.: changed old email to
	  daniel@veillard.com hopefully I won't have to do this again
	* doc/Makefile.am doc/html/*.html: cleanup makefile, checked that
	  docs can be rebuilt cleanly now
	* include/libxml/xml*version.h*: removed include/libxml/xmlversion.h
	  from CVs it's generated, added include/libxml/xmlwin32version.h
	  also generated but which should change far less frequently.
	* catalog.c nanoftp.c: made sure to include libxml.h not
	  libxml/xmlversion.h directly
	* include/libxml/*.h: include xmlwin32version.h instead of xmlversion.h
	  when compiling on WIN32 and MSC

Sat Jun 23 23:54:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/Makefile.am include/libxml/Makefile.am configure.in:
	  fixed make distcheck and rebuilding the rpms

Sat Jun 23 20:50:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: should finish the migration of exported includes
	  into a real include/libxml in CVS, at least for CVS users.
	* removed the exported headers, added in include/libxml (as well
	  as xmlversion.h.in).

Sat Jun 23 20:37:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed the way to detect symlink

Sat Jun 23 20:30:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: updated, include/libxml is now a real CVS dir

Sat Jun 23 19:36:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: a new version of libxml-doc.el. This new
	  version works with both libxml1 and libxml2 (it autodetects
	  the prefix of the html-files) from Felix Natter.
	* doc/xml.html: updated doc accordingly

Sat Jun 23 18:30:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed the bug generating a template loop in libxslt
	  when using docbook-xsl-1.4, * should filter out document nodes
	* HACKING: added William
	* TODO: updated

Fri Jun 22 18:02:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/FAQ.html: added a warning about gcc-3.0
	* doc/xml.html: added reference to gdome2 and removed a confusing
	  sentence

Fri Jun 22 17:02:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h: okay this is a generated file, but Windows
	  users need it and they can't generate it, and I want CVS
	  Windows users ...
	* win32/libxml2/libxml2_so.dsp: Windows project file for 
	  the shared lib version of libxml2
	* win32/libxml2/libxml2.def.src: bug #56527 set of exported
	  resources needed for libxslt/xsltproc by Yon Derek

Fri Jun 22 16:39:36 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* trio.c: MSVC fix (provided by Igor Zlatkovic)

Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: another small fix for ATTRIBUTE_UNUSED

Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: Yon Derek provided a first fix
	  to be able to compile libxslt/xsltproc on Windows

Fri Jun 22 00:04:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: attempt to work around what seemed a gcc optimizer
	  bug when handling floats on i386 http://veillard.com/gcc.bug
	* tree.c entities.c encoding.c: doing some cleanups while
	  chasing it

Thu Jun 21 13:13:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: cleanup when --without-debug is specified
	* xinclude.c xpath.c xpathInternals.h xpointer.c: cleanup
	  w.r.t. --without-debug and other include points
	* catalog.h testCatalog.c: a bit of cleanup and prepare for XML
	  Catalogs
	* configure.in entities.h tree.h HTMLparser.c: removed
	  --without-corba, made the _private field mandatory

Wed Jun 20 19:37:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parserInternals.c encoding.c: Since Notepad on Win2k
	  outputs a BOM in UTF8, an errata has been issued to avoid the
	  problem, that was the most reasonable solution... Add support
	  for a leading UTF8 BOM in entities.

Wed Jun 20 15:38:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed a bug found when post validating an entity ref
	* xmllint.c: added --loaddtd and sligly changed --postvalid to
	  activate it too

Tue Jun 19 20:03:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c xinclude.c xpointer.c: bug #56402 exposed a number of
	  weakness in the node copy the XPointer and the XInclude
	  implementations. Serious cleanup.

Tue Jun 19 14:50:18 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: Kjartan Maraas provided a small patch to
	  add xml2-config.in to EXTRA_DIST

Tue Jun 19 13:04:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c tree.c parserInternals.c parser.c: Stephan Kulow
	  provided another failing case found in KDE, the way the
	  ctxt->vctxt.nodeTab was allocated and freed changed over
	  time but it wasn't completely cleaned up. This should fix it.

Sun Jun 17 19:56:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: Stephan Kulow also raised the fact that line number
	  could get miscounted making debug harder, fixed the problem
	  in xmlParseCharData()

Sun Jun 17 19:17:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: Stephan Kulow pointed out a problem when validating
	  and using an empty entity, forgot a 'break' in a case.

Sun Jun 17 16:47:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlHasNsProp() accordingly to bug #55683
	* doc/xml.html: updated with 2.3.11

Sun Jun 17 12:24:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* TODO: updated adding cleanup of generated doc
	* configure.in: prepared to release 2.3.11
	* xmllint.c: added --version for bug reporting
	* doc/html/*.html: rebuilt the doc

Sat Jun 16 23:23:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: first part of the work on selecting namespace to
	  fix bug #56115 

Sat Jun 16 00:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am example/Makefile.am: Laszlo PETER provided a fix
	  when using -liconv
	* TODO: updated

Fri Jun 15 07:08:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.[ch]: more work on the HTML serialization routnes,
	  cleanup, encoding support.

Thu Jun 14 10:31:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Thomas Broyer suggested a better patch for the / arg

Thu Jun 14 01:01:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: bug detected by Ankh when / is used as a function arg

Wed Jun 13 23:08:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.[ch] HTMLtree.c: stored the inline/block property
	  of element and use it to avoid outputting formatting spaces at
	  the wrong place. Implemented the format parameter for HTML save.
	* result/HTML/doc2.htm result/HTML/doc3.htm result/HTML/fp40.htm
	  result/HTML/script.html result/HTML/test2.html result/HTML/test3.html
	  result/HTML/wired.html: of course this impact the result of a
	  number of HTML tests

Thu Jun 14 09:49:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.[ch]: started augmenting the HTML save API with
	  encoding and formatting parameters

Wed Jun 13 09:44:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.h: cleanup and started evaluating the work needed on
	  revamping the HTML output code

Mon Jun 11 19:29:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: handling of PIs and <?sgml-declaration in entities.

Tue Jun 12 08:46:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed bug #56049, forgot one check in the
	  validation routine

Tue Jun 12 08:09:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch]: grrr ... namespace is a C++ reserved keyword

Tue Jun 12 06:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.h: fixed an error in last commit
	* doc/FAQ.html: added an entry for compilation from CVS

Mon Jun 11 10:07:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h.in libxml.h: Cygwin patches
	* tree.c: xmlFreeNodeList patch similar to xmlFreeNode one
	* tree.h: cleanup

Sat Jun  9 19:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: patched xmlFreeNode() to avoid freeing() a static
	  memory block in a strange case where libxml is linked twice
	  in the binary.

Sat Jun  9 18:39:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: (a? , b? , c? , ... , z?) was storing/restauring
	  state far too often, simple fix used to avoid it.

Sat Jun  9 16:10:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: Raphael Hertzog had a trouble with DTD nodes
	  being processed, applied his patch
	* tree.c: fixed a bug raised in xmlStaticCopyNodeList()

Sat Jun  9 15:50:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* nanoftp.c nanohttp.c uri.c include/win32config.h: Igor  Zlatkovic
	  provided fixes to compile on MSCC again
	* win32/libxml2/libxml2.def.src win32/libxml2/libxml2*.dsp: he
	  also provided an update for the project files.

Thu Jun  7 21:52:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: applied Steve Tinney patch to xmlNewNsProp to fix
	  bug #55810

Thu Jun  7 21:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlGetNsProp() to close bug #55683
	  Note this requires libxslt to use it's own function instead.

Thu Jun  7 18:06:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: when in a pre element no formatting space should
	  be added.
	* test/HTML/pre.html result/HTML/pre.html*: added a regression test

Thu Jun  7 17:29:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: added tests for signal() and signal.h

Fri Jun  8 10:17:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: robert pointed out xmlXPathNINF was not initialized

Fri Jun  8 10:01:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: Felix Natter provided a new version for
	  libxml2

Fri Jun  8 07:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: when in a pre element no formatting space should
	  be added.

Wed Jun  6 18:07:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: add -mieee to CFLAGS when compiling on Linux/alpha

Thu Jun  7 06:44:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: implemented the <?sgml-declaration encoding="xxx"?>
	  hack
	* tree.[ch]: added xmlHasNsProp as suggested in bug report #55653 
	* uri.c: fixed a warning

Tue Jun  5 22:54:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: trying to close bug #55772 escaping in script
	  elements
	* doc/xml.html: suggest to send mail to the list

Tue Jun  5 19:11:02 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: attempt to fix the xmlGetVarStr breakage once and for
	  good. Use a macro and based on the solution provided in 
	  vsnprintf manual page from GNU.

Tue Jun  5 14:46:10 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* error.c: Workaround for non-preserving variadic list.
	* trio.c trio.h triop.h strio.c strio.h: Upgraded to trio baseline 1.4

Sat Jun  2 06:12:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: added 2.3.10 release

Fri Jun  1 11:27:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: releasing 2.3.10

Thu May 31 20:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: Gary Pennington spotted a few troubles with file:///

Thu May 31 20:18:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* encoding.c: Robert Collins provided a patch to add the
	  "US-ASCII" encoding alias

Wed May 30 21:12:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c encoding.[ch]: William M. Brack provided a set of UTF8
	  string oriented functions and started cleaning the related areas
	  in xpath.c which needed fixing in this respect

Wed May 30 20:30:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: applied patch from Jaroslaw Kolakowski to close bug
	  #55380
	* tree.c: patch to xmlNodeGetContent() to get CDATA section content

Mon May 28 12:56:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* TODO: updated
	* nanohttp.[ch] : started adding APIs to get the redirected URL
	  when this occurs (needed for further base computation
	* tree.h: cleanup
	* encoding.c: cleanup
	* SAX.c: minor change around ctxt->loadsubset

Fri May 25 09:36:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am include/Makefile.am: small change to have
	  include/libxml rebuilt if working from CVS.
	* uri.c: applied another patch from Carl Douglas for URI escaping,
	  this should close bug #51876

Wed May 23 15:40:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: fixed XInclude recursive behaviour bug #54678
	* result/XInclude/recursive.xml test/XInclude/docs/recursive.xml
	  test/XInclude/ents/inc.txt test/XInclude/ents/sub-inc.ent:
	  added specific regression test
	* parser.h: preparing for the XSLT mode where DTD inherited
	  attributes are added to the tree.

Wed May 23 13:59:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.[ch]: Updated the namespace for the Last Call version
	* result/XInclude/include test/XInclude/include: updated the
	  testsuite accordingly

Wed May 23 12:27:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.[ch]: applied a patch from Carl Douglas for URI escaping,
	  related to bug #51876

Tue May 22 18:46:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed a gross mistake in base computation, xml:base is
	  not completely correct yet (need cascade).
	* xpath.[ch]: added the few things needed to find a function name
	  and URI from the XPath context when it is called.

Tue May 22 17:00:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* catalog.[ch]: fixes and add xmlLoadCatalogs()
	* DOCBparser.c: small cleanup
	* xmllint.c: added a --catalogs option to load catalogs from
	  $SGML_CATALOG_FILES
	* tree.c: cleanup
	* configure.in: iconv library fixup, ICONV_LIBS 

Mon May 21 16:05:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* catalog.c: handling of CATALOG entries. detection of recursion,
	  and a few bugfixes
	* xpath.c: fixing bug #54951 QNAME with no prefix should not match
	  against the default namespace

Mon May 21 10:14:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Joe Orton reported a bug found with IRIx compiler.

Sun May 20 15:15:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed propagation context info when parsing an
	  external entity.
	* doc/html/*.html: regenerated a couple of docs

Sat May 19 17:11:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: update with 2.3.9 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 support to improve speed with DocBook
	* result/VC/OneID2 result/VC/OneID3 : this slightly changes
	  the way validation errors get reported

Wed Apr 18 11:42:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c HTMLtree.c: applied part of the patches provided
	  by P C Chow and William M. Brack for XSLT HTML output

Mon Apr 16 19:44:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h.in win32config.h win32/libxml2/*: applied 
	  Igor Zlatkovic patches for MSC compilation and added his
	  updates

Tue Apr 17 10:08:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed xmlXPathNodeCollectAndTest() to do proper
	  prefix lookup.
	* parserInternals.c: fixed the bug reported by Morus Walter
	  due to an off by one typo in xmlStringCurrentChar()

Thu Apr 12 17:41:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c result/HTML/*: revamped the way the HTML
	  parser handles end of tags or end of input

Thu Apr 12 10:50:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch] : added xmlDocCopyNode for gdome2 support

Wed Apr 11 16:37:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.h: include xmlmemory.h this seems to havoid a nasty glibc
	  bug where the linktime 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 formatting blanks by default, this changed the output of
	  a few tests

Tue Apr 10 16:30:20 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Bill Brack pointer an error in detecting a null nodeset

Sun Apr  8 15:07:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: finally released 2.3.6

Sun Apr  8 11:39:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: checking for null pointer generated by new code

Fri Apr  6 12:53:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a [] evaluation problem reported
	* test/XPath/tests/simpleaddr: extended test
	* result/XPath/simpleaddr: updated result

Wed Apr  4 02:07:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.c: Dan Timis reported a portability problem
	  on Macs without mmap, fixed it.

Tue Apr  3 20:20:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* testXPath.c : added a --tree option allowing to display the
	  tree dump of the XPath expression

Mon Apr  2 17:13:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a memleak when comparing nodesets
	* HTMLtree.c: don't invent the HTML doctype if not available (XSLT)
	* tree.c: added a TODO

Tue Mar 27 14:32:06 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in Makefile.am config.h.in xmlversion.h.in: detect if
	  we need string functions
	* trio.[ch] strio.[ch]: embedded the Trio-0.23 string functions
	  to be able to use them where needed. Applied some changes
	  to reduce name linking pollution and compile in only what's
	  needed.
	* HTMLtree.c debugXML.c entities.c error.c nanoftp.c valid.c
	  xlink.c xmlversion.h.in xpath.c: got rid of the #ifdef 
	  for the string manipulation functions
	* xmlmemory.[ch]: removed DEBUG_MEMORY_FREED and added it automatically
	  to the free() function of xmlmemory.c
	* entities.c HTMLtree.c parserInternals.c tree.c uri.c valid.c
	  xinclude.c xmlIO.c xpath.c xpointer.c: removed the MEM_CLEANUP
	  usage.

Tue Mar 27 02:30:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: applied the context output patch of the error
	  handling submitted by Chuck Griffith
	* error/VC/*: this slightly change some error logs

Tue Mar 27 00:51:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed line number reporting on error

Mon Mar 26 23:21:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: Sullivan and Darin found a parser bug,
	  applied the patch.

Mon Mar 26 18:24:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c HTMLtree.c SAX.c debugXML.c error.c parserInternals.c
	  testHTML.c testSAX.c tree.c valid.c xmlIO.c xmlmemory.c
	  xmlversion.h.in xpointer.c: of course the way I defined
	  UNUSED breaks on old gcc version. Try to be smart and
	  also define it directly in xmlversion.h
	* configure.in: removed -ansi flag from the pedantic set

Sat Mar 24 17:45:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
	Huge cleanup, I switched to compile with
	-Wall -g -O -ansi -pedantic -W -Wunused -Wimplicit
	-Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat
	-Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow
	-Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return
	-Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline
	* HTMLparser.[ch] HTMLtree.c SAX.c debugXML.c encoding.[ch]
	  encoding.h entities.c error.c list.[ch] nanoftp.c
	  nanohttp.c parser.[ch] parserInternals.[ch] testHTML.c
	  testSAX.c testURI.c testXPath.c tree.[ch] uri.c
	  valid.[ch] xinclude.c xmlIO.[ch] xmllint.c xmlmemory.c
	  xpath.c xpathInternals.h xpointer.[ch] example/gjobread.c:
	  Cleanup, staticfied a number of non-exported functions,
	  detected and cleaned up a dozen of problem found this way,
	  avoided a lot of public function name/typedef/system names clashes
	* doc/xml.html: updated
	* configure.in: switched private flags to the really pedantic ones.

Thu Mar 22 22:44:15 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: 2.3.5
	* doc/html/*: rebuilt the docs

Thu Mar 22 15:36:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed a reported bug in NOTATION parsing
	* uri.c: accepted but not fixed bug 51876, added TODO 
	* Makefile.am: fixed bug 51876

Thu Mar 22 13:41:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* config.h.in configure.in error.c: fix a compilation problem
	  on platforms without vsnprintf (xml@thewrittenword.com)

Wed Mar 21 19:04:34 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed a function name header typo
	* SAX.c: notations can also occur in external subset.

Tue Mar 20 14:21:28 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: removed a C++ like comment

Tue Mar 20 12:22:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixing bug 52299 strange condition leading
	  to a parser crash due to a buffer overflow
	* result/noent/attrib.xml result/attrib.xml test/attrib.xml:
	  added the specific test case

Mon Mar 19 16:50:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch]: still a lot of cleanup based on XSLT, added
	  xmlXPathConvert{String,Number,Boolean} to be able to make
	  type casts without a context stack, fixed some implementation
	  problems related to the absence of context at parse-time,
	  added xmlXPathEvalPredicate() and xmlXPathFreeCompExpr()
	  in the public API too
	* xpointer.c xpathInternals.h: we need to know at parse time
	  whether we are compiling an XPointer

Mon Mar 19 11:54:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch] xpointer.c: restaured the Binary and API compatibility
	  cleaned up the parser internals, refactored XPath code, added
	  new compilation based APIs and cleanly separated public and
	  private APIs.

Mon Mar 19 00:59:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.h: the comp field must be added at the end to avoid
	  killing binary compat.

Mon Mar 19 00:11:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: detect XPath memleaks in regreson tests
	* error.c: fixed and error w.r.t. error reporting still using
	  stderr
	* hash.c: added new line at end of file
	* tree.h: minor cleanup
	* xpath.[ch] xpointer.[ch]: Major changes ! Separated XPath
	  expression parsing from evaluation, resulted in a number of
	  changes internally, and in XPointer. Likely to break stuff
	  using xpathInternals.h but should remain binary compatible,
	  new interfaces will be added.

Wed Mar 14 20:34:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed a couple of problems reported by 
	  okiddle@yahoo.co.uk and allanc@chickenandporn.com when compiling
	  without gcc on non linux platforms.

Wed Mar 14 20:13:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/Makefile.am configure.in: yearke@eng.buffalo.edu suggested
	  a fix for --with-html-dir= configure support. I hope it won't
	  break rpm generation

Wed Mar 14 17:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: one function comment cleanup.

Wed Mar 14 14:55:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c: external subset notations were improperly registered
	  in the internal subset.

Tue Mar 13 10:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* README.cvs-commits: added, pointing to HACKING
	* HACKING: updated

Mon Mar 12 22:09:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: and Matt Sergeant found one in the XML push
	  parser (erroneous check I forgot to remove when I fixed the
	  main parser).

Mon Mar 12 19:19:04 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: ptittom found a small bug in UnaryExpr

Sat Mar 10 13:09:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.4
	* error.c: fixed bug #51860
	* tree.c: fixed bug #51861
	* valid.c: cleanup, more debug, failed to fix one bug crap ...
	* tree.[ch] : added xmlDefaultBufferSize
	* nanoftp.c: typo in function name header block
	* doc/xml.html : updated, added link to XML::LibXSLT
	* doc/html/* : rebuilt the docs

Wed Mar  7 20:43:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c SAX.c: the new content parsing code raised an
	  ugly bug in the characters() SAX callback. Found it
	  just because of strangeness in XSLT XML Rec output :-(

Wed Mar  7 16:50:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: Martin Baulig suggested to add -lm
	* tree.c: found another bug in xmlNodeGetContent()

Tue Mar  6 09:21:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Bjorn found the error related to strictness of comparison.

Mon Mar  5 21:47:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: trying to fix the Dtd parsing problem reported
	  by Gary, side effect of last week speed optimizations.

Sat Mar  3 19:45:59 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xml2Conf.sh.in: fixes pointed out by Fredrik Hallenberg
	* parserInternals.c: removed unneeded test raised by Stric

Sat Mar  3 13:04:37 CET 2001 Bjorn Reese <breese@users.sourceforge.net>

	* xpath.c: Fixed xmlXPathNodeCollectAndTest (problem reported
	  and fixed by William Brack). Added xmlXPathFormatNumber.
	  Changed the sorting slightly.
	* configure.in Makefile.am example/Makefile.am: Added -lm.
	  Please note that applications linking with libxml2, must
	  also like with the math library from now on.

Sat Mar  3 07:38:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: fixed loop reported by Marc Sanfacon

Sat Mar  3 02:10:24 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: one must report spaces even if the Dtd element
	  content proves that this is not part of the element content.
	* result/valid/*.xml: this changed the ouptu slightly

Thu Mar  1 17:53:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.3
	* doc/xml.html: updated

Wed Feb 28 00:43:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: minor doc fix
	* xpath.c: deallocation issues when a result tree has been
	  converted to a node-set

Mon Feb 26 22:09:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: oops corrected dates s/2000/2001

Mon Feb 26 12:48:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: new patch from Gary Pennington

Mon Feb 26 09:30:23 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: applied patch from Ankh

Mon Feb 26 03:34:43 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: fixed a problem building on Mac

Sun Feb 25 21:52:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: more work on increasing parsing ferformances

Sun Feb 25 18:03:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlmemory.h HTMLparser.c HTMLtree.c entities.c parser.c
	  xpath.c xpointer.c tree.c uri.c valid.c xinclude.c xmlIO.c:
	  avoiding memcpy in production builds MEM_CLEANUP macro use
	* parser.[ch] parserInternals.c: optimizations of the tightest
	  internal loops inside the parser. Better checking of I/O
	  flushing/loading conditions
	* xmllint.c : added --timing

Sun Feb 25 05:48:51 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.2
	* doc/xml.html: updated for release

Sat Feb 24 14:07:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: found a memleak and fixed a nasty bug

Sat Feb 24 03:35:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.[c1] : added return code errors for xmllint
	* xpath.c: specific debug dump function for result value trees

Thu Feb 22 07:52:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: finally implemented xmlXPathCompareNodeSets
	* test/XPath/expr/floats results/XPath/expr/floats: added 
	  a test for float expressions

Tue Feb 20 18:57:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlNodeGetContent, it was not recursing on child
	* parserInternals.[ch]: trying to speed up parsing
	* xpath.c : speeded up node set equality op

Mon Feb 19 19:01:57 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am valid.c list.[ch]: Gary Pennington provided a
	  better handling of ID/IDREF and the list modules associated
	* configure.in: small CFLAGS cleanup

Mon Feb 19 16:13:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed iconv detection on AIX (stric)

Mon Feb 19 10:59:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed "*" (unbelievable !) and a couple of warnings

Sun Feb 18 17:52:37 MET 2001 Bjorn Reese <breese@users.sourceforge.net>

	* xpath.c: fixed whitespace handling in xmlXPathStringEvalNumber,
	  and optimized xmlXPathNodeSetSort

Sat Feb 17 14:18:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: bug fix when context size is 0
	* parser.c: I like Norm's Dtd because they still manage to break
	  the parser occasionally

Fri Feb 16 14:20:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: xmlXPathEqualNodeSetFloat the arg is really a double now

Fri Feb 16 01:10:06 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch] parser.c xpath.c: fixed the problem of addressing
	  attributes within the XML-1.0 namespace

Thu Feb 15 16:53:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpathInternals.h: exported a few axis functions
	* doc/xml.html: updated the doc

Thu Feb 15 15:57:14 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: applied patch from Daniel van Balen for OpenBSD
	  and bumped version to 2.3.1
	* HTMLtree.c result/HTML/doc3.htm result/HTML/wired.html: the
	  attempt to find autoclosing was simply broken, removed it,
	  updated the examples, this is better

Wed Feb 14 11:35:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* hash.[ch]: added Paolo Casarini patch to provide Delete from
	  hash 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 the tree need to be copied
	  too, and deallocation need to occur the same way.

Mon Jan 22 10:35:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpathInternals.h xpath.[ch] debugXML.c: added the XPATH_XSLT_TREE
	  type corresponding to an XSLT result tree fragment. Share most
	  of the data format with node set, as well as operators.
	* HTMLtree.c: added a newline at the end of the doctype output
	  whe this one is not present initially.
	* tree.c: make sure 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]: added htmlIsScriptAttribute()

Sun Oct 15 13:18:36 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/*: rebuilt docs preparing for 2.2.5 release, added URI
	  and XPointer modules

Sun Oct 15 12:13:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.h: closed #25107

Sun Oct 15 12:06:16 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testSAX.c: fixed problem with cdata reporting
	* SAXresult/* : updated

Sun Oct 15 12:00:24 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c test/wap.xml result/noent/wap.xml result/wap.xml:
	  Closed bug #27499, added to regression tests
	* TODO: updated

Sun Oct 15 01:34:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c HTMLtree.[ch] SAX.c testHTML.c tree.c: fixed HTML
	  support for SCRIPT and STYLE with help from Bjorn Reese
	* test/HTML/* result/HTML/*: added simple testcase and updated
	  the existing ones.

Fri Oct 13 18:24:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c xpointer.c: XPointer reorder of ranges start/end and
	  string-range for empty strings
	* test/XPath/docs/str test/XPath/xptr/chaptersrange
	  test/XPath/xptr/strrange: augmented the XPointer testsuite

Fri Oct 13 12:21:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html doc/xmlmem.html: added a module describing memory
	  interfaces and use, updated the main page.

Fri Oct 13 01:23:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c xmlIO.c: Wayne Davison Win32 patch
	  nanoftp code work on Windows too now

Fri Oct 13 00:54:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testXPath.c xpath.[ch]: moved some debug functions to xpath core
	* xpointer.c: implemented string-range() at least a good first version
	* test/XPath/docs/str test/XPath/xptr/strrange
	  result/XPath/xptr/strrange: the string-range() tests

Thu Oct 12 10:02:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am include/Makefile.am include/win32config.h
	  win32/Makefile.mingw: fixed problems reported by Wayne Davison
	  and make distcheck

Thu Oct 12 01:44:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c: added xmlNanoHTTPTimeout(int delay), removed a bug
	  xmlNanoHTTPMethod on input MimeType Tony Lam <Tony.Lam@eng.sun.com>
	* xpointer.c: slight extension of xmlXPtrLocationSetMerge

Thu Oct 12 01:37:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* config.h.in configure.in nanoftp.c nanohttp.c xmlversion.h.in :
	  patch for socklen_t detection by
	  Albert Chin-A-Young <china@thewrittenword.com>

Wed Oct 11 17:53:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c valid.c xmllint.c: Fixed a few postvalidation bugs
	  and added a --dtdvalid option to xmllint used to test it

Wed Oct 11 15:01:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.1 Makefile.am libxml.spec.in: adding a man page for
	  xml-config by Fredrik Hallenberg <hallon@lysator.liu.se>

Wed Oct 11 12:41:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] xpointer.[ch]: worked on XPath functions and variable
	  handlings (registration, lookup, cleanup)

Wed Oct 11 01:46:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in Makefile.am include/makefile.am: adding XPointer
	  and XPtrtests target
	* xpointer.[ch] : new files for XPointer support
	* test/XPath/xptr result/XPath/xptr: added XPointer testsuite and
	  more XPath tests

Wed Oct 11 01:23:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: fixed, very broken, make distcheck works again

Wed Oct 11 02:53:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* More work toward 2.2.5, integrated a number of patches
	* configure.in Makefile.am win32config.h.in: trying to cleanup
	  make distcheck .... huh ...
	* include/Makefile.am include/win32config.h: new directory
	  for includes
	* win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp
	  updated the makefiles and instructions for WIN32
	* xpath.c: small fixes
	* test/XPath/ results/XPath: updated the testcases and results
	* HTMLparser.c nanohttp.c testXPath.c: incorporated provided or
	  suggested patches
	* valid.c: fixed an ID bug

Mon Oct  9 14:28:56 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* moved xml-error.h to xmlerror.h: seems this allowed to bypass
	  the automake bug where wrong dependencies were generated.
	* xpath.[ch]: worked on XPointer

Fri Oct  6 12:58:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in Makefile.am: 2.2.5, ship the include in an
	  include/libxml subdirectory, use symlinks when using CVS
	* testSAX.c: fixed small bug
	* testXPath.c: changed the way testfiles are parsed
	* debugXML.c: same kind of cleanup when parsing an argument expression
	  XPath/XPointers can have blanks embedded
	* xpath.[ch]: more cleanup, reorgs for XPointer work
	* parserInternals.c parser.c HTMLparser.c: fixed wrong include
	* win32/README.MSDev win32/libxml2/libxml2.dsp: Windows stuff

Thu Oct  5 18:13:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* debugXML.c testXPath.c xpath.[ch]: got pissed by some 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
	  occurring when parsing with SAX only
	* result/HTML/*.sax: updated since the output is now HTML
	  encoded...

Mon Aug 28 00:38:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch]: applied some of Wayne Davison
	  <wayned@users.sourceforge.net> patches

Sun Aug 27 22:14:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c tree.c debugXML.c: fixed bogus behaviour when an
	  undeclared namespace prefix was used, added a warning.
	  Cleaned up support w.r.t. entities, spilling out a warning
	  and being pedantic on lookups.
	* test/warning/ent9 : added testcase for previous example.
	* TODO: updated
	* parserInternals.h parser.c: changed the way names are parsed
	  now allow infinite size and decrease penalty for normal use
	* parser.c: Started a big cleanup/check of the parser code,
	  fixed some of the most tortuous entity code, spotted code
	  unused anymore
	* test/*: added tests for very long names and related nasty
	  things.

Sat Aug 26 23:31:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html: added encoding aliases doc
	* doc/xml.html: updates
	* encoding.[ch]: added EncodingAliases functions
	* entities.[ch] valid.[ch] debugXML.c: removed two serious
	  bottleneck affecting large DTDs like Docbook
	* parser.[ch] xmllint.c: added a pedantic option, will be
	  useful
	* SAX.c: redefinition of entities is reported in pedantic mode
	* testHTML.c: uninitialized warning from gcc
	* uri.c: fixed a couple of bugs
	* TODO: added issue raised by Michael

Wed Aug 23 01:50:51 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html: propagated Martin Duerst suggestions

Wed Aug 23 00:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Fixed Bug#21552: libxml fails to decode &amp;
	* uri.c testUri.c patches, by Marc Sanfacon (1 left)
	* parser.c HTMLparser.c: HTML/encoding push problems reportedi
	  by Wayne Davison

Sun Aug 20 17:03:38 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c: small cleanup
	* TODO: updated

Sat Aug 19 22:57:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* added an old VC testcase and updated title.xml entity

Sat Aug 19 21:02:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c SAX.c tree.c HTMLtree.h result/HTML/*: work
	  done on auto-opening of <p> tags and cleanup of SAX output

Sat Aug 19 18:45:40 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.4  xmllint.1 Makefile.am libxml.spec.in: added man pages

Sat Aug 19 18:38:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html libxml.* structure.*: updated the doc a bit

Thu Aug 17 15:50:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testSAX.c testHTML.c result/HTML/: cleanup of the output
	  of SAX tests

Mon Aug 14 13:56:33 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Albert Chin-A-Young <china@thewrittenword.com>:
	* xmllint.c: workaround a MAP_FAILEd definition bug in DU-4.0

Mon Aug 14 11:10:20 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Dave Yearke <yearke@eng.buffalo.edu>:
	* testHTML.c: fix core dump on Solaris 2.x systems
	* HTMLparser.c: fix segfault if ctxt->sax->characters() is NULL
	* result/HTML/*.sax: previous bug fix lead to new results

Mon Aug 14 10:26:09 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Albert Chin-A-Young <china@thewrittenword.com>:
	* configure.in: added --with-readline=DIR to accept alternate
	  path for readline include/library
	* configure.in: added AM_C_PROTOTYPES to add -Aa -D_HPUX_SOURCE
	  for ANSI under HP-UX
	* config.in: Removed @LIBS@ from xml-config because @XML_LIBS@
	  includes @LIBS@

Sat Aug 12 23:19:42 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the docs
	* getting ready for 2.2.2 release

Sat Aug 12 16:42:37 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch]: added xmlGetFeaturesList() xmlGetFeature()
	  and xmlAddFeature()
	* tree.[ch]: added xmlAddChildList()
	* xmllint.c: MAP_FAILED macro test
	* parser.h: added xmlParseCtxtExternalEntity()
	* valid.c: applied bug fixes removed warning
	* tree.c: added CDATA block to elements content
	* testSAX.c: cleanup of output
	* testHTML.c: added SAX testing
	* encoding.c: better error recovery
	* SAX.c, parser.c: fixed one of the external entity processing
	  of the OASis testsuite
	* Makefile.am: added HTML SAX regression tests
	* configure.in: bumped to 2.2.2
	* test/HTML/ result/HTML: added a few of HTML tests, and added the
	  SAX results

Fri Aug  4 11:21:50 PDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: patch for HP compiler

2000-08-04  Sven Heinicke  <sven@zen.org>

	* xmllint.c: Was coredumping sometimes when the file given didn't
	exist.

Sat Jul 22 05:59:05 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c xmlIO.[ch]: fixed the problem of encoding support

	  when using in memory parsing. Need some cleanup.
	* xmllint.c configure.in: added a --memory flag to test memory
	  parsing

Fri Jul 21 17:09:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c: fixed socklen_t replacement to unsigned int
	* parser.c: fixed a space handdling missing at the end of
	  production 28 DOCTYPE.
	* xmlmemory.c: fixed a stupid bug on the routine to override
	  allocation functions
	* TODO: updated

Fri Jul 14 17:01:14 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/ regenerated the docs

Fri Jul 14 16:12:20 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html doc/xml.html: added I18N doc
	* encoding.[ch] HTMLtree.[ch] parser.c HTMLparser.c: I18N encoding
	  improvements, both parser and filters, added ASCII & HTML,
	  fixed the ISO-Latin-1 one
	* xmllint.c testHTML.c: added/made visible --encode
	* debugXML.c : cleanup
	* most .c files: applied patches due to warning on Windows and
	  when using Sun Pro cc compiler
	* xpath.c : cleanup memleaks
	* nanoftp.c : added a TESTING preprocessor flag for standalong
	  compile so that people can report bugs more easily
	* nanohttp.c : ditched socklen_t which was a portability mess
	  and replaced it with unsigned int.
	* tree.[ch]: added xmlHasProp()
	* TODO: updated
	* test/ : added more test for entities, NS, encoding, HTML, wap
	* configure.in: preparing for 2.2.0 release

Mon Jul 10 16:17:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c: fixed the way the control connection is handled
	* libxml.spec.in: fixed the dependencies and cleanup

Mon Jul  3 14:37:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html: changed the xmlsoft.org structure, updated the
	  examples w.r.t. root and childs

Sun Jul  2 20:51:43 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: fixed bug #7419, dependencies fouled for libxml-devel

Sun Jul  2 09:52:45 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: Work on character encoding support for the HTML parser
	* HTMLparser.c: Fixed some autoopen/autoclose probs for the HTML parser
	* encoding.c: Fixed a potential memleak in the encoding stuff

Sat Jul  1 13:44:22 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/FAQ.html doc/Makefile.am : added a FAQ

Fri Jun 30 20:29:08 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c HTMLtree.c SAX.c valid.c tree.h : more cleanup
	  of the HTML parser to force it to not bypass SAX

Fri Jun 30 11:19:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* win32config.h.in: updated
	* xmlversion.h.in: crap forgot to update this, this mean 2.1.0
	  lacks iconv support :-( need to release 2.1.1
	* configure.in: release 2.1.1
	* HTMLparser: fixed bug #14784
	* xpath.c HTMLparser.c encoding.c parser.c: fix warning raised
	  by Windows compiler
	* HTMLparser.c SAX.c HTMLtree.h tree.h: create HTML document in
	  the SAX startDocument() callback.
	* TODO: updated

Thu Jun 29 12:06:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* added xmlStopParser()

Wed Jun 28 23:10:26 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: 2.1.0 prerelease
	* Large resync between W3C and Gnome tree
	* nanoftp, nanohttp.c: fixed stalled connections probs
	* HTMLtree.c SAX.c : support for attribute without values in
	  HTML for andersca
	* valid.c: Fixed most validation + namespace problems
	* HTMLparser.c: start document callback for andersca
	* debugXML.c xpath.c: lots of XPath fixups from Picdar Technology
	* parser.h, SAX.c: serious speed improvement for large
	  CDATA blocks
	* encoding.[ch] xmlIO.[ch]: Improved seriously saving to
	  different encoding
	* example/Makefile.am example/gjobread.c tree.h: work on 
	  libxml1 libxml2 convergence.
	* config.h.in parser.c xmllint.c: added xmlCheckVersion()
	  and the LIBXML_TEST_VERSION macro

Fri Jun 23 22:26:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html: various patches and improvements typo fixed by
	  Felix Natter
	* doc/libxml-doc.el: Emacs module to lookup the libxml documentation
	  from Felix Natter <fnatter@gmx.net>

Sat May  6 10:09:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/upgrade.html: updated with instructions for support of both
	  libxml-1.x and libxml-2.x
	* doc/gjobread.c : applied Todd Dukes <tdukes@ibmoto.com> patch
	  for 2.x support and also fixed includes

Wed May  3 14:21:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* encoding.[ch], xmlIO.[ch], parser.c, configure.in : revamped
	  the encoding support, added iconv support, so now libxml if
	  compiled with iconv automatically support japanese encodings
	  among others. Work based on initial patch from Yuan-Chen Cheng
	  I may have broken binary compat in the encoding handler
	  registration scheme, but that was so utterly broken I don't
	  expect anybody to have used this feature until now.
	* parserInternals.h: fixup on the CHAR range macro
	* xml-error.h, parser.c: catch URL/URI errors using the uri.c
	  code.
	* tree.[ch]: added xmlBufferGrow(), was needed for iconv
	* uri.c: added xmlParseURI() I can't believe I forgot to
	  implement this one in 2.0 !!!
	* SAX.c: moved doc->encoding update in the endDocument() call.
	* TODO: updated.

Mon Apr 24 13:30:13 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h: removed extraneous xmlRemoveProp definition
	* TODO: added item about --disable-corba configure switch
	* tree.c parser.c: fixed problems for xmlCopyDoc and postvalidation
	* nanoftp.c: fixed include problems giving troubles on AIX and 
	  slowlaris
	* xmlIO.[ch] valid.h tree.[ch] xlink.c xmlmemory.c uri.c 
	  parser.c nanoftp.c nanohttp.c SAX.c testSAX.c :
	  comment and headers changes to lower gtk-doc number of warnings
	* doc/html/*: rebuilt docs

Sun Apr 16 11:23:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HACKING: documented the tag for 1.x and instructions

Wed Apr 12 15:47:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlIO.[ch] parser.[ch]: More interfaces for new I/O functions
	  xmlNewIOInputStream, xmlParserInputBufferCreateIO,
	  xmlCreateIOParserCtxt
	* parser.c parserInternals.h: speedup of IS_CHAR like macros,
	  significant overall improvement
	* xmllint.c: added I/O test to xmllint
	* testSAX.c: added a speed test
	* doc/* : updated/regenerated

Sat Apr  8 14:54:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c uri.h parserInternals.h: cosmetic changes from
	  "Timur I. Bakeyev" <timur@bat.ru>, including making 
	  xmlCreateURI() public

Fri Apr  7 18:35:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlIO.[ch] parser.c: cleane up the xmlParserInputBuffer mess
	  and the code at the same time. Added a clean mechanism for
	  overload or added input methods: xmlRegisterInputCallbacks()
	* tree.c: fixed xmlPrevSibling and xmlNextSibling per 
	  Christophe Le Gal (Christophe.Le-Gal@imag.fr) input
	* TODO: updated
	* doc/* : updated/regenerated
	* doc/Makefile.am: tweaks to avoid problem with libxml link in the
	  source dir

Wed Apr  5 21:11:35 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testURI.c: yet another forgotten commit, I should get some sleep !

Wed Apr  5 20:36:46 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmllint.c: forgot to commit this too ?

Wed Apr  5 16:22:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlversion.h.in : forgot to commit this previously

Mon Apr  3 21:47:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: preparing libxml-2.0.0 version looks Ok so far
	* README TODO: updated for release
	* uri.c uri.h: added authority parsing/saving
	* uri.c testURI.c Makefile.am: moved the testing code to testURI.c
	* xmlversion.h.in configure.in nanoftp.[ch] nanohttp.[ch] encoding.h
	  debugXML.[ch] xpath.[ch] xmlIO.c tester.c testXPath.c testHTML.c
	  tree.c HTMLtree.c HTMLparser.c tree.c tree.h parser.c
	  Makefile.am : added compile-time customization of libxml
	  --with-ftp --with-http --with-html --with-xpath --with-debug
	  --with-mem-debug
	* *.[ch] autoconf.sh : moved to an absolute addressing of includes : 
	  #include <libxml/xxx.h> I hope it won't break too much stuff
	  and will be manageable in the future...
	* xmllint.c Makefile.am libxml.spec.in : renamed tester.c to xmllint.c
	  and added xmllint to the installed programs
	* uri.h: added xmlFreeURI()

Fri Mar 24 14:35:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c uri.h: finished the escaping handling, the base support
	  and the URI path normalization. Looks good just lacks the
	  authority content parsing code.
	* Makefile.am: added instructions to generate testURI
	* TODO: updated
	* doc/xml.html, doc/smallfootonly.gif doc/w3c.png: updated,
	  added links and icons for W3C and Gnome

Mon Mar 20 14:05:26 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.[ch] : seems I forgot to actually update the files in
	  the last commit :-)
	* doc/xml.html doc/html/* : updated and uploaded the docs

Mon Mar 20 12:33:51 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* test/valid/dtds/xhtml*: removed RCS infos (pain with CVS)
	* TODO: updated
	* xmlmemory.[ch] : added xmlMemSetup() and xmlMemGet() to override
	  libxml default allocation function with another set (like gmalloc/
	  gfree).
	* Makefile.am, uri.c, uri.h: added a set of functions to do
	  exact (literally copied from the RFC 2396 productions) parsing
	  and handling of URI. Will be needed for XLink, one XML WFC, 
	  XML Base and reused in the nano[ftp/http] modules. Still work
	  to be done.

Tue Mar 14 20:52:35 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, libxml.spec.in : libxml2
	* doc/* : updated the doc page, rebuilt the docs

Tue Mar 14 19:11:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* all: tagged LIB_XML_1_X
	* *.c *.h : updated from W3C CVS tree
	* configure.in : 2.0.0-beta
	* libxml.spec.in : libxml2 package nam
	* result/* : new version of the tests output

Mon Mar  6 09:34:52 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html, doc/update.html: updated docs, 1.8.7

Sat Mar  4 16:14:42 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the docs
	* parser.c: final patch on #6766
	* valid.c: small patch on validity checks.

Sat Mar  4 12:38:41 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/upgrade.html: instruction on how to upgrade from 1.x to 2.x
	  added
	* parser.c: adding xmlKeepBlanksDefault() as a way to manage
	  compatibility w.r.t. XML spec and existing code.

Thu Mar  2 04:45:15 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: seems a better solution to <a>   </a> exists,
	  will try it for a while

Thu Mar  2 02:26:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: tried to remove the <a>   </a> generating <a/>
	  this is hard. Left a flag for that purpose. Fixed bug #6766
	* configure.in: prepared 1.8.7 not released, due to previous
	  problem

Thu Mar  2 03:03:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : applied second patch from Paul DuBois

Tue Feb 29 23:55:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : applied patch from Paul DuBois

Thu Feb  3 16:36:39 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c HTMLparser.c: do a bit of bufferization in push mode.

Thu Feb  3 15:59:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c tree.c HTMLtree.[ch] debugXML.c xpath.c: Fixed
	  compilation warnings on various platforms.
	* parser.c: Fixed #5281 validity error callbacks are now deactivated
	  by default if not validating.

Thu Feb  3 13:46:14 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c, win32config.h.in: patches to compile on WIN32

Wed Feb  2 22:51:16 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c: snprintf/sprintf patch courtesy George Katsirelos
	  <gkatsi@cs.toronto.edu>

Mon Jan 31 18:58:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when
	  processing URLs

Mon Jan 31 14:25:57 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch]: cleanup, bug fixes, integration in rpmfind, added
	  xmlNanoFTPUpdateURL for persistent control connections.
	* configure.in: 1.8.6

Thu Jan 27 17:52:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.[ch], nanoftp.[ch]: cleanup, added proxy support
	* tree.[ch] : added xmlSaveNoEmptyTags

2000-01-29  James Henstridge <james@daa.com.au>

	* nanoftp.c: include <netinet/in.h> for IPPROTO_TCP.

	* Makefile.am: added nanoftp.[ch] to the build.

Wed Jan 26 18:14:55 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch]: cleanup, comments, API
	* debugXML.c : fixed a bug in the cat command
	* doc/*: regenerated the docs

Wed Jan 26 16:52:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch] parser.c xmlIO.[ch]: added a Nano FTP implementation
	* debugXML.c : fixed a bug in the cat command
	* valid.c: fixing some small probs
	* libxml.spec.in: get rid of the SNAP suffix
	* doc/xml.html: updated the status

Mon Jan 24 14:31:09 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.in: xml-config --version to just return the
	  version number
	* xpath.c: some cleanup w.r.t. axis when the current node is
	  an attribute.
	* TODO: updated

Tue Jan 18 18:46:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: prepared for libxml-1.8.5
	* doc/* recompiled the documentation

2000-01-17  Jody Goldberg <jgoldberg@home.com>

	* configure.in : WARNING autoconf subtlety alert :
	  Use AC_CHECK_HEADERS rather than AC_CHECK_HEADER
	  when looking for zlib.h so that HAVE_ZLIB_H is defined.
	* config.h.in : Have a #undef for HAVE_ZLIB_H so that it will
	  get defined by AC_CHECK_HEADERS.

Mon Jan 17 17:04:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: fixed a hideous bug in xmlGetProp() thanks to
	  Rune.Djurhuus@fast.no

Sat Jan 15 15:09:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* TODO: updated
	* tree.c, parser.c: made sure that only memory alloc problems
	  and internal parser errors are allowed to write to stdout or
	  stderr.

Thu Jan 13 11:49:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c : restored xmlNewGlobalNs since this seems used by
	  a lot of existing code :-(, fixed a bug in xmlNewNs
	* nanohttp.c: fixed a problem with INCLUDE_WINSOCK
	* HTMLparser.c, parser.c, entities.c, valid.c : removed all calls
	  to exit() from the library code.
	* xpath.c, parser.c: removed bugs or unused code detected by 
	  Windows compilers
	* parser.c: started adding interfaces for parsing well balanced
	  XML fragments
	* configure.in: releasing 1.8.4
	* doc/* : rebuilt the docs

Sun Jan  9 23:03:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] : added xmlNewDocFragment() for DOM
	* testHTML.c: uninitialized variable.

Wed Jan  5 17:29:17 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuild the docs

Wed Jan  5 17:08:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* acconfig.h: readline and history patch
	* valid.[ch]: added xmlRemoveID() and xmlRemoveRef()
	* tree.c: added check and handling when possibly removing an ID
	* tree.c, HTMLparser.h, HTMLtree.h: fixed entities parsing
	     and saving.
	* test/HTML/entities.html result/HTML/entities.html* : test for
	     various entities reference cases
	* result/HTML/* : as a result output of some testcase have
	     changed
	* HTMLparser.c, parser.c: fixed a bug in the push mode triggered
	     by previous example. added xmlParseTryOrFinish().
	* xpath.h tree.h parser.h valid.h xmlIO.h xlink.h encoding.h
	  entities.h debugXML.h HTMLparser.h: changed the way struct are 
	  declared to allow gtk-doc to expose those
	* parser.c: closed bug #4960  
	* Makefile.am configure.in: Applied patch from 
	  Albert Chin-A-Young <china@thewrittenword.com> for better zlib
	  and math/socket libs detection

Mon Jan  3 18:29:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, Makefile.am: link tester against readline
	* doc/xml.html doc/*/*: updated and rebuilt the documentation pages

Mon Jan  3 11:58:05 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: added xmlRemoveProp
	* win32config.h.in nanohttp.c: avoid including the Windows
	    socket stuff in every C files
	* parser.c: removed an indetermination xmLDecl/PI(xml...) in
	    the XmL parser(s)
	* test/ns4 result/ns4 etc...: added test case for previous prob    
	* tree.c: xmlNewNs wasn't checking for double definition
	* Makefile.in: fixed a problem with dist-hook duplicates
	* parser.[hc], xmlIO.c: fixed the loading of external entities
	    APIs, now xmlLoadExternalEntity() is used everywhere and
	    setting up an app specific front-end using the 
	* SAX.c parser.c: some fixes, now the xhtml spec validates
	    with the xhtml DTD.
	* error.c: fixed crashes in case of no input stream    
	* test/valid/[dtds/]/xhtml* : added the xhtml spec and dtds
	    to the validation tests and results

Wed Dec 29 15:29:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch] testHTML.c: added push mode for the HTML parser
	  too htmlCreatePushParserCtxt() and htmlParseChunk()
	* parser.c: a bit of cleanup.
	* SAX.c, HTMLparser.c: some attributes may not have values (contrary
	  to XML) removed the last mem leak known
	* HTMLtree.c: output message cleanup
	* xmlmemory.c: display content info about memory blocks
	* result/HTML/wired.* : missing att value warning change

Tue Dec 28 17:42:41 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the documentation

Tue Dec 28 18:44:22 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] parserInternals.h: Push parser for XML,
	     seems to work fine now
	* tester.c debugXML.[ch]: Added an XML shell debug facility and
	     --push for push testing
	* xpath.[ch] : cleaned up for Shell usage, added missing APIs
	* testSAX.c: added --push
	* HTMLtree.[ch] tree.[ch]: new functions for dumping parts of the
	     subtree
	* xmlIO.[ch] : enriched API + fixes for push mode     
	* entities.[ch]: added the entity content length to the struct.
	* xmlmemory.[ch]: new API to show the last entries for the shell
	* valid.c: added required attribute testing
	* SAX.c: the cdata callback now merge contiguous fragments
	* HTMLparser.c: cleanup of some macros

Wed Dec 22 12:20:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: fix for PIs name starting with xml
	* tree.c: fixed a potential problem with || and && ops
	* *.c, configure.in win32config.h.in : generate win32config.h for
	  those on the Other Side !

Tue Dec 21 17:22:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: fixed a stupid = vs. == bug :-(
	* doc/gnome-xml.sgml: s/glade/xml/

Tue Dec 21 14:29:34 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, doc/xml.html : bug fix release 1.8.2
	* debugXML.h nanohttp.h xml-error.h xmlmemory.h xpath.h : 
	  Hopefully the end of that silly C++ include problem
	* tree.[ch]: Added a few functions: xmlReplaceNode, xmlAddPrevSibling,
	      xmlAddNextSibling, xmlNodeSetName and xmlDocSetRootElement
	* HTMLparser.c HTMLparser.h HTMLtree.c: When saving HTML try to avoid 
	      troubles with autoclosed elements when the stree shape doesn't
	      follow the DtD specs. Added htmlIsAutoClosed() and
	      htmlAutoCloseTag()
	* result/HTML/*.htm*: Updated the HTML examples regression tests output
	* SAX.c tree.c: fixed bug on defaulting namespaces on attributes
	* debugXML.c: fixed a bug on printing default namespaces.
	* HTMLtree.c: fixed a problem when 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 to the context and defined
	            a set of errors values with update of errno
	* nanohttp.[ch]: minimalist HTTP front-end for fetching remote
	            DTDs and entities
	* *.h, *.c: complete cleanup of the use of config.h and include
	            protection depending on the current setup.
	* overalll debugging, maintenance and bug-fixing on all modules
	* updated the documentation
	* ready for 1.7.0

Wed Sep  8 22:46:14 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c : cleanup
	* SAX.c valid.c valid.h: added ID/IDREF checking
	* tree.c tree.h: extended doc structure for refs
	* configure.in: 1.6.2
	* parser.c: patched bug in SAX user arg call
	* parserInternals.h: patched missing close in C++ wrapping
	* testXPath.c xpath.c xpath.h: prepared for extensibility,
	  especially upcoming XPointer implementation.
	* doc/xml.html: augmented, typo

Sat Sep  4 22:48:05 CEST 1999 Timur Bakeyev <mc@bat.ru>

	* doc/Makefile.am: replaced "install -d " with "mkinstalldirs" -
	not all invocations of install understand -d.

Sat Sep  4 22:20:07 CEST 1999 Timur Bakeyev <mc@bat.ru>

	* Makefile.am: prepend all the test* calls with $(top_builddir) -
	to make 'check' works, when builddir != srcdir.

Sat Sep  4 20:25:46 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : updated the documentation

Fri Sep  3 00:01:08 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.[ch] Makefile.am  :added a memory wrapper to chase
	      not deallocated memory blocks
	* *.c : replaces all calls to malloc() free() and realloc() to
	      the wrapper functions/macros
	* tree.c : removed memory leaks dues to calling xmlFreeNode()
	      instead of xmlFreeNodeList()

Wed Sep  1 14:15:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: corrected a stupid bug leading to core dump at
	                tree deallocation. Removed warnings indicated by
			Stephane.Conversy@lri.fr
	* entities.c: Fixes Yet Another Stupid Bug, entities were not
	              looked for in the external subset

Mon Aug 30 13:22:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c valid.[ch] xpath.c: patched compilation warnings reported
	  on SGI by Stephane.Conversy@lri.fr

Sun Aug 29 22:27:29 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* all .h : changed the prototype declaration indent as in gtk
	* most .c : working on reducing the TODOs in the code
	* most .c : cleanup though -pedantic and Insure++
	* improvements on validation ID checkings.
	* tree.[ch] SAX.c: added support for namespace on attributes #2022
	* xml-config.in: closed #1810

Mon Aug 16 03:27:38 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, valid.c, valid.h: more work on validity, IDs
	* xpath.c: added/fixed comparidon and equlity, added a new isinf
	  definition for AIX

Sun Aug 15 21:15:17 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am libxml.spec.in: corrected missing xmlConf.sh in
	  the distribution due to a cut'n paste error at last commit

Tue Aug 10 20:28:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: upgraded to version 1.4.0
	* valid.[ch], SAX.c, parser.[ch] parserInternals.h ...
	  Big update, added a large part of the validation process,
	  it should be usable, but some parts are missing
	* xpath.c: improved the implementation w.r.t. root.
	* Makefile.am: added more tests
	* test and result trees: added a lot of tests
	* libxml.spec.in: export libxml.so.0 and libxml.so.1

Tue Aug 10 11:33:41 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Added an HACKING file

Tue Jul 27 21:43:00 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] : improvements and debug of the XPath implementation
	* parser.c, HTMLparser.c : modified the parsers to be progressive
	* tree.[ch] : extended the Buffer promitives
	* xmlIO.[ch] : added basic I/O routines providing progressive
	  parsing and ready for I18N conversion plugins
	* SAXresult/* : the SAX callback sequence maybe slightly different
	  now
	* test*.c : improved/updated the tests programs
	* doc/* : recompiled the docs.

1999-07-26  Michael Meeks  <michael@edenproject.org>

	* tree.h: Add const to 'content' in xmlNewDocNode, xmlNewChild

	* tree.c: Ditto.

Thu Jul 15 16:17:16 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: upgraded to version 1.4.0
	* xpath.c, xpath.h, testXPath.c, makefile.am: added code for the XPath
	  draft from W3C. Will be used by XPointer, Xlink, XSL, and possibly
	  XML query language, see http://www.w3.org/TR/xpath for more details.
	* parser.c, parser.h: added CHAR* related string functions for XPath
	* HTMLparser.[ch], HTMLtree.c: a bit of cleanup on entities.
	* doc/gnome-xml.sgml, doc/html/* : added XPath and HTML documentation,
	  rebuild the docs.
	* Makefile.am, test/XPath/*, result/XPath/*: added an XPathtests target
	  and regression testing capabilities for XPath.

Mon Jul 12 12:36:39 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, HTMLparser.c: applied patch from John Ellson <ellson@lucent.com>
	  closing bug #1646

Mon Jul 12 11:04:44 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am, example/Makefile.am: closed bug #1683

Sun Jul 11 18:16:34 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* example/Makefile.am, configure.in: added the makefile for the
	  gjobread example

Sat Jul 10 14:19:11 CEST 1999 Tomasz Kłoczko  <kloczek@pld.org.pl>

	* doc/Makefile.am:
	- fix which allow "make install DESTDIR=</install/prefix>".

Fri Jul  9 12:10:24 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.c: applied patch from John Ellson <ellson@lucent.com>
	  which fixed a problem on the file reading-code.

Wed Jul  7 09:28:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch], HTMLtree.[ch]: more work for HTML parsing and
	  output.
	* Makefile.am, test/HTML/*, result/HTML/*: added HTMLtests targetestHTMLt

Wed Jul  7 00:25:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.h : Oops removed the binary compatibility problem
	* HTMLparser.[ch], HTMLtree.h : More work on the HTML parse/dump
	* parser.c, HTMLparser.c: applied patches for reading from stdin

Mon Jul  5 18:45:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, entities.c, valid.c: cleanup bug #1591
	* configure.in: cleanup bug #1592
	* HTMLparser.[ch], testHTML.c: started adding an HTML parser using
	  the same tree back-end. Hence gdome will be available for it.
	* doc/Makefile.am: close bug #617

Sat Jun 26 23:36:38 EDT 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: alloctate a per parser context SAX interface block

Tue Jun 22 23:46:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* released 1.3.0 with xmlEncodeEntities restoring old behaviour
	  and xmlEncodeEntitiesReentrant with the correct one :-\

Mon Jun 21 14:07:53 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* commit of my internal XML base changes, quite a lot of
	  changes, cleanups, better entities support, framework for
	  new I/O and charset detection and handling
	* Fixed the configure/Makefile stuff to generate shared libs
	  with the proper version info, so we jumped on rev from
	  0.0.0 to 1.2.0 ! The binary interfaces have been broken,
	  xmlEncodeEntities() result need to be freed now, and a string
	  xmlParserVersion provide the current library version.

Tue Jun 15 14:24:19 1999  Raph Levien  <raph@acm.org>

	* parser.c: fixed a buffer overrun for when you have a very long
	attribute with no entities in it.

Mon Jun 14 00:17:50 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* added example directory
	* added example/gjobs.xml gjobread.c, still need a Makefile.in

Wed Jun  2 19:40:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Release of libxml-1.1, nearly everything has been touched for
	  this.
	* Added more regression tests
	* Updated the documentation

Sat May 29 13:34:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: unified the XML_NO_CORBA defines.
	* parser.c encoding.[ch]: started plugging in char encoding detection

Fri May 28 22:58:42 EDT 1999 Manish Vachharajani <mvachhar@vger.rutgers.edu>

	* tree.c: (xmlSaveFile) - removed double call of xmlContentDump.  
	  Also freed allocated buffer.

Wed Apr 21 22:07:35 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
	* parser.[ch] tree.[ch] entities.[ch] valid.[ch] : removed the main
	  reentrancy problem at printing. One is left in entities.c, to
	  remove ASAP
	* testSAX.c : added a test example showing the use of the SAX 
	  interface if one doesn't want to build the DOM tree.
	* html/gnome-xml-*.html html/index.sgml: regenerated the documentation

Mon Apr  5 14:14:40 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] tree.[ch] SAX.c, parserInternals.h valid.[ch]:
	  large revamping of the parser to use SAX callbacks
	  http://www.megginson.com/SAX/ (or at least a C like interface
	  a la Expat). It's now possible to set up your own callbacks
	  and the parser will not build a DOM tree.
	* test/* result/*: updated the test suite, I finally removed
	  the old Namespace draft support (PI based).

Fri Apr  2 17:57:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am: added test result to EXTRA_DIST for make tests

Wed Mar 24 21:37:02 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parserInternals.h: moved the chars macro definitions
	  to parserInternals.h
	* parser.c, error.c: applied patches from "Knut Åkesson"
	  <ka@s2.chalmers.se> for clean compilation under MSVC 6 :-o

Tue Mar 23 11:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.in : applied patch to make --version work

1999-03-05  Raja R Harinath  <harinath@cs.umn.edu>

	* Makefile.am (check-local): Alias for `tests' target.  This will
	cause `make check' to do the right thing.
	(tests): Don't run tests in srcdir.  Also, replaced calls to
	basename with a `sed' "equivalent".

Fri Mar  5 07:23:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Renamed error.h to xml-error.h, corrected Makefile.am to list
	  it in the header and not the sources, updated the doc.
	  Thanks to Tim Mooney <mooney@dogbert.cc.ndsu.nodak.edu> for
	  pointing this out.

Mon Mar  1 13:27:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parser.h, parserInternals.h: memory leak hunting,
	  exported the inputStream routines.
	* doc/html/* : updated accordingly

Sun Feb 28 22:51:33 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parser.h, parserInternals.h: added a few extra
	  internal calls to allocate and free parser contexts ...
	* doc/html/* : updated accordingly

Thu Feb 25 11:52:24 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, Makefile.am, doc/makefile.am : General changes for
	  1.0.0 release and including the generated HTML documentation.

Thu Feb 25 09:44:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* makefile.am : added parserInternals.h, oops.

Mon Feb 22 11:24:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parserInternals.h: added this header giving access to the parser
	  internal functions.
	* doc/Makefile.am : added a rebuild target which rebuilds the full
	  set of documentations
	* parser.[ch] tree.[ch] valid.[ch]: serious updates w.r.t. parsing
	  the internal subset. 
	* *.c *.h: modifications needed to generate the documentation using
	  gtk-doc, cleanup of functions blocks, reorganisation of struct
	  declarations.

Tue Feb 16 17:27:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am, spec, doc/Makefile.am : upgrading to 0.99.8, fixing
	  the tar and spec file to include the beginning of the doc.

1999-02-13  Nuno Ferreira  <nmrf@rnl.ist.utl.pt>

	* doc/.cvsignore: Added this file.

Mon Feb  8 19:27:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: fixed xmlGetProp to return "" when the attribute
	  exists, even if the node-list is NULL.

Mon Feb  8 16:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: patched an error outputting empty attribute values.
	* Makefile.am and doc/makefile.am: have been updated during the
	  week-end. Sorry for an empty CVS log, I got a shell problem.

Mon Feb  1 12:10:13 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h: cleaned up using enums instead of defines
	* parser.c, valid.[ch]: more work on parsing/output of element
	  declarations

Sun Jan 31 22:06:48 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* valid.[ch], tree.c, parser.c : more work toward full parsing
	  of XML DTDs.
	* README: added 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 functions comment block, boring but useful.
	* parser.h, SAX.c, parser.c: now attributes are processed through
	  the SAX interface. The problem is that my SAX interface diverged
	  quite a bit from the original one, well this is not an official
	  spec, and translating it from Java to C is hairy anyway...

Tue Oct 20 02:11:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c, entities.c, tree.c, encoding.c, error.c: Set up the
	  functions comment block, boring but useful.

Sun Oct 18 20:40:58 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* encoding.[ch], Makefile.am: Added the UTF-8, UTF-16 and ISO Latin 1
	  conversion routines. However they are not yet used to convert the
	  inputs. The core will run with UTF-8.

Sun Oct 18 15:08:19 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c : make sure that the type id is properly set-up when
	  a new object is allocated, needed for DOM.

Sat Oct 17 02:43:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, tree.c: Ok, the main objects in the tree will be native
	  corba objects, it costs 8 bytes per Node, Attribute and Document
	  but it simplifies the Corba integration a lot (no extra interface
	  objects to allocate/free).

Tue Oct 13 21:46:57 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, tree.c, parser.c: added prev and doc pointers to Node,
	  and changed NODEs 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
#
