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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* dict.c: fix non GNUC builds.

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

	* makefile.am: adding a check-valgrind target

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* xpath.c: space and tabs cleanup

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

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

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

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

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

	* libxml.spec.in: fix the build root

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* threads.c: check some allocation with Ashwin patch

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

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

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

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

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

	* xmlreader.c: patch from Ashwin removing duplicate tests

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* configure.in: typo patch from Bjorn Reese

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

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

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

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

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

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

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

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

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

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

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

	* uri.c: fix xmlURIUnescapeString comments which was confusing

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* xpath.c: William spotted an obvious bug

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* tree.c: fixing bug #344390 with xmlReconciliateNs

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* tree.c: fix compilation without tree

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* NEWS configure.in libxml.spec.in testapi.c doc/*: upated the news
	  regenerated the docs, preparing for release of 2.6.23
	* pattern.c xmlschemas.c: fixed some comments
	
Thu Jan  5 15:48:27 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/XPath/docs/nodes test/XPath/tests/nodespat
	  result/XPath/tests/nodespat: Added regression tests for
	  the latest XPath/pattern fixes.

Thu Jan  5 15:43:38 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Another fix to handle "foo//.": "foo" was not
	  included in the resulting node-set.

Thu Jan  5 13:22:29 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c xpath.c include/libxml/pattern.h:
	  Fixed bug #322928, reported by Erich Schubert: The bug was
	  in pattern.c, which is used for a tiny subset of xpath
	  expression which can be evaluated in an optimized way.
	  The doc-node was never considered when evaluating "//"
	  expressions. Additionally, we fixed resolution
	  to nodes of any type in pattern.c; i.e. a "//." didn't work
	  yet, as it did select only element-nodes. Due to this
	  issue the pushing of nodes in xpath.c needed to be adjusted
	  as well.

Wed Jan  4 18:07:47 CET 2006 Daniel Veillard <daniel@veillard.com>

	* parser.c: tiny refactoring patch from Bjorn Reese

Wed Jan  4 15:00:51 CET 2006 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fix bug #324432 with <xml:foo/>
	* test/ns7 resul//ns7*: added to the regression tests

Wed Jan  4 10:53:56 CET 2006 Daniel Veillard <daniel@veillard.com>

	* include/wsockcompat.h: applied patch from Mark Junker, fixing a 
	  MinGW compilation problem, should close bug #324943

Tue Jan  3 11:49:54 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed last dependency on the obsolete enum
	  xmlSchemaValidError.

Mon Jan  2 11:20:00 CET 2006 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h xmlschemas.c: compilation
	  and doc build fixes from Michael Day

Wed Dec 28 22:12:34 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: bug in xmlRegExecPushString2() pointed out by 
	  Sreeni Nair.

Tue Dec 20 16:55:31 CET 2005 Rob Richards <rrichards@ctindustries.net>

	* tree.c: fix bug #322136 in xmlNodeBufGetContent when entity ref is 
	  a child of an element (fix by Oleksandr Kononenko).
	* HTMLtree.c include/libxml/HTMLtree.h: Add htmlDocDumpMemoryFormat.

Tue Dec 20 11:43:06 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlstring.c: Fixed a segfault during
	  text concatenation when validating a node tree:
	  xmlStrncat was called with a @len of -1; but unlike
	  xmlStrncatNew, it does not calculate the length
	  automatically in such a case (reported by Judy Hay
	  on the mailing list).
	  Updated the descriptions of the involved string
	  functions to note this.

Thu Dec 15 12:11:07 CET 2005 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: applied patch from Gary Coady to accept gzipped
	  http resources.

Wed Dec 14 18:41:26 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* win32/configure.js: Added enable/disable of runtime
	  debugging (LIBXML_DEBUG_RUNTIME).

Wed Dec 14 18:11:50 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/xmlversion.h.in: Fixed to define
	  LIBXML_DEBUG_RUNTIME on the basis of @WITH_RUN_DEBUG@.

Tue Dec 13 12:49:23 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug321475* result/schemas/bug321475*:
	  Added regression test for bug #321475 (reported by
	  Gabor Nagy). Fixing of bug #323510 seemed to have
	  fixed this bug as well.

Mon Dec 12 16:19:16 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug323510* result/schemas/bug323510*:
	  Added regression test for bug #323510.

Mon Dec 12 16:11:13 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Workaround for bug #323510 (reported by
	  Jonathan Filiatrault): substituted the epsilon transition
	  for a labelled transition, in order to avoid a bug in
	  xmlregexp.c which eliminated the epsilon transition and
	  marked the initial state as final.

Mon Dec 12 14:25:46 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: Gary Coady pointed a memory leak in
	  xmlTextReaderReadInnerXml() applied patch fixing #323864

Sat Dec 10 12:08:28 CET 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c configure.in parserInternals.c runsuite.c runtest.c
	  testapi.c xmlschemas.c xmlschemastypes.c xmlstring.c: fixed a number
	  of warnings shown by HP-UX compiler and reported by Rick Jones

Fri Dec  9 18:57:31 CET 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlwriter.c: Insert space between pubid and sysid when both 
	  passed to xmlTextWriterStartDTD and indenting not being used.
	  Remove no longer used Mem callbacks.

Fri Dec  9 11:01:16 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* runsuite.c: Changed to instantly mark instance-tests as
	  failed if the corresponding schema was invalid. This
	  reflects the side of the Python code for the XML Schema test
	  suite. We now get the same number of failed tests on both
	  sides.

Wed Dec  7 14:59:01 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlreader.c include/libxml/xmlreader.h: Added
	  xmlTextReaderSchemaValidateCtxt() to the API.

Wed Dec  7 12:59:56 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a segfault: the instance document was
	  still tried to be validated, if the schema, dynamically
	  acquired using XSI was invalid, thus mangled. The
	  validation will stop (or rather won't validate) now in
	  such a case. The schema parser error code will be set
	  on the validion context now; this is somehow not nice,
	  but it assures that the validation context indicates an
	  error in there was a parser error.

Tue Dec  6 18:57:23 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: small doc patch from Aron Stansvik
	* legacy.c: another doc patch for a deprecated API

Mon Dec  5 16:23:49 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* Makefile.am: Tiny change for 'make tests': raised
	  the number of expected failures for James Clark's
	  XML Schema datatype tests from 10 to 11. The additional
	  reported error was agreed to be correct long time ago,
	  but we missed to adjust the message reported by
	  the testing script.

Fri Dec  2 13:51:14 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/decimal* result/schemas/bug322411*:
	  Added missing regression test results for the latest IDC
	  and xs:decimal bugs.

Wed Nov 30 12:22:23 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/decimal* test/schemas/bug322411*: Added
	  regression tests for the latest IDC and xs:decimal bugs.

Wed Nov 30 11:57:35 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed bubbling of duplicate IDC nodes: the
	  parent's list of duplicates was filled with NULLs instead
	  of the nodes under certain conditions. This lead to a
	  segfault when the list's entries were accessed.

Mon Nov 28 17:28:53 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Fixed parsing of xs:decimal to
	  allow/deny special lexical forms. Fixed the totalDigits
	  for values in the range (x < 1) &&  (x > -1) && (x != 0);
	  E.g "0.123" has now a totalDigits of 3 (was 4 previously).
	  Adjusted the comparison function for decimals due to this
	  change. As a side effect comparison against zeroes was
	  optimized.

Mon Nov 28 13:25:11 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: An assignment to a local variable, which was
	  used to access the IDC node list, was missing after the
	  reallocation of the list (reported by Fabrice GUY
	  bug #322411). Renamed the define ENABLE_IDC_NODE_TABLES
	  to ENABLE_IDC_NODE_TABLES_TEST and *disabled* it, since
	  it is used to force bubbling of IDC node tables even
	  if not necessary; this was intended to be used for test
	  purposes, but I obviously missed to disable it (although
	  it apparently helped finding the bug).

Wed Nov 23 17:34:52 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: In xmlSchemaAssembleByXSI() the return value
	  of xmlSchemaGetMetaAttrInfo() was not assigned to anything;
	  this caused XSI-driven-dynamic schema acquisition to fail
	  with @noNamespaceSchemaLocation (reported by Julien Lamy
	  on the mailing list).

Tue Nov 22 18:31:34 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a bug in xmlSchemaFindRedefCompInGraph()
	  which caused the search for components to stop at the
	  first encountered attribute group component.
	  Fixed error report in xmlSchemaCheckSRCRedefineFirst(): the
	  designation of a not-found component was not reported.

Mon Nov 21 12:23:28 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: Albert Chin found another signed/unsigned problem
	  in the date and time code raised on IRIX 6.5

Fri Nov 18 18:13:38 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlschemas.h:
	  Added xmlSchemaSetParserStructuredErrors() to the API.
	  Fixed channeling of error relevant information to
	  subsequent parser/validation contexts.

Thu Nov 17 14:11:43 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: removed unreachable code pointed out by 
	  Oleksandr Kononenko, fixes bug #321695

Thu Nov 17 08:24:31 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: use ctxt->standalone = -2 to indicate that the
	  XMLDecl was parsed but no standalone attribute was found,
	  suggested by Michael Day to detect if an XMLDecl was found.

Tue Nov 15 09:49:24 CET 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: Hisashi Fujinaka pointed that errors in Schemas tests
	  were not properly reported.

Sun Nov 13 13:42:41 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Geert Jansen to remove xmlBufferClose()
	  which is not needed.

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

	* xmlschemas.c: Changed xmlSchemaFormatIDCKeySequence()
	  to use xmlSchemaGetCanonValueWhtspExt() in order to
	  correctly report values for xs:anySimpleType.
	* test/schemas/idc-keyref-err1*
	  result/schemas/idc-keyref-err1*: Added a test for this change.

Wed Nov  9 13:07:24 EST 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlIO.c xmlwriter.c: function consolidation when writing to xmlBuffer.
	  Return error condition not len if xmlwriter fails writing to buffer.

Wed Nov  9 09:54:54 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c xmlIO.c include/libxml/xmlIO.h include/libxml/xmlsave.h:
	  applied patch from Geert Jansen to implement the save function to 
	  a xmlBuffer, and a bit of cleanup.

Mon Nov  7 14:58:39 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlschemastypes.c: Fixed the type of the
	  totalDigits value to be positiveInteger.
	  Fixed crash in an error report function when we gave it
	  the document node; only element and attribute nodes are
	  processed now (reported by Rob Richards).

Tue Nov  1 16:22:29 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fix bug #319897, problem with counted atoms
	  when the transition itself is counted too
	* result/regexp/hard test/regexp/hard: augmented the regression
	  tests with the problem exposed.

Tue Nov  1 11:54:39 CET 2005 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.mingw include/win32config.h: applied patch from
	  Mark Junker to fix compilation with MinGW

Fri Oct 28 18:36:08 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* libxml.3: tiny fix from Albert Chin
	* runsuite.c runtest.c testapi.c: portability cleanup for arch
	  needing trio for *printf

Fri Oct 28 12:21:39 EDT 2005 Rob Richards <rrichards@ctindustries.net>

	* tree.c: add additional checks to prevent tree corruption. fix problem 
	  copying attribute using xmlDocCopyNode from one document to another.

Fri Oct 28 17:58:13 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in vms/config.vms macos/src/config-mac.h:
	  cleanup from Albert Chin
	* doc/Makefile.am: html/index.sgml doesn't exist anymore

Fri Oct 28 16:53:51 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmlmodule.c: more portability patches from Albert Chin for
	  HP-UX and AIX

Fri Oct 28 10:36:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c configure.in: applied 2 patches from Albert Chin for
	  module portability

Fri Oct 28 10:24:39 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c: fixing a portability problem on some old Unices with
	  patch from Albert Chin

2005-10-27  Aleksey Sanin <aleksey@aleksey.com>

	* c14n.c  result/c14n/exc-without-comments/test-2
	  test/c14n/exc-without-comments/test-2.xml
	  test/c14n/exc-without-comments/test-2.xpath: fixing
	  bug in exc-c14n namespace visibility + test case (bug #319367)

Thu Oct 27 16:10:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: remove warnings to stdout patch from Nic Ferrier

Thu Oct 27 13:54:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlregexp.c include/libxml/valid.h
	  include/libxml/xmlregexp.h: avoid function parameters names 'list'
	  as this seems to give troubles with VC6 and stl as reported by
	  Samuel Diaz Garcia.

Wed Oct 26 10:59:21 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fix a problem in some error case on Solaris
	  when passed a NULL filename, pointed by Albert Chin.

Tue Oct 25 14:34:58 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: script HTML parser error fix, corrects bug #319715
	* result/HTML/53867* test/HTML/53867.html: added test from Michael Day
	  to the regression suite 

Tue Oct 25 14:21:11 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: typo fix from Michael Day

Mon Oct 24 20:16:23 EDT 2005 Rob Richards <rrichards@ctindustries.net>

	* tree.c: fix issue adding non-namespaced attributes in xmlAddChild(), 
	  xmlAddNextSibling() and xmlAddPrevSibling() (bug #319108) - part 1.

Sat Oct 22 10:00:41 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed second spot where CRLF split between chunks
	  could cause trouble (bug #319279)
	* gentest.py, testapi.c: fixed two problems involved with
	  --with-minimum compilation (compilation errors with schematron
	  and formal expressions tests)

Fri Oct 21 10:50:14 EDT 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlsave.c: prevent output of fragment tags when serializing XHTML.

Wed Oct 19 16:53:47 BST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: commiting a some fixes and debug done yesterday in
	  the London airport.

Thu Oct 20 12:54:23 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed creation of a temporary parser context
	  during validation when processing xsi:type; this previously
	  added a string to the dict of the schema - to assure thread
	  safety, we don't want to modify a given schema during
	  validation.

Thu Oct 20 17:05:29 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: fixed problem in xmlTextWriterVSprintf caused by
	  misuse of vsnprintf
	* configure.in, config.h.in: added a configuration check for
	  va_copy and added a define for VA_COPY for xmlwriter.c fix
	* parser.c: fixed problem with CRLF split between chunks (bug
	  #319279) (fix provided by Brion Vibber)

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

	* xmlschemas.c: Fixed a potential memory leak in
	  xmlSchemaCheckCSelectorXPath() when an internal error occurs.
	  Fixed setting of ctxt->err to the given error code in
	  the parsing error functions.
	* pattern.c: Added internal xmlCompileIDCXPathPath() as a
	  starting point for IDC XPath compilation; this and some other
	  tiny changes fixes issues regarding whitespace in the
	  expressions and IDC selector/field relevant restrictions of
	  the subset of XPath. Fixed a missing blocking of attributes
	  in xmlStreamPushInternal().

Mon Oct 17 15:06:05 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: removed the error message
	* relaxng.c xmlschemas.c: removed 2 instability warnings from function
	  documentation
	* include/libxml/schemasInternals.h: changed warning about API stability
	* xmlregexp.c: trying to improve runtime execution of non-deterministic
	  regexps and automata. Not fully finished but should be way better.

Mon Oct 17 16:12:02 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a memory leak in
	  xmlSchemaContentModelDump(). Added output of local types
	  in xmlSchemaElementDump(). Tiny cosmetical changes to the
	  dump output.

Mon Oct 17 14:29:08 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c pattern.c: Silenced intel compiler warnings (reported
	  by Kjartan Maraas, bug #318517).
	* xmlschemas.c: The above changes in pattern.c revealed an
	  inconsistency wrt IDCs: we now _only_ pop XPath states, if
	  we really pushed them beforehand; this was previously not
	  checked for the case when we discover an element node to be
	  invalid wrt the content model.
	  Fixed segfault in xmlSchemaGetEffectiveValueConstraint().

Fri Oct 14 16:40:18 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/*.err: Adapted regression test results.

Fri Oct 14 16:21:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
	
	* xmlschemas.c: Fixed some identity-constraint issues:
	  Restructured IDC node-tables
	  Allowed IDCs to resolve also to nodes of complex type with
	  simple content.
	  Added check for keyrefs with references to keyrefs.
	  IDC target-nodes were interferring with IDC node-tables,
	  since they used one list of entries only. I separated this
	  one big list into 3 lists: 1 for IDC node-table entries,
	  1 for _duplicates_ of IDC node-table entries and 1 for
	  IDC target-nodes. More code, but cleaner and it works at last.
	  Keyrefs will fail to resolve to duplicate key/unique entries.
	  I thought this was already working this way, but it didn't.
	  The wording of the definition for [node table] in the spec
	  can lead to a scenario, where keyrefs resolve perfectly, even
	  if the relevant key-sequences of the referenced key/unique have
	  duplicates in the subtree. Currently only Saxon 8.5.1 is
	  dissallowing resolution to duplicate entries correctly - we
	  will follow Saxon here.
	  Removed some intel compiler warnings (reported by
	  Kjartan Maraas, bug #318517).
	* pattern.c: Fixed an IDC-XPath problem when resolving to
	  attributes.	  

Mon Oct 14 01:15:14 CEST 2005 Rob Richards <rrichards@ctindustries.net>
	* nanohttp.c include/wsockcompat.h: applied patch from Kolja Nowak 
	  to use getaddrinfo() if supported in Windows build (bug# 317431).

Mon Oct 10 15:33:48 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/*: Adapted regression test results.

Mon Oct 10 15:12:43 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: Initial implementation for
	  redefinitions; this still misses checks for restrictions
	  of the content model of complex types.
	  Fixed default/fixed values for attributes (looks like they
	  did not work in the last  releases).
	  Completed constraints for attribute uses.
	  Seperated attribute derivation from attribute constraints.
	  Completed constraints for attribute group definitions.
	  Disallowing <import>s of schemas in no target namespace if the
	  importing schema is a chameleon schema. This contradicts
	  the way Saxon, Xerces-J, XSV and IBM's SQC works, but the
	  W3C XML Schema WG, thinks it is correct to dissalow such
	  imports.
	  Added cos-all-limited constraints.
	  Restructured reference resolution to model groups and element
	  declarations.
	  Misc cleanup.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: Completion of the schema graph.
	  Centralisation, more robustness of the schema document
	  aquisition story. Centralised and restructured component fixup.
	  Fixed attribute derivation when 'prohibiting' attribute uses.
	  Added warnings: when schema documents cannot be localized
	  during imports; when we get duplicate and pointless attribute
	  prohibitions. Changed error reports for IDCs to report
	  the relevant IDC designation as well (requested by GUY Fabrice).
	  Misc code-cleanup.

Mon Sep 12 16:02:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: applied second patch from David Madore to be less intrusive
	  when handling scripts and style elements in XHTML1 should fix #316041
	* test/xhtml1 result//xhtml1\*: updated the test accordingly

Mon Sep 12 15:09:09 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in doc/devhelp/*: finished the integration with
	  devhelp, completing the index and inserted into the gtk-doc
	  database at "make install" stage

Mon Sep 12 14:14:12 CEST 2005 Rob Richards <rrichards@ctindustries.net>

	* include/libxml/xmlsave.h xmlsave.c: add XML_SAVE_NO_EMPTY save option
	  and use option from xmlSaveCtxtPtr rather than global during output.
	* xmlsave.c: fix some output formatting for meta element under XHTML.

Mon Sep 12 11:12:03 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h parser.c xmllint.c: damn XML_FEATURE_UNICODE
	  clashes with Expat headers rename to XML_WITH_ to fix bug #316053. 
	* doc/Makefile.am: build devhelp before the examples.
	* doc/*: regenerated the API

Mon Sep 12 02:03:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: fix bug #316034, where xmlElemDump() can crash if 
	  given a document pointer instead of an element

Mon Sep 12 01:26:16 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/devhelp/devhelp.xsl: improvements on the html generation,
	  should be complete with navigation, what is left done is glueing

Mon Sep 12 00:03:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml
	  doc/devhelp/*: started work needed to generate devhelp content,
	  not too hard based on the existing format and extractor.

Fri Sep  9 12:56:19 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixes bug #315617 when using push CDATA in some cases.

Thu Sep  8 23:39:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: patch from Stéphane Bidoul to compile without schematron

Wed Sep  7 00:16:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: patch from Oleg Paraschenko to fix xmlDebugDumpNode()
	  when handled a namespace node.

Sun Sep  4 23:36:45 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* NEWS elfgcchack.h testapi.c doc/*: updated the docs and rebuild
	  releasing 2.6.21
	* include/libxml/threads.h threads.c: removed xmlIsThreadsEnabled()
	* threads.c include/libxml/threads.h xmllint.c: added the more
	  generic xmlHasFeature() as suggested by Bjorn Reese, xmllint uses it.

Sun Sep  4 22:45:49 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* configure.in: prepare for release
	* xpath.c: work for #303289, fix a formatting bug for MIN_INT

Sun Sep  4 15:48:57 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: real fix for #314881 and #314759 is was a bit more complex
	  than initially expected as ctxt->error == NULL had behaviour side
	  effects at the compilation level itself.

Sun Sep  4 14:01:00 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xpath.c include/libxml/pattern.h: fixing yet another
	  pattern induced XPath bug #314282
	* relaxng.c: reverted back last change it was seriously broken

Sat Sep  3 16:51:55 CEST 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlsave.c: check for NULL to prevent crash with meta elements

Sat Sep  3 16:26:55 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: structured error reporting problem with Relax-NG
	  should fix #314881 and #314759

Sat Sep  3 15:42:29 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: fixes a portability problem raised by C370 on Z/OS

Sat Sep  3 15:26:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* SAX2.c tree.c valid.c: fixing a number of issues raised by xml:id
	  but more generally related to attributes and ID handling, fixes
	  #314358 among other things

Fri Sep  2 14:26:43 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c parserInternals.c: avoid passing a char[] as snprintf
	  first argument.
	* threads.c include/libxml/threads.h: implemented xmlIsThreadsEnabled()
	  based on Andrew W. Nosenko idea.
	* doc/* elfgcchack.h: regenerated the API

Thu Sep  1 14:44:42 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: the use of AM_PATH_PYTHON is not portable enough
	  reverting back to AM_PATH_PROG

Thu Sep  1 11:42:39 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Applied the last patch from Gary Coady for #304637
	  changing the behaviour when text nodes are found in body
	* result/HTML/*: this changes the output of some tests

Thu Sep  1 11:22:37 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/downloads.html doc/xml.html: adding reference to Bull AIX rpms
	  c.f. #160598

Wed Aug 31 11:39:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xml2-config.in: removed the obsolete --libtool-libs option, c.f.
	  bug #314853

Fri Aug 26 17:33:26 CEST 2005 Rob Richards <rrichards@ctindustries.net>

	* xmlsave.c: move handling of meta element for http-equiv in XHTML docs 
	  to serialization and no longer modify internal tree.

Fri Aug 26 00:51:58 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: the profiling usually don't work, disabled
	* doc/*: rebuilt

Thu Aug 25 23:47:55 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: trying to fix the first part of #310033 by
	  detecting gcc <= 3.2

Thu Aug 25 22:13:37 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c: fixed bug #310033, the URI extraction code given a
	  node is a bit twisted and broke in the last months.

Thu Aug 25 16:18:15 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* debugXML.c result/XPath/xptr/strrange2: uninitialized field and
	  fix on test.

Thu Aug 25 16:03:05 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: change verbosity depending on API
	* result/XPath/tests/* result/XPath/xptr/* result/xmlid/*: get back
	  to previous outputs

Thu Aug 25 15:14:56 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c SAX2.c debugXML.c tree.c valid.c xmlreader.c
	  xmllint.c include/libxml/HTMLparser.h include/libxml/parser.h:
	  added a parser XML_PARSE_COMPACT option to allocate small 
	  text nodes (less than 8 bytes on 32bits, less than 16bytes on 64bits)
	  directly within the node, various changes to cope with this.
	* result/XPath/tests/* result/XPath/xptr/* result/xmlid/*: this 
	  slightly change the output

Thu Aug 25 12:16:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: patch from Andrew W. Nosenko, use se $GCC = 'yes'
	  instead of $CC = 'gcc' because GCC may have a different name

Thu Aug 25 00:18:20 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: changes the way the python binary is found, should
	  also fix bug #308004

Wed Aug 24 16:44:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: found another bug while looking at #309616 on missing
	  entities.
	* result/ent2.sax* result/ent7.sax* result/xml2.sax*: this changed the
	  SAX stream in missing conditions for a few tests

Wed Aug 24 16:19:00 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applied the patch suggested #309565 which can avoid
	  looping in error conditions.

Wed Aug 24 16:04:17 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* SAX2.c tree.c: line numbers are now carried by most nodes, fixing
	  xmlGetLineNo() c.f. bug #309205

Wed Aug 24 14:43:34 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c error.c include/libxml/xmlerror.h: finally converted
	  the encoding module to the common error reporting mechanism
	* doc/* doc/html/libxml-xmlerror.html: rebuilt

Wed Aug 24 11:35:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xpath.c: removed a potentially uninitialized variable error
	* python/generator.py: fixed a deprecation warning
	* python/tests/tstLastError.py: silent the damn test when Okay !

Wed Aug 24 00:11:16 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* SAX2.c globals.c runtest.c testC14N.c testapi.c tree.c
	  include/libxml/SAX2.h include/libxml/xmlregexp.h: fixed compilation
	  when configured --without-sax1 and other cleanups fixes bug #172683
	* doc/* elfgcchack.h: regenerated

Tue Aug 23 20:05:05 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #170489 reported by Jirka Kosek
	* test/valid/objednavka.xml test/valid/dtds/objednavka.dtd
	  result/valid/objednavka*: added the test to the regression suite.

Tue Aug 23 18:04:08 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c include/libxml/HTMLparser.h: added a recovery mode
	  for the HTML parser based on the suggestions of bug #169834 by
	  Paul Loberg

Tue Aug 23 15:38:46 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h testapi.c doc/*: regenerated
	* schematron.c: fixed a compilation problem
	* xmlregexp.c include/libxml/xmlregexp.h: some cleanups and one bug fix
	* result/expr/base: slightly changes the number of Cons.

Mon Aug 22 23:19:50 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h testapi.c doc/*: rescanned code and rebuilt
	* xmlregexp.c: small cleanup
	* include/libxml/schematron.h include/libxml/xmlexports.h
	  include/libxml/xmlversion.h.in: cleanup problems from code scanner

Mon Aug 22 18:00:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied patch from Kuba Nowakowski fixing bug
	  #313982
	* result/schemas/bug313982* test/schemas/bug313982*: also added
	  the test case to the regression suite.

Mon Aug 22 17:50:20 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testRegexp.c: printed the wrong string

Mon Aug 22 16:42:07 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testRegexp.c xmlregexp.c include/libxml/xmlregexp.h: exported
	  xmlExpExpDerive(), added it to the testRegexp command line 
	  tool when providing multiple expressions.

Mon Aug 22 14:57:13 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am result/expr/base test/expr/base: added the first
	  regression test suite set for the new expression support

Mon Aug 22 13:49:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed an uninitialized variable
	* xmlregexp.c include/libxml/xmlregexp.h: extended the API to
	  add the parser, serializer and some debugging
	* include/libxml/xmlversion.h.in: made the new support compiled
	  by default if Schemas is included
	* testRegexp.c: cleanup and integration of the first part of the
	  new code with a special switch
	* xmllint.c: show up Expr in --version if compiled in
	* include/libxml/tree.h: moved the xmlBuffer definition up

Mon Aug 22 12:11:10 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Some preparation for the creation of a graph
	  of imported/included/redefined schemas; this is needed for
	  at least the redefinitions.
	  Centralized the creation of the parser context in one function.

Mon Aug 22 02:19:33 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c include/libxml/xmlregexp.h: pushing the formal expression
	  handling code to have it in CVs from now. Not plugged, and misses 
	  APIs it's not compiled in yet.

Sat Aug 20 23:13:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied another patch from Rob Richards to fix
	  xmlTextReaderGetAttributeNs and xmlTextReaderMoveToAttributeNs

Wed Aug 17 09:06:33 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied patch from Rob Richards to fix 
	  xmlTextReaderGetAttribute behaviour with namespace declarations

Fri Aug 12 14:12:56 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlerror.h:
	  Changed output for keyref-match errors; the target-node will
	  be now reported rather than the scope-node of the keyref
	  definition - allowing easier chasing of instance errors.
	  This was reported by Guy Fabrice to the mailing list.
	  Some initial parsing code for schema redefinitions.
	* result/schemas/bug303566_1_1.err
	  result/schemas/bug312957_1_0.err: Adapted test results due
	  to the keyref changes.

Fri Aug 12 12:17:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* valid.c: applied patch from Derek Poon fixing bug #310692

Wed Aug 10 23:39:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fix for bug #312945 as pointed by Dean Hill, the
	  context type was not always properly initialized. 

Wed Aug 10 18:21:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #307377 about validation of choices in
	  list values.
	* test/relaxng/307377* result/relaxng/307377* Makefile.am runtest.c:
	  added examples to the regression tests, problem is that streaming
	  version gives slightly more informations.

Wed Aug 10 15:25:53 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed bug #302302, nasty but the fix is rather simple.

Wed Aug 10 11:59:46 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/any6_1_0*: Added missing test results.

Tue Aug  9 23:37:22 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixed a determinism detection problem exposed by
	  ##other tests commited by Kasimier, also added a small speedup
	  of determinism detection.
	* test/results/any6_2_0* any8_1_0* any7_1_2* any7_2_2*: added 
	  the results to the regression tests now

Tue Aug  9 15:54:09 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/any7_2.xml test/schemas/any6_2.xsd
	  test/schemas/any8_1.xsd test/schemas/any8_0.xml:
	  Added some more tests for element wildcards.

Tue Aug  9 14:22:47 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed #312957 reported by Carol Hunter:
	  streaming XPath states were not popped in every case,
	  thus failed to resolve correctly for subsequent input.
	* test/schemas/bug312957* result/schemas/bug312957*:
	  Added the test submitted by Carol Hunter.

Tue Aug  9 13:07:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: trying to nail down the remaining
	  ##other issues
	* result/schemas/any7* test/schemas/any7: completed the tests
	  and added the results
	* result/schemas/any3_0_0.err result/schemas/any5_0_0.err
	  result/schemas/any5_1_0.err: this slightly chnages the output
	  from 3 existing tests

Mon Aug  8 22:33:08 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c xmlschemastypes.c: applied patch from 
	  Marcus Boerger to remove warnings on Windows.

Mon Aug  8 16:43:04 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c include/libxml/xmlsave.h: fixed #145092 by adding 
	  an xmlSaveOption to omit XML declaration

Mon Aug  8 15:44:54 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed bug #310333 with a patch close to the provided
	  patch for HTML UTF-8 serialization
	* result/HTML/script2.html: this changed the output of that test

Mon Aug  8 15:01:51 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixed bug #310264, basically it's about reentrancy
	  of count based transition, when going though the counter must
	  be reset to 0
	* test/schemas/bug310264* result/schemas/bug310264*: added the
	  regression test.

Mon Aug  8 14:40:52 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a memory leak: xmlSchemaFreeAnnot() was
	  only freeing the first annotation in the list.

Mon Aug  8 09:44:34 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied patch from Rob Richards fixing
	  xmlTextReaderGetAttribute

Mon Aug  8 01:41:53 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed an uninitialized memory access spotted by
	  valgrind

Sun Aug  7 12:39:35 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* test/relaxng/docbook_0.xml: get rid of the dependancy on a locally
	  installed DTD
	* uri.c include/libxml/uri.h xmlIO.c nanoftp.c nanohttp.c: try to
	  cleanup the Path/URI conversion mess, needed fixing in various 
	  layers and a new API to the uri module which also fixes #306861
	* runtest.c: integrated a regression test specific to check the
	  URI conversions done before calling the I/O handlers.

Sat Aug  6 11:06:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/XSLT.html doc/xml.html: small doc fix for #312647

Tue Aug  2 13:26:42 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: applied patch from Rob Richards to allow
	  disabling modules in win32, fixes #304071

Mon Aug  1 07:18:53 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: applied fix from Jakub Piotr Clapa for
	  xmlAttr.parent(), closing #312181

Sun Jul 31 18:48:55 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c: report improvement
	* test/schematron/zvon* result/schematron/zvon*: more tests

Sun Jul 31 16:02:59 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.msvc win32/configure.js: applied patch from Rob
	  Richards to add schematron to the build on Windows
	* test/schematron/zvon3* result/schematron/zvon3*: second test
	* test/schematron/zvon10* result/schematron/zvon10*: this is the
	  real second test 10 and 2 are swapped.

Sun Jul 31 15:42:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c: more bug fixes, improve the error reporting.
	* test/schematron/zvon2* result/schematron/zvon2*: second test

Sun Jul 31 14:15:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c xmllint.c: fixing the loop bug, fixing schematron
	  text error rendering
	* Makefile.am result/schematron/* test/schematron/zvon1*.sct:
	  started integrating within "make tests"

Sat Jul 30 17:26:58 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* test/schematron/*: a few first tests from Zvon unfortunately
	  with the old syntax

Sat Jul 30 17:08:07 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c xmllint.c include/libxml/schematron.h: commiting
	  work done on the plane last week-end

Sat Jul 30 15:16:29 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: allows an extra argument to subset the tests
	* xmlregexp.c: big speedup for validation, basically avoided
	  transition creation explosion when removing epsilon transition
	  
Sat Jul 30 00:00:46 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am globals.c parserInternals.c xmlreader.c xmlunicode.c
	  xmlwriter.c: more cleanups based on sparse reports, added 
	  "make sparse"

Fri Jul 29 12:11:25 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: don't output any message on failed resolver lookups,
	  better done by the python user provided resolver layer.

Fri Jul 29 01:48:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c SAX2.c encoding.c globals.c parser.c relaxng.c
	  runsuite.c runtest.c schematron.c testHTML.c testReader.c
	  testRegexp.c testSAX.c testThreads.c valid.c xinclude.c xmlIO.c
	  xmllint.c xmlmodule.c xmlschemas.c xpath.c xpointer.c: a lot of 
	  small cleanups based on Linus' sparse check output.

Thu Jul 28 21:28:33 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: added schematron.h, oops ...

Thu Jul 28 02:38:21 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Added creation of the content type of
	  xs:anyType. This is needed when trying to extend xs:anyType
	  (although it makes no sense to extend it; IMHO the schema
	  people should have ruled this out). This was reported
	  by Yong Chen to the mailing list.
	* xmlschemas.c: Fixed handling of xs:anyType in
	  xmlSchemaCheckCOSCTExtends() (reported by Young Chen). Tiny
	  adjustment to an error report output.
	* test/schemas/extension2* result/schemas/extension2*:
	  Added a test case provided by Young Chen.

Mon Jul 25 11:41:18 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* uri.c: enhanced xmlBuildRelativeURI to allow the URI and the
	  base to be in "relative" form

Sun Jul 24 10:25:41 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* schematron.c xmllint.c: started adding schematron to the xmllint
	  tool, the report infrastructure is gonna be fun.

Sat Jul 23 23:23:51 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/any6* test/schemas/any7*: Added regression tests
	  (they fail currently), but did not added results yet.

Sat Jul 23 23:07:05 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed the workaround code in
	  xmlSchemaValidateElemWildcard() for the <any> wildcard
	  with namespace == ##other. Support for such wildcards was
	  implemented by Daniel at the automaton level recently, and
	  the workaround code iterfered with it.

Sat Jul 23 10:55:50 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c include/libxml/pattern.h: changed xmlPatterncompile
	  signature to pass an int and not an enum since it can generate
	  ABI compat troubles.
	* include/libxml/schematron.h schematron.c: adding the new 
	  schematron code, work in progress lots to be left and needing
	  testing
	* include/libxml/xmlversion.h.in include/libxml/xmlwin32version.h.in
	  Makefile.am configure.in: integration of schematron into the
	  build
	* xpath.c include/libxml/xpath.h: adding flags to control compilation
	  options right now just XML_XPATH_CHECKNS.

Sat Jul 23 16:39:35 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed an "internal error" message from
	  xmlSchemaBuildAContentModel() when an empty model group
	  definition is hit.

Sat Jul 23 00:34:07 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Changed xmlCompileStepPattern() and
	  xmlCompileAttributeTest() to handle the "xml" prefix without
	  caring if the XML namespace was supplied by the user.

Fri Jul 22 00:08:43 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed xmlSchemaPSimpleTypeErr(), which did not
	  output the given string arguments correctly.

Thu Jul 21 09:21:00 EDT 2005 Daniel Veillard <daniel@veillard.com>

	* error.c globals.c parser.c runtest.c testHTML.c testSAX.c
	  threads.c valid.c xmllint.c xmlreader.c xmlschemas.c xmlstring.c
	  xmlwriter.c include/libxml/parser.h include/libxml/relaxng.h
	  include/libxml/valid.h include/libxml/xmlIO.h
	  include/libxml/xmlerror.h include/libxml/xmlexports.h
	  include/libxml/xmlschemas.h: applied a patch from Marcus Boerger
	  to fix problems with calling conventions on Windows this should
	  fix #309757

Wed Jul 20 14:45:39 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: an optimization of the char data inner loop,
	  can gain up to 10% in pure SAX2 parsing speed
	* xmlschemas.c: applied patch from Kupriyanov Anatolij fixing
	  a bug in XML Schemas facet comparison #310893

Tue Jul 19 17:27:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: fixed the error reporting for
	  not transitions
	* result/schemas/any5_0_0* result/schemas/any5_0_2*
	  result/schemas/any5_1_0*: fixed output

Tue Jul 19 15:34:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: fixing
	  bug #172215 about foreign namespaces by adding support for
	  negated string transitions. Error messages still need to be
	  improved.
	* test/schemas/any5* result/schemas/any5*: adding regression
	  tests for this.

Tue Jul 19 12:33:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Alexander Pohoyda fixing xmlGetNodePath
	  on namespaced attributes #310417.

Mon Jul 18 23:01:15 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.html doc/xmllint.xml: --nonet was
	  ducplicated

Mon Jul 18 20:49:28 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed xsd:all when used in conjunction with
	  substitution groups
	* test/schemas/allsg_* result/schemas/allsg_*: adding specific
	  regression tests, strangely missing from NIST/Sun/Microsoft
	  testsuites

Sun Jul 17 07:11:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed bug #307508, a bad automata was built but
	  this showed as an indeterminist result

Thu Jul 14 17:53:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: found the last bug raised by NIST tests in
	  comparing base64 strings, result from runsuite:
	  ## NIST test suite for Schemas version NIST2004-01-14
	  Ran 23170 tests (3953 schemata), no errors

Thu Jul 14 14:57:36 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testRegexp.c: fixed where xmlMemoryDump() should be called.
	* xmlregexp.c: fixed handling of {0}, \n, \r and \t, two bugs
	  affecting NIST regression tests

Thu Jul 14 11:30:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied a patch from Gerrit P. Haase to add
	  module support on cygwin

Thu Jul 14 10:56:42 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed a potential buffer overrun error introduced
	  on last commit to htmlParseScript() c.f. #310229

Thu Jul 14 23:48:17 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: Changed the behaviour of xmlXPathEqualNodeSetFloat to
	  return TRUE if a nodeset with a numeric value of NaN is compared
	  for inequality with any numeric value (bug 309914).
	  
Thu Jul 14 01:03:03 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* error.c relaxng.c xmlreader.c xmlschemas.c include/libxml/relaxng.h
	  include/libxml/xmlschemas.h: applied patch from Marcus Boerger
	  to route relaxng and schemas error messages when using the reader
	  through the structured interface if activated.
	* elfgcchack.h doc/* testapi.c: rebuilt since this add  new APIs
	  to test.

Wed Jul 13 18:35:47 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied UTF-8 script parsing bug #310229 fix from
	  Jiri Netolicky 
	* result/HTML/script2.html* test/HTML/script2.html: added the test
	  case from the regression suite

Tue Jul 12 17:08:11 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: fixed bug #310105 with http_proxy environments with
	  patch provided by Peter Breitenlohner

Mon Jul 11 00:28:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am NEWS configure.in doc/*: preparing release 2.6.20 
	* xmllint.c: removed a compilation problem

Sun Jul 10 23:33:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am README README.tests Makefile.tests Makefile.am:
	  preparing to make testsuite releases along with code source releases
	* gentest.py testapi.c: fixed a couple of problem introduced by
	  the new Schemas support for Readers
	* xpath.c: fixed the XPath attribute:: bug #309580, #309864 in a crude
	  but simple way.
	* xmlschemas.c include/libxml/tree.h: fixed a couple of problems
	  raised by the doc builder.
	* doc/*: made rebuild

Sun Jul 10 21:51:16 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed a bug introduced on last commit

Sun Jul 10 21:00:54 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.html doc/xmllint.xml: fixed a typo
	  pointed by Jeroen Ruigrok
	* include/libxml/xmlreader.h include/libxml/xmlschemas.h: increased
	  the APIs for xmlReader schemas validation support
	* xmllint.c xmlreader.c xmlschemas.c: xmlReader schemas validation
	  implementation and testing as xmllint --stream --schema ...

Sun Jul 10 16:11:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlwin32version.h.in: try to avoid conflicts.

Sat Jul  9 19:29:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix for #309761 from Dylan Shell  
	* xmlschemas.c include/libxml/xmlschemas.h: added xmlSchemaSAXPlug
	  and xmlSchemaSAXUnplug generic APIs for SAX Schemas validation.
	* xmllint.c: couple of fixes plus added descriptions for --sax and
	  --sax1

Fri Jul  8 23:35:00 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added c-props-correct constraint to check
	  for equal cardinality of keyref/key.
	* include/libxml/xmlerror.h: Added an error code.

Fri Jul  8 21:56:04 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Fixed evaluation of attributes. Actually only
	  attribute at the first level were evaluated (e.g. "@attr");
	  expression like "foo/@attr" always failed.

Fri Jul  8 20:04:29 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: tiny fix in xmlSchemaValidateStream() if a
	  user-provided SAX handler is given.

Fri Jul  8 19:25:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix some potential leaks in error cases.
	* xmllint.c: added --sax, to allow testing of --schemas --sax and
	  various other combinations.
	* xmlschemas.c: fix a couple of tiny problems in
	  xmlSchemaValidateStream()

Fri Jul  8 18:34:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
	
	* xmlschemas.c: Changed xmlSchemaValidateFile() to use
	  xmlSchemaValidateStream() internally.

Fri Jul  8 17:02:14 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* test/relaxng/docbook_0.xml: added the missing entity to the
	  document internal subset to avoid errors if the DocBook catalogs
	  are not there
	* xmlschemas.c: first cut at implementing xmlSchemaValidateStream()
	  untested yet

Wed Jul  6 15:45:48 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem with free on dupl attribute in
	  dtd (bug309637).
	* test/errors/attr3.xml, result/errors/attr3.*: added
	  regression test for this

Wed Jul  6 13:11:35 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* win32/Makefile.msvc: try again to fix file format for Windows

Wed Jul  6 12:20:13 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* win32/Makefile.msvc: removed spurious ^M
	* runtest.c: added check for option O_BINARY
	* test/schemas/bug309338*, result/schemas/bug309338*: changed
	  sticky tag to 'binary'

Wed Jul  6 10:38:02 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* debugXML.c: excluded content string check for XML_ELEMENT_DECL
	  in xmlCtxtGenericNodeCheck
	* runtest.c: changed "open" calls to include O_BINARY for Windows

Wed Jul  6 17:14:03 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #166777 (and #169838), it was an heuristic
	  in areBlanks which failed.
	* result/winblanks.xml* result/noent/winblanks.xml test/winblanks.xml:
	  added the input file to the regression tests

Wed Jul  6 13:40:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Fixed bug #309338, reported by Kupriyanov
	  Anotolij.
	* test/schemas/bug309338* result/schemas/bug309338*:
	  Added a regression test for the above bug.

Tue Jul  5 16:03:05 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: first steps toward a testsuite dist
	* SAX2.c include/libxml/xmlerror.h: fixed bug #307870

Tue Jul  5 12:38:36 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* runsuite.c runtest.c: Tiny portability adjustment for win.
	* win32/Makefile.*: Added runtest.exe and runsuite.exe to
	  be created.

Mon Jul  4 17:44:26 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: first stb at unimplemnted detection
	* runtest.c: fixing Windows code

Mon Jul  4 17:19:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: fix on schemas error
	* runtest.c: portability glob() on Windows

Mon Jul  4 16:23:54 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c runtest.c: cleanups, logfile and portability
	* xmllint.c: fixed a memory leak

Mon Jul  4 13:11:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug failing to detect UTF-8 violations in
	  CData in push mode.
	* result/errors/cdata.xml* test/errors/cdata.xml: added the test
	  to the regressions

Mon Jul  4 11:26:57 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added enhancement for #309057 in xmllint shell

Mon Jul  4 00:58:44 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from James Bursa fixing an html parsing
	  bug in push mode
	* result/HTML/repeat.html* test/HTML/repeat.html: added the test to the
	  regression suite

Sun Jul  3 23:42:31 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testapi.c tree.c: fixing a leak detected by testapi in 
	  xmlDOMWrapAdoptNode, and fixing another side effect in testapi
	  seems to pass tests fine now.
	* include/libxml/parser.h parser.c: xmlStopParser() is no more limited
	  to push mode
	* error.c: remove a warning
	* runtest.c xmllint.c: avoid compilation errors if only some parts
	  of the library are compiled in.

Mon Jul  4 00:39:35 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: fix a problem with previous patch to
	  testapi.c

Sun Jul  3 22:59:28 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c runtest.c tree.c: fixing compilations when
	  disabling parts of the library at configure time.

Sun Jul  3 18:17:58 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fix bug raised by zamez on IRC
	* testapi.c: regenerated, seems to pop-up leaks in new tree functions
	* tree.c: added comments missing.
	* doc/*: regenerated

Sun Jul  3 18:06:55 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testapi.c runsuite.c runtest.c: fixing #307823 and a couple of
	  assorted bugs
	* python/generator.py python/libxml2-python-api.xml: fixed 
	  conditionals in generator too
	* doc/apibuild.py doc/libxml2-api.xml doc/* elfgcchack.h: some
	  cleanups too and rebuilt

Sun Jul  3 16:42:00 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fixed bug #307503 misplaced #ifdef

Sun Jul  3 16:34:47 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: expanded test
	* xmlregexp.c: found and fixed the leak exposed by Microsoft regtests

Sat Jul  2 23:38:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: a bit of progresses on xstc

Sat Jul  2 09:30:13 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runsuite.c: completed the simple checks for Relax-NG suites
	  back to the same 11 errors as in the Python runs.

Thu Jun 30 15:01:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* runtest.c: complete, checking on other platforms is needed
	* README: updated 
	* debugXML.c: fix a bug raised by bill on IRC
	* relaxng.c: fix a leak in weird circumstances
	* runsuite.c Makefile.am: standalone test tool agaisnt
	  the regression suites, work in progress

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

	* runtest.c: adding URI tests

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

	* runtest.c: adding xml:id

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

	* runtest.c: finishing XPath, adding XPointer

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

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

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

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

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

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

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

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

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

	* runtest.c: added most HTML tests

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

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

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

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

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

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

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

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

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

	* runtest.c: continue to increase the tests

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

	* runtest.c: continue to increase the tests

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

	* runtest.c: continue to increase the tests

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

	* include/libxml/valid.h valid.c: avoid name glob in agruments as
	  it matches the glob() routine.
	* runtest.c Makefile.am: first steps toward a C regression test
	  framework.

Sat Jun 25 01:37:22 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* configure.in: fixed a problem with the detection of
	  ss_family for ipV6, as reported on the mailing list by
	  Doug Orleans.

Tue Jun 21 10:44:34 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/empty-value* result/schemas/empty-value*:
	  Added regression tests (from Dhyanesh).

Tue Jun 21 10:35:43 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed NULL values to be validated as empty
	  string values (reported by Dhyanesh to the mailing list).
	  Adjusted text concatenation of mixed content.

Mon Jun 20 18:11:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c valid.c: applied patch from Rob Richards for removal
	  of ID (and xml:id)
	* xmlreader.c: applied patch from James Wert implementing 
	  xmlTextReaderReadInnerXml and xmlTextReaderReadOuterXml

Thu Jun 16 14:38:22 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed SAX2 validation: grow of internal
	  namespace list, appending of element character content.
	* xstc/xstc.py: Added "--sax" option for SAX2 validation.

Wed Jun 15 15:34:52 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Added missing function descriptions.

Wed Jun 15 15:26:14 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: if sax1 is used and input is a file use the old
	  API xmlParseFile()
	* xmlschemas.c: cleanups
	* doc/* testapi.c elfgcchack.h: rebuilt to add python bindings
	  for the new functions in Schemas.

Wed Jun 15 14:50:48 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlschemas.h: Added
	  xmlSchemaValidateFile() to the public API. This will use
	  SAX2-driven validation.

Wed Jun 15 11:11:38 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/bug306806_1_0 result/schemas/bug306806_1_0.err:
	  Added schema test results (Tom Browder, bug #306806).

Wed Jun 15 11:08:34 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug306806_1.xsd test/schemas/bug306806_0.xml:
	  Added schema tests submitted by Tom Browder (bug #306806).

Tue Jun 14 15:03:22 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* pattern.c: adjusted last change to xmlCompilePathPattern,
	  fixed one compilation warning

Tue Jun 14 21:19:16 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Some changes/fixes to the streaming evaluation.
	* xmlschemas.c: A bit of support for parsing the schema for
	  schema. Fixed attribute derivation when the use is
	  "prohibited" and was "optional". Fixed an attribute construction
	  bug, a left-over from the time, where <complexContent>,
	  <extension>, etc. where created as structs.

Tue Jun 14 12:35:12 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* libxml-2.0.pc.in: removed a redundant include path

Mon Jun 13 14:58:33 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/Makefile.am: Some more adjustments.

Mon Jun 13 14:35:59 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/Makefile.am: Changed test extraction process, since some
	  boxes don't know about "tar --strip-path".

Mon Jun 13 13:39:43 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a bug exposed by Rob Richards in the mailing-list
	* result//compare0* test//compare0*: added the regression test in
	  the suite as this went unnoticed !

Wed Jun  9 11:07:42 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* pattern.c, xpath.c, include/libxml/pattern.h: Further
	  enhancement for XPath streaming, consolidated with
	  schemas usage of pattern.c.  Added a new enum
	  xmlPatternFlags.
	* doc/*, testapi.c, elfgcchack.h: updated to reflect new
	  enum.
	* test/XPath/tests/mixedpat, test/XPath/docs/mixed,
	  result/XPath/mixedpat: added regression test for problems
	  reported in bug306348

Thu Jun  9 16:51:31 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Changed non-prefixed QNames to be bound to a
	  default namespace if existent.

Thu Jun  9 15:11:38 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Fixed a bug which I invented: hexBinary's string
	  values were not duplicated corrently when creating a computed value
	  in xmlSchemaValAtomicType.

Thu Jun  9 13:20:57 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c result/schemas/include1_0_0.err:
	  Fixed an attribute fixed/default value constraint error.

Thu Jun  9 12:51:23 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/*: Adapted regression test results.

Thu Jun  9 12:22:45 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlschemastypes.c include/libxml/schemasInternals.h
	  include/libxml/xmlschemastypes.h: Changed the validation process
	  to be able to work in streaming mode. Some datatype fixes,
	  especially for list and union types. Due to the changes the
	  error report output has changed in most cases. Initial migration to
	  functions usable by both, the parser and the validator. This should
	  ease a yet-to-come XS construction API in the long term as well.

Thu Jun  9 10:16:11 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Malcolm Rowe to avoid namespace
	  troubles on rollback parsing of elements start #304761
	* test/nsclean.xml result/noent/nsclean.xml result/nsclean.xml*:
	  added it to the regression tests.

Thu Jun  9 00:33:50 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: applied patch from Rob Richards
	  for xml:space and xml:lang handling with SAX2 api.

Wed Jun  8 19:41:38 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* globals.c: applied patch from Morten Welinder, closing bug #306901
	  on compiling subsets of the library

Wed Jun  8 19:11:42 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/Makefile.am xstc.py xstc-to-python.xsl: Adapted the
	  XS tests to use the new release of tests and test-definitions.

2005-06-07  Aleksey Sanin <aleksey@aleksey.com>

	* c14n.c: fix rendering of attributes when parent node
	is not in the node set

2005-06-06  Aleksey Sanin <aleksey@aleksey.com>

	* c14n.c: fixed xml attributes processing bug in exc c14n
	* xmllint.c: added --exc-c14n command line option

Mon Jun  6 06:43:33 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c, pattern.c: Enhanced xmlXPathRunStreamEval, fixed
	  handling of depth/level for cases like union operator
	  (bug #306348 reported by Bob Stayton).  Also enhanced
	  several comments throughout pattern.c.
	* doc/apibuild.py: fixed problem in handling of
	  'signed' declaration.  Rebuilt the docs.
	  
Tue May 31 20:35:27 PDT 2005 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: Enhanced handling of xml:base for included
	  elements, fixing bugs 169209 and 302353.

Wed May 25 18:59:53 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed facet errors to be channelled back for
	  union type members; facet-validation will stop now on the
	  first error. Reported by GUY Fabrice to the mailing-list.
	* xmlschemastypes.c: Changed to ignore lengh-related facet
	  validation for QNames and NOTATIONs as proposed by the
	  schema people.
	* test/schemas/union2* result/schemas/union2*: Added
	  regression tests for union types (by GUY Fabrice).

Fri May 20 20:48:08 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: applied patch from Mark Vakoc fixing saving of
	  CDATA with NULL content.

Thu May 12 15:14:26 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Changed the VALID_TZO macro to restrict
	  the timezone to -840 to 840.

Thu May 12 15:05:11 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Applied patch from Steve Nairn (bug #303670)
	  for "signed int" of the date-time timezone field. Silenced
	  a warning.

Wed May 11 20:04:09 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch for replaceNode from Brent Hendricks

Tue May 10 17:27:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed bug #303682 of a leak reported by Malcolm Rowe

Tue May 10 11:50:16 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* testapi.c: applied patch from Steve Nairn tof fix the compilation
	  problem exposed in bug #303640

Tue May 10 11:11:26 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug303566_1* result/schemas/bug303566_1_1*:
	  Added regression a test provided by Heiko Oberdiek (bug #303566).

Mon May  9 17:56:58 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c: Changed the XPath "." to resolve only on the first
	  level for XML Schema IDCs (bug #303566 reported by Heiko Oberdiek).
	  This should not affect pattern-like resolution on every level.

Sun May  8 13:35:39 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: fixed #169630 segfault in xmlMemDisplay

Fri May  6 13:40:03 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: fixing bug #303068 increasing the nanoftp buffer.
	* doc/apibuild.py: fixed __attribute() parsing problem
	* doc/* testapi.c: regenerated the descriptions and docs.

Wed May  4 11:16:00 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in threads.c: on linux/gcc use weak definitions
	  to avoid linking with pthread library on non-threaded environments.
	* xpath.c: applied patch from Mark Vakoc w.r.t. a buggy namespace
	  list allocation.

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

	* parser.c: Fixed a test for duplicate attributes: Non-prefixed
	  attributes were treated as being bound to the default namespace.

Tue Apr 19 17:51:32 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Fixed date-time related validation
	  (reported by David Crossley, bug #300576).

Tue Apr 19 16:55:40 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c xmlregexp.c: Removed 5 unnecessary
	  dereferences (reported by Andriy, bug #301074).

Tue Apr 19 22:33:18 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: Added some code to avoid integer overflow for
	  ceil, floor and round functions (bug 301162)

Tue Apr 19 13:21:54 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed workaround for bug #172215, since it
	  does more harm in some scenarios. Added some of the
	  "Particle Restriction OK" constraints - not yet enabled.	  

Mon Apr 18 13:02:55 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* result/schemas/changelog093*: Added test results.

Mon Apr 18 12:42:14 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added output of canonical values in
	  identity-constraint error messages.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Added xmlSchemaGetCanonValueWhtsp() to the API.
	  Further enhancement of the canonical value
	  conversion.
	* test/schemas/changelog093_0.*: Added test with an XSD
	  submitted by Randy J. Ray.

Fri Apr 15 09:33:21 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* valid.c: Applied Daniel's fix for memory leak in dtd
	  prefix (bug 300550).
	* xpath.c: minor change to comment only

Thu Apr 14 20:52:41 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: added the call to the breakpoint routine
	  when a monitored block is reallocated or freed

Wed Apr 13 05:55:51 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: applied patch from Aron Stansvik for bug #172525
	  about HTTP query string parameter being lost

Tue Apr 12 04:03:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: applied patch from Brent Hendricks
	  adding namespace removal at the python level #300209
	* python/tests/Makefile.am python/tests/nsdel.py: added the regression
	  test

Sun Apr 10 09:03:22 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed several places where memory cleanup was not
	  properly done after an error was detected (problem was
	  reported on the mailing list by Pawel Palucha)

Fri Apr  8 21:58:04 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added substitution group constraints; changed
	  the build of the pre-computed substitution groups. Channeled
	  errors during xsi assembling of schemas to the validation
	  context. Fixed a big memory leak, which occured when using
	  IDCs: the precomputed value of attributes was not freed if
	  the attribute did not resolve to an IDC field (discovered
	  with the help of Randy J. Ray's schema, posted to the
	  xmlschema-dev maling list).

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

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

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

	* win32/Makefile.*: make install cleanup

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

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

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

	* .cvsignore: added Eclipse project files to ignore list

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* doc/apibuild.py doc/elfgcchack.xsl: revamped the elfgcchack.h 
	  format to cope with gcc4 change of aliasing allowed scopes, had
	  to add extra informations to doc/libxml2-api.xml to separate
	  the header from the c module source.
	* *.c: updated all c library files to add a #define bottom_xxx
	  and reimport elfgcchack.h thereafter, and a bit of cleanups.
	* doc//* testapi.c: regenerated when rebuilding the API

Thu Mar 31 17:20:32 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: fixed bug reported by Petr Pajas, in the absence of
	  encoding UTF-8 should really be assumed. This may break if 
	  the HTTP headers indicates for example ISO-8859-1 since this
	  then becomes a well formedness error.

Thu Mar 31 16:57:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed #172260 redundant assignment.
	* parser.c include/libxml/parser.h: fixed xmlSAXParseDoc() and 
	  xmlParseDoc() signatures #172257.

Thu Mar 31 16:11:10 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix potential crash if ctxt->sax->ignorableWhitespace
	  is NULL as reported by bug #172255

Thu Mar 31 15:36:52 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a problem in Relax-NG validation #159968
	* test/relaxng/list.* result/relaxng/list_*: added the test
	  to the regression suite

Thu Mar 31 13:06:02 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fixed bug #168504

Thu Mar 31 12:22:54 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in nanoftp.c nanohttp.c xmllint.c
	  macos/src/config-mac.h: use XML_SOCKLEN_T instead of SOCKLEN_T
	  since apparently IBM can't avoid breaking common defines #166922

Thu Mar 31 10:41:45 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fix unitinialized variable in not frequently used
	  code bug #172182

Thu Mar 31 00:45:18 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.py: another patch from Brent
	  Hendricks to add new handlers with the various validity contexts
	* python/tests/Makefile.am python/tests/validDTD.py
	  python/tests/validRNG.py python/tests/validSchemas.py: also 
	  added the regression tests he provided

Wed Mar 30 09:39:27 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c: applied patch from Brent
	  Hendricks to avoid leak in python bindings when using schemas
	  error handlers.

Tue Mar 29 22:29:28 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixing bug 168196, <a name=""> must be URI escaped too

Sun Mar 27 13:24:24 CEST 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: cleanup of the Prop related functions and xmlNewNodeEatName
	  by Rob Richards

Thu Mar 24 19:01:22 PST 2005 William Brack <wbrack@mmm.com.hk>

	* gentest.py, testapi.c: fixed problem with 'minimal library'
	  compilation (LIBXML_PATTERN_ENABLED not properly checked) reported
	  by Greg Morgan

Thu Mar 24 12:01:30 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed call to a facet error report: the type of
	  the error was wrong, resulting in a segfault (bug #171220, reported
	  by GUY Fabrice).

Mon Mar 21 22:58:37 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Removed a stupid bug in xmlSchemaValidateAttributes,
	  failing to build a linked list correctly (bug #169898, reported
	  by bing song, hmm...).

Mon Mar 21 21:09:07 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a segfault, which occured during bubbling
	  of IDC nodes (bug #170779 and #170778, reported by GUY Fabrice):
	  a variable was missed to be reset in a loop. Deactivated bubbling,
	  if not referenced by a keyref.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* xmlschemastypes.c: enhanced the parsing of XML_SCHEMAS_DECIMAL
	  and much of the routine xmlSchemaCompareDecimals.  The
	  changes were necessary to fix a problem reported on the
	  mailing list by John Hockaday.

Fri Mar 11 13:22:52 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: The schema parser will stop if components could
	  not be resolved. This is not conforming to the spec but for now
	  will avoid internal errors during type fixup and content model
	  creation. Restructured inclusion/import of schemata: this avoids
	  duplicate, self and circular inclusion. Chameleon includes are
	  still workarounded. Added restriction to disallow references to
	  non-imported namespaces. Corrected parsing of <group>.
	* result/schemas/bug167754_0_0*: Added a missing test result.

Thu Mar 10 16:02:17 CET 2005 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/encoding.html: Enriched encoding.html with more
	  link and foreword warning to avoid problem with ignorant
	  programmers, c.f #169721

Thu Mar 10 15:01:34 CET 2005 Daniel Veillard <daniel@veillard.com>

	* python/tests/Makefile.am python/tests/readernext.py: added
	  a regression test from Rob Richards for the previous bug

Thu Mar 10 13:22:36 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: applied fix for xmlTextReaderNext() bug from
	  Rob Richards

Thu Mar 10 11:35:57 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c: second patch from Rick Jones, portability fix for
	  HP-UX
	* doc/examples/xpath1.c doc/examples/xpath2.c: first fix from Rick Jones
	  to avoid warnings.

Thu Mar 10 10:20:23 CET 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/hash.h libxml.h libxml.spec.in: some gcc4 portability
	  patches, including a serious aliasing bug exposed in s390 
	  when trying to convert data pointer to code pointer.

Mon Mar  7 18:34:00 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Tiny restructuring of the validation start-up
	  functions. Added cleanup of the validation context at the
	  end of validation. This takes care of the validation context
	  being reused.

Mon Mar  7 12:12:01 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemastypes.c: Tiny changes in the comparison functions
	  I forgot to commit last time.

Fri Mar  4 22:51:42 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added IDC validation of anySimpleType attribute
	  values; anyway the IDC key comparison is restricted to
	  anySimpleType <--> string based types. For other types we
	  would possibly need the canonical lexical representation of
	  them; this sounds not performant, since we would need to
	  build such a representation each time we want to compare against
	  anySimpleType. TODO: think about buffering the canonical values
	  somewhere. Fixed error reports for default attributes to work
	  without a node being specified. This all and the enabling of IDC
	  validation fixes bug #165346 (reported by Benoit Gr?goire - could
	  not read his last name correctly from bugzilla).

Fri Mar  4 18:57:44 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Enabled IDC parsing and validation.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h: 
	  Added xmlSchemaCopyValue to the API; this was done due to
	  validation of default attributes against IDCs: since IDC keys
	  consume the precomputed value, one needs a copy.
	* pattern.c: Enabled IDC support; this is currently done
	  via calling xmlPatterncompile with a flag arg of 1.

Wed Mar  2 11:45:18 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/examples/Makefile.am python/tests/Makefile.am
	  xstc/Makefile.am: try to fix a problem with valgrind.
	* python/generator.py python/libxml.c python/tests/Makefile.am
	  python/tests/tstmem.py: applied memory leak fix from Brent Hendricks
	  c.f. bug #165349

Mon Feb 28 11:18:24 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* tree.c: Changed xmlSearchNsByHref to call xmlNsInScope with
	  the prefix instead of the namespace name.
	* test/schemas/annot-err_0.xsd test/schemas/element-err_0.xsd:
	  Adapted invalid values of the "id" attribute, since they are
	  validated now.

Fri Feb 25 08:31:16 CET 2005 Daniel Veillard <daniel@veillard.com>

	* threads.c: new version with fixes from Rob Richards

Thu Feb 24 16:37:51 CET 2005 Daniel Veillard <daniel@veillard.com>

	* threads.c: applied patch from Rich Salz for multithreading on
	  Windows.

Wed Feb 23 15:04:46 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied a patch from Rob Richards fixing a couple
	  of bugs in the writer

Mon Feb 21 21:51:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xmlsave.c: fixed problem when XMLLINT_INDENT was empty (bug 168033).
	* xpath.c: fixed compilation warning, no change to logic.
	* xmlschemastypes.c: fixed compilation warning, no change to logic.

Mon Feb 21 14:48:27 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Rob Richards to fix a problem with
	  xmlTextWriterStartAttributeNS

Mon Feb 21 11:41:41 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xpath.c: fixed remaining known bugs in the XPath streaming,
	  and switched XPath to use it by default when possible

Sat Feb 19 19:25:14 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: a bit of cleanup
	* elfgcchack.h testapi.c doc/*: rebuilt the API the tests and
	  the documentation as a result.

Fri Feb 18 20:34:03 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: applied patch from
	  Aron Stansvik to add xmlTextReaderByteConsumed()
	* testReader.c: added a test option
	* xmlschemastypes.c: fix a lack of pointer checking in APIs

Fri Feb 18 12:41:10 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/bug167754_0*: Added the regression test of Frans
	  Englich for bug #167754.

Fri Feb 18 12:31:49 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Started support for IDC resolution to default
	  attributes. If building the content model for <all>: ensured
	  to put element declarations and not the particles into the
	  content model automaton (this was bug #167754, reported by
	  Frans Englich).

Thu Feb 17 22:31:58 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* pattern.c pattern.h: Some experimental addition for parsing
	  of expressions and streamable validation.
	  Added xmlStreamPushAttr to the API.

Thu Feb 17 19:57:35 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added validation for the attribute "id" in the
	  schemata; doing this needed error report fixes for notations,
	  facets and group. Changed NOTATION validation to work with the
	  declared NOTATIONs in the schema; this does have no impact on
	  the validation via the relaxng module.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Added xmlSchemaNewNOTATIONValue to the API to be able to do
	  the NOTATION validation described above.
	* test/schemas/element-err_0.xsd test/schemas/annot-err_0.xsd:
	  Fixed the values of the "id" attributes, which were not validated
	  previously.  

Thu Feb 17 12:03:46 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed comparison for default/fixed attribute
	  values, if the type was 'xsd:string'. Changed the comparison
	  for IDCs to use the whitespace aware comparison function.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h:
	  Added xmlSchemaGetCanonValue, xmlSchemaNewStringValue and
	  xmlSchemaCompareValuesWhtsp to the API. Added functions
	  to compare strings with whitespace combinations of "preserve",
	  "replace" and "collapse".

Wed Feb 16 13:24:35 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Further work on IDCs, especially evaluation for
	  attribute nodes.

Wed Feb 16 01:19:27 CET 2005 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fix the comment to describe the real return values
	* pattern.c xpath.c include/libxml/pattern.h: lot of work on
	  the patterns, pluggin in the XPath default evaluation, but
	  disabled right now because it's not yet good enough for XSLT.
	  pattern.h streaming API are likely to be changed to handle
	  relative and absolute paths in the same expression.

Tue Feb 15 15:33:32 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Added IDC evaluation for attribute nodes.
	  Made 'nil'ed elements work. Added a specific error message
	  for 'strict' attribute wildcards.
	* include/libxml/xmlerror.h: Added an error code for
	  wildcards.
	* result/schemas/anyAttr-processContents-err1_0_0.err: Adapted.  

Sun Feb 13 16:15:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	This change started out as a simple desire to speed up the
	execution time of testapi.c, which was being delayed by
	nameserver requests for non-existent URL's.  From there it
	just sort of grew, and grew....
	* nanohttp.c, nanoftp.c: changed the processing of URL's
	  to use the uri.c routines instead of custom code.
	* include/libxml/xmlerror.h: added code XML_FTP_URL_SYNTAX
	* uri.c: added accepting ipV6 addresses, in accordance with
	  RFC's 2732 and 2373 (TODO: allow ipV4 within ipV6)
	* gentest.py, testapi.c: fixed a few problems with the
	  testing of the nanoftp and nanohttp routines.
	* include/libxml/xmlversion.h: minor change to fix a
	  warning on the docs generation
	* regenerated the docs

Sat Feb 12 09:07:11 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed xmlXIncludeParseFile to prevent
	  overwriting XML_COMPLETE_ATTRS when setting pctxt->loadsubset
	  (bug 166199)
	* Makefile.am, python/tests/Makefile.am, xstc/Makefile.am: added
	  code to add $(top_builddir)/.libs to LD_LIBRARY_PATH whenever
	  PYTHONPATH is set, to assure new libxml2 routines are used.

Fri Feb 11 22:20:41 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem when no initial "chunk" was
	  given to xmlCreatePushParser (bug 162613)

Fri Feb 11 18:37:22 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* dict.c: fixed compilation warning
	* parser.c: changed xmlWarningMsg so ctxt->errNo is not set
	* xmllint.c: changed to return non-zero status if error
	  on xinclude processing
	* xmlsave.c: minor deletion of a redundant condition statement
	
Wed Feb  9 17:47:40 CET 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch to xmlSetNsProp from Mike Hommey

Sun Feb  6 00:17:57 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmllint.c: fixed implementation for |
	* test/pattern/conj.* result/pattern/conj: added a specific regression
	  test

Sat Feb  5 18:36:56 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: first implementation for | support

Sat Feb  5 14:58:46 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: fixed the namespaces support
	* tree.c: fixed xmlGetNodePath when namespaces are used
	* result/pattern/multiple result/pattern/namespaces
	  test/pattern/multiple.* test/pattern/namespaces.*: added
	  more regression tests

Fri Feb  4 18:26:43 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed one internal function
	* doc/Makefile.am doc/wiki.xsl: applied patch from Joel Reed
	* testapi.c doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated

Fri Feb  4 00:25:43 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: use the walker to test the patterns instead of
	  the normal reader
	* pattern.c xmllint.c: bug fixes in the train including fixing the
	  stupid build break.

Tue Feb  1 18:15:52 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: more bug fixes for the XPath streaming code.

Mon Jan 31 17:59:24 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Integrated the streaming pattern from the
	  pattern module. Fixed some IDC code bugs. Changed
	  fallback for attribute declaration addition to work like for
	  element declarations.	

Mon Jan 31 01:27:22 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmllint.c: bugfixes around the streaming patterns

Sun Jan 30 23:35:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in result/pattern/simple 
	  test/pattern/simple.*: added first test for the patterns
	* pattern.c xmllint.c: a few fixes

Sun Jan 30 19:27:23 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c include/libxml/pattern.h xmllint.c: added a 
	  streaming pattern detector for a subset of XPath, should
	  help Kasimier for identity constraints
	* python/generator.py: applied Stéphane Bidoul patch to find
	  paths without breaking.

Fri Jan 28 18:53:40 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed an untested pointer dereference and a & vs &&

Fri Jan 28 18:37:18 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: implementation of xmlTextReaderReadString by
	  Bjorn Reese

Fri Jan 28 16:51:47 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Corrected an ambigious symbol-space for
	  local attribute declarations. IFDEFed more IDC code to
	  surpress compiler warnings.

Fri Jan 28 00:57:04 CET 2005 Daniel Veillard <daniel@veillard.com>

	* bakefile/Readme.txt bakefile/Bakefiles.bkgen bakefile/libxml2.bkl:
	  files for the Bakefile generator for Makefiles from Francesco
	  Montorsi
	* win32/configure.js: fixes for Windows compilation with non-default
	  flags by Joel Reed

Thu Jan 27 18:23:50 CET 2005 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed xmlCopyDoc to also copy the doc->URL as pointed
	  by Martijn Faassen

Thu Jan 27 13:39:04 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h:
	  Added an initial skeleton for indentity-constraints. This is all
	  defined out, since not complete, plus it needs support from other
	  modules.
	  Added machanism to store element information for the
	  ancestor-or-self axis; this is needed for identity-constraints
	  and should be helpfull for a future streamable validation.
	* include/libxml/xmlerror.h: Added an error code for
	  identity-constraints.

Wed Jan 26 01:03:37 CET 2005 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: had to fix generation and rebuild.
	* valid.c: the testapi found a bug in the last code of course !

Wed Jan 26 00:43:05 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am testapi.c doc/Makefile.am: fixing the way testapi.c
	  is generated, fixes bug #161386
	* dict.c: fix a comment typo
	* elfgcchack.h doc/*: regenerated

Tue Jan 25 22:39:33 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: found and fixed 2 problems in the internal subset scanning
	  code affecting the push parser (and the reader), fixes #165126
	* test/intsubset2.xml result//intsubset2.xml*: added the test case
	  to the regression tests.

Tue Jan 25 01:20:11 CET 2005 Daniel Veillard <daniel@veillard.com>

	* testdso.c xmlregexp.c: warning patches from Peter Breitenlohner
	* include/libxml/valid.h valid.c parser.c: serious DTD parsing
	  speedups, start to deprecate 3 ElementDef related entry point
	  and replace them with better ones.

Mon Jan 24 00:47:41 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more hash dictionary interning changes

Sun Jan 23 23:54:39 CET 2005 Daniel Veillard <daniel@veillard.com>

	* hash.c include/libxml/hash.h: added xmlHashCreateDict where
	  the hash reuses the dictionnary for internal strings
	* entities.c valid.c parser.c: reuse that new API, leads to a decent
	  speedup when parsing for example DocBook documents.

Sun Jan 23 21:14:20 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: small speedup in skipping blanks characters
	* entities.c: interning the entities strings 

Sun Jan 23 18:35:00 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: boosting common commnent parsing code, it was really
	  slow.
	* test/comment[3-5].xml result//comment[3-5].xml*: added sprecific
	  regression tests

Sun Jan 23 01:00:09 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: small optimization back.

Sat Jan 22 00:40:31 CET 2005 Daniel Veillard <daniel@veillard.com>

	* dict.c parser.c include/libxml/dict.h: a single lock version
	  mostly avoid the cost penalty of the lock in case of low 
	  parallelism, so applying that version instead.

Fri Jan 21 17:54:06 CET 2005 Daniel Veillard <daniel@veillard.com>

	* dict.c: patch from Gary Coady to fix a race in dict reference
	  counting in multithreaded apps.

Fri Jan 21 16:08:21 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #164556 where non-fatal errors stopped
	  push parsing and xmlreader.
	* Makefile.am: fixup
	* test/errors/webdav.xml result/errors/webdav*: adding regression
	  test for this problem.

Wed Jan 19 17:24:34 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Corrected targetNamespace in
	  xmlSchemaElementDump. Cosmetic changes to the dump output.	

Sun Jan 16 21:00:53 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release of 2.6.17,
	  updated and rebuilt the docs

Sun Jan 16 19:58:36 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: better fix for #151694 not killing c14n regression tests
	* xmlschemastypes.c: fixing bug #157653

Sun Jan 16 19:01:06 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #151694, line should always be set in the
	  elements.

Sun Jan 16 01:04:18 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: trying to fix at least the message from
	  bug #158628
	* include/libxml/xmlsave.h xmlsave.c: added first xmlsave option
	  for format, c.f. bug #159997

Sat Jan 15 18:44:30 CET 2005 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: make __str__ call serialize() on nodes, c.f. 
	  bug #157872

Sat Jan 15 18:18:07 CET 2005 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied patch from Dan McNichol for compilation on AIX

Sat Jan 15 13:35:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #157633 in relaxng choice optimization
	* result/relaxng/choice0* test/relaxng/choice0*: added regression
	  tests about it.
	* doc/*: rebuilt
	* testdso.c: removed a warning due to a missing void in signature.

Thu Jan 13 17:42:55 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* include/libxml/schemasInternals.h xmlschemas.c: 
	  Exposed targetNamespace for simple/complex types, model groups,
	  attribute groups and notations (reported by Michael Hewarth 
	  to the mailing list). Added targetNamespace to xmlSchemaType, 
	  xmlSchemaAttributeGroup and xmlSchemaNotation.
	  Tiny cosmetic change to the content model error report output.
	* result//all_*.err result//any3_0_0.err result//choice_*.err 
	  result//list0_0_1.err result//list0_1_1.err: Adapted output 
	  of regression tests.

Thu Jan 13 13:20:51 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Put the fix of Daniel (from Tue Jan 11 14:41:47 CET)
	  back in, since I missed to update xmlschemas.c before doing
	  the previous commit.
	
Thu Jan 13 12:59:25 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Integrated xmlRegExecErrInfo and xmlRegExecNextValues
	  from xmlregexp.c to report expected elements on content model errors.
	* all_*.err any3_0_0.err choice_*.err list0_0_1.err list0_1_1.err:
	  Adapted output of regression tests.

Thu Jan 13 12:24:09 CET 2005 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in xmlmodule.c: trying to work around
	  the compilation problem on HP-UX

Wed Jan 12 22:03:33 CET 2005 Daniel Veillard <daniel@veillard.com>

	* pattern.c: fixed the fixed size array structure problem reported by
	  Patrick Streule

Wed Jan 12 15:15:02 CET 2005 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h testapi.c doc/libxml2-api.xml doc/*: regenerated
	  the API description, rebuilt, improved navigation in documentation
	  a bit.

Wed Jan 12 14:17:14 CET 2005 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlregexp.h xmlregexp.c: extended xmlRegExecErrInfo()
	  and xmlRegExecNextValues() to return error transition strings too,
	  and sink state detection and handling.

Tue Jan 11 14:41:47 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed bug #163641 when the value passed for
	  an atomic list type is NULL.

Tue Jan 11 10:14:33 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* Makefile.am configure.in: fixed dependency on python 2.3,
	  also small improvement for cygwin (bug 163273)

Sun Jan  9 18:46:32 CET 2005 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: William noticed I forgot to add special
	  support for xmlmodules.c define
	* xmlregexp.c include/libxml/xmlregexp.h: added terminal to
	  xmlRegExecErrInfo() API, adding new xmlRegExecNextValues()
	  entry point and refactored to use both code.

Mon Jan 10 01:02:41 HKT 2006 William Brack <wbrack@mmm.com.hk>

	* doc/xml.html, doc/FAQ.html: added an FAQ under Developer for
	  setting up a "private" library (after some list posts about
	  people having trouble doing it)

Sat Jan  8 23:04:10 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing behaviour for xmlRegExecErrInfo in case of
	  rollback

Fri Jan  7 14:54:51 CET 2005 Daniel Veillard <daniel@veillard.com>

	* TODO: small update
	* xmlregexp.c: trying to add an API to get useful error informations
	  back from a failing regexp context.

Thu Jan  6 17:35:41 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with xmlXPathErr when error number
	  subscript was out of range (bug 163055)

Thu Jan  6 09:57:03 HKT 2005 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed problem with xmlURIEscape when query part was
	  empty (actually fixed xmlURIEscapeStr to return an empty
	  string rather than NULL for empty string input) (bug 163079)
	  
Tue Jan  4 17:08:45 PST 2005 Aleksey Sanin <aleksey@aleksey.com>

	* parser.c, parserInternal.c: fixed "col" calculation for 
          struct _xmlParserInput (based on patch from Rob Richards) 
	* include/libxml/xmlerror.h, error.c: propagated error column
          number in the xmlError structure

Tue Jan  4 22:47:22 CET 2005 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed namespace bug in push mode reported by 
	  Rob Richards
	* test/ns6 result//ns6*: added it to the regression tests
	* xmlmodule.c testModule.c include/libxml/xmlmodule.h:
	  added an extra option argument to module opening and defined
	  a couple of flags to the API.

Tue Jan  4 21:16:05 CET 2005 Daniel Veillard <daniel@veillard.com>

	* xmlmodule.c include/libxml/xmlmodule.h: applied patch from
	  Bjorn Reese, plus some cleanups
	* elfgcchack.h doc/elfgcchack.xsl: fixed the stylesheet to 
	  add the new header
	* doc/* testapi.c: regenerated the API

Tue Jan  4 18:47:19 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: making DSO support an option
	* xmlmodule.c xmlreader.c include/libxml/xmlmodule.h: code
	  and documentation cleanups
	* elfgcchack.h testapi.c doc/*: regenerated the docs and
	  checks for new module
	* test/valid/REC-xml-19980210.xml: fix a small change introduced
	  previously

Tue Jan  4 16:07:52 CET 2005 Daniel Veillard <daniel@veillard.com>

	* Makefile.am config.h.in configure.in error.c libxml-2.0.pc.in
	  testModule.c testdso.c xml2-config.in xmllint.c xmlmodule.c
	  include/libxml/Makefile.am include/libxml/xmlerror.h
	  include/libxml/xmlmodule.h include/libxml/xmlversion.h.in 
	  include/libxml/xmlwin32version.h.in: applied DSO support
	  patch 2 from Joel Reed

Tue Jan  4 15:30:15 CET 2005 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied patch from Marcin Konicki for BeOS

Mon Jan  3 13:57:21 PST 2005 Aleksey Sanin <aleksey@aleksey.com>

	* parser.c: added GetLineNumber and GetColumnNumber functions for xmlReader

Sun Jan  2 17:51:18 HKT 2005 William Brack <wbrack@mmm.com.hk>

	Re-examined the problems of configuring a "minimal" library.
	Synchronized the header files with the library code in order
	to assure that all the various conditionals (LIBXML_xxxx_ENABLED)
	were the same in both.  Modified the API database content to more
	accurately reflect the conditionals.  Enhanced the generation
	of that database.  Although there was no substantial change to
	any of the library code's logic, a large number of files were
	modified to achieve the above, and the configuration script
	was enhanced to do some automatic enabling of features (e.g.
	--with-xinclude forces --with-xpath).  Additionally, all the format
	errors discovered by apibuild.py were corrected.
	* configure.in: enhanced cross-checking of options
	* doc/apibuild.py, doc/elfgcchack.xsl, doc/libxml2-refs.xml,
	  doc/libxml2-api.xml, gentest.py: changed the usage of the
	  <cond> element in module descriptions
	* elfgcchack.h, testapi.c: regenerated with proper conditionals
	* HTMLparser.c, SAX.c, globals.c, tree.c, xmlschemas.c, xpath.c,
	  testSAX.c: cleaned up conditionals
	* include/libxml/[SAX.h, SAX2.h, debugXML.h, encoding.h, entities.h,
	  hash.h, parser.h, parserInternals.h, schemasInternals.h, tree.h,
	  valid.h, xlink.h, xmlIO.h, xmlautomata.h, xmlreader.h, xpath.h]:
	  synchronized the conditionals with the corresponding module code
	* doc/examples/tree2.c, doc/examples/xpath1.c, doc/examples/xpath2.c:
	  added additional conditions required for compilation
	* doc/*.html, doc/html/*.html: rebuilt the docs
	
Sat Dec 25 18:10:02 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parserInternals.c: fixed to skip (if necessary) the BOM for
	  encoding 'utf-16'.  Completes the fix for bug #152286.
	* tree.c, parser.c: minor warning cleanup, no change to logic
	
Fri Dec 24 16:31:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: added most required entires to
	  foreign encoding table, plus some additional logic to
	  assure only the 1st param uses the 't#' format.  Fixes
	  bug #152286, but may still have some other UTF-16 problems.

Thu Dec 23 23:44:08 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* Makefile.am, gentest.py: enhanced for enabling build in
	  a different directory.  Added (optional) param to gentest.py
	  to specify the source directory (bug #155468)
	* doc/Makefile.am: changed destination of NEWS from (top_srcdir)
	  to (top_builddir) (bug #155468)
	* python/Makefile.am, python/generator.py: enhanced for enabling
	  build in a different directory(bug #155468).  Added (optional)
	  param to generator.py to specify the source directory.  Added
	  a new table of functions which have possible "foreign" encodings
	  (e.g. UTF16), and code to use python 't' format instead of
	  'z' format (mostly solving bug #152286, but still need to
	  populate the table).
	  
Tue Dec 21 08:10:44 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/site.xsl, doc/xml.html, plus rebuilt all the html pages
	Change reference to new site for Solaris binaries, fixing bug
	160598


Mon Dec 20 08:02:57 PST 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: reset input->base within xmlStopParser
	* xmlstring.c: removed call to xmlUTF8Strlen from within
	  xmlUTF8Strpos (Bill Moseley pointed out it was not
	  useful)

Fri Dec 17 16:03:41 PST 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: changed xmlErrValidWarning to use ctxt->warning
	  instead of ctxt->error for its reports (bug #160662)

Fri Dec 17 14:52:17 PST 2004 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: modified to allow the ns and nsDefs
	  accessors to return None instead of error when no namespace
	  is present (bug #)

Fri Dec 17 11:40:21 PST 2004 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: changed maintainer-clean dependency with
	  suggestion from Crispin Flowerday (bug #157634)
	* debugXML.c: fixed crash when ATTRIBUTE or DOCUMENT nodes
	  were specified with debugDumpNode (bug #160621)

Fri Dec 10 11:24:41 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed ID deallocation problem based on patch from
	  Steve Shepard fixes bug #160893
	* xmlmemory.c: improving comment.
	* testapi.c: new test for xmlDictExists() is generated.

Wed Dec  1 22:35:37 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* dict.c, xpath.c, include/libxml/hash.h: fixed up some gcc warnings,
	  no change to logic.  New macro XML_CAST_FPTR to circumvent gcc
	  warnings on function pointer <-> object pointer (a hack).

Mon Nov 29 14:07:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a memory leak on errors in some circumstances #159812

Fri Nov 26 23:20:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: added a check within xmlOutputBufferWriteEscape to prevent
	  a dead loop on bad data (bug 159550)

Fri Nov 26 13:09:04 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed strict/lax element wildcards: the children
	  of elements for which a declaration existed were still processed
	  by the wildcard mechanism (reported by philippe ventrillon to the
	  mailing list).
	  Changed the import and include machanism to share dictionaries.

Fri Nov 26 11:44:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c: make sure xmlCtxtReadFile and htmlCtxtReadFile
	  go through the catalog resolution.
	* gentest.py testapi.c: fix a side effect wrning of the change

Wed Nov 24 13:41:52 CET 2004 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h: added xmlDictExists() to the 
	  dictionnary interface.
	* xmlreader.c: applying xmlTextReaderHasAttributes fix for namespaces
	  from Rob Richards

Wed Nov 17 13:54:37 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: tiny enhancement for content model error reports
	  (#157190, #143948). Removed abbreviations: CT, ST and WC 
	  (#157190, reported by Frans  Englich).
	  Initial: no report of local components.
	* result/schemas/all* result/schemas/any3_0_0.err
	  result/schemas/choice*
	  result/schemas/cos-st-restricts-1-2-err_0_0.err
	  result/schemas/derivation-ok-extension-err_0_0.err
	  result/schemas/derivation-ok-extension_0_0.err
	  result/schemas/derivation-ok-restriction-2-1-1_0_0.err
	  result/schemas/derivation-ok-restriction-4-1-err_0_0.err 
	  result/schemas/deter0_0_0.err result/schemas/extension1_0_2.err
	  result/schemas/facet-unionST-err1_0_0.err
	  result/schemas/hexbinary_0_1.err
	  result/schemas/list* result/schemas/restriction-attr1_0_0.err
	  result/schemas/vdv-first4_0_1.err result/schemas/vdv-first4_0_2.err:
	  Adapted output.

Mon Nov 15 13:04:28 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Moved execution of xmlSchemaCheckDefaults to
	  xmlSchemaTypeFixup; this ensures facets of inherited types to be
	  checked prior to facets of derived types - which caused a seg
	  fault otherwise (bug #158216, reported by Frans Englich).

Sun Nov 14 22:23:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* gentest.py, testapi.c: further enhancement, now all
	  compilation warnings have been fixed.
	* xmlschemastypes.c: added NULL check for one function

Fri Nov 12 23:58:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: trivial change (changed CHECK_CONTEXT to CHECK_CTXT
	  on a couple of lines)
	* gentest.py, testapi.c: enhanced to reduce compilation warnings

Fri Nov 12 16:12:48 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Un-commented a TODO in xmlSchemaParseElement.

Fri Nov 12 14:55:36 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Correct symbol space for 'all' and 'choice'.
	* xmlschemastypes.c include/xmlschemastypes.h: Added 'replace' 
	  normalization for 'normalizedString'.  
	  Added xmlSchemaWhiteSpaceReplace to the API.

Thu Nov 11 21:43:02 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: forgot a $(srcdir)
	* encoding.c: stupid error wrong name #157976

Wed Nov 10 15:35:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc/*: preparing release of libxml2-2.6.16

Wed Nov 10 12:55:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: Applied patch from Brent
	  Hendricks adding support for late DTD validation.
	* python/tests/Makefile.am python/tests/dtdvalid.py
	  python/tests/test.dtd: integrated the provided regression test

Tue nov  9 19:24:31 CET 2004 Dodji Seketeli <dodji@seketeli.org>

	* configure.in: detect when struct sockaddr_storage
	  has the __ss_family member instead of ss_family and
	  behave accordingly. We now can use ipv6 on aix.

Tue Nov  9 17:15:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am gentest.py testapi.c: integrated in "make tests"
	  added -q option, and more conditional features fixes
	* catalog.c debugXML.c parser.c testThreads.c xmllint.c
	  xmlschemastypes.c xmlwriter.cinclude/libxml/catalog.h
	  include/libxml/debugXML.h: various compilation and conditional
	  cleanups.
	* doc/*: regenerated

Tue Nov  9 15:59:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: better handling of conditional features
	* HTMLparser.c SAX2.c parserInternals.c xmlwriter.c: more testing
	  on parser contexts closed leaks, error messages

Tue Nov  9 10:21:37 GMT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem concerning XPath context corruption
	  during function argument evaluation (bug 157652)
	  
Mon Nov  8 18:54:52 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: more types.
	* parserInternals.c xpath.c: more fixes

Mon Nov  8 18:16:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: better parser options coverage
	* SAX2.c xpath.c: more cleanups.

Tue Nov  9 01:50:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: trying to fix some optional support brokenness

Mon Nov  8 17:25:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* debugXML.c parser.c xmlregexp.c xpath.c: more fixes

Mon Nov  8 15:02:39 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* SAX2.c parser.c parserInternals.c: more fixes

Mon Nov  8 12:55:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c testapi.c xmlIO.c xmlstring.c: more fixes.

Mon Nov  8 11:24:57 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more types, more coverage
	* parser.c parserInternals.c relaxng.c valid.c xmlIO.c
	  xmlschemastypes.c: more problems fixed
	  
Mon Nov  8 10:24:28 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* gentest.py: fixed test file corruption problem

Sun Nov  7 13:18:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: fixed typos and avoid Catalogs verbosity

Sat Nov  6 23:25:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testapi.c: augmented the number of types

Sat Nov  6 20:24:07 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c xmlreader.c xmlwriter.c: a number of new
	  bug fixes and documentation updates.

Sat Nov  6 15:50:11 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: augmented type autogeneration for enums
	* xpath.c include/libxml/xpath.h: removed direct error reporting.

Sat Nov  6 14:27:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fixed a regression in iconv support.

Fri Nov  5 18:19:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: autogenerate a minimal NULL value sequence
	  for unknown pointer types
	* HTMLparser.c SAX2.c chvalid.c encoding.c entities.c parser.c
	  parserInternals.c relaxng.c valid.c xmlIO.c xmlreader.c 
	  xmlsave.c xmlschemas.c xmlschemastypes.c xmlstring.c xpath.c
	  xpointer.c: This uncovered an impressive amount of entry points
	  not checking for NULL pointers when they ought to, closing all
	  the open gaps.

Fri Nov  5 16:26:28 UTC 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: fixed problem with NULL entry (bug 157407)
	* xpath.c: fixed a couple of warnings (no change to logic)

Fri Nov  5 15:30:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* xmlunicode.c: one fix

Fri Nov  5 23:15:51 CET 2004 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed a compilation problem on a recent change

Fri Nov  5 12:50:09 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more coverage
	* nanoftp.c tree.c: more fixes

Fri Nov  5 11:02:28 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: fixed the way the generator works,
	  extended the testing, especially with more real trees and nodes.
	* HTMLtree.c tree.c valid.c xinclude.c xmlIO.c xmlsave.c: a bunch
	  of real problems found and fixed.
	* entities.c: fix error reporting to go through the new handlers

Thu Nov  4 18:44:56 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: dohh ... stupid change killing xmlParseDoc()

Thu Nov  4 18:32:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: changing the way the .c is generated,
	  extending the tests coverage
	* include/libxml/nanoftp.h nanoftp.c elfgcchack.h doc/*: fixing some
	  function signatures, regenerating stuff
	* SAX2.c parser.c xmlIO.c: another set of bug fixes and API hardening

Thu Nov  4 13:32:19 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: extending the tests coverage

Thu Nov  4 11:52:28 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: gentest.py was missing from the EXTRA_DIST

Thu Nov  4 11:48:47 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: extending the tests coverage
	* HTMLtree.c tree.c xmlsave.c xpointer.c: more fixes and cleanups

Thu Nov  4 00:25:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* nanoftp.c xmlIO.c: more fixes and hardening
	
Wed Nov  3 20:16:24 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* valid.c: bunch of cleanups and 2 leaks removed 

Wed Nov  3 18:06:44 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* list.c tree.c: more fixes and hardening

Wed Nov  3 15:19:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* relaxng.c include/libxml/relaxng.h: adding a type init interface
	* include/libxml/xmlerror.h parser.c xmlreader.c xmlwriter.c: more
	  cleanups and bug fixes raised by the regression tests

Wed Nov  3 12:49:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more fixes and extending the tests coverage
	* xmlwriter.c list.c: more hardeing of APIs
	* doc/apibuild.py: skip testapi.c when scanning the C files.

Tue Nov  2 23:09:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more testing and coverage
	* elfgcchack.h xmlstring.c include/libxml/xmlstring.h: more cleanups
	* doc/*: rebuilt

Tue Nov  2 19:44:32 CET 2004 Daniel Veillard <daniel@veillard.com>

	* gentest.py testapi.c: more developments on the API testing
	* HTMLparser.c tree.c: more cleanups
	* doc/*: rebuilt

Tue Nov  2 15:49:34 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c include/libxml/xmlmemory.h: adding xmlMemBlocks()
	* Makefile.am gentest.py testapi.c: work on generator of an
	  automatic API regression test tool.
	* SAX2.c nanoftp.c parser.c parserInternals.c tree.c xmlIO.c
	  xmlstring.c: various API hardeing changes as a result of running
	  teh first set of automatic API regression tests.
	* test/slashdot16.xml: apparently missing from CVS, commited it

Mon Nov  1 15:54:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed an UTF-8 parsing bug reported by Markus Bertheau
	  on #fedora-devel

Sun Oct 31 22:03:38 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug reported by Petr Pajas on the list and
	  affecting XML::Libxml

Sun Oct 31 16:33:54 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c doc/examples/testWriter.c: Fixed bug #153937, making
	  sure the conversion functions return the number of byte written.
	  Had to fix one of the examples.

Fri Oct 29 14:16:56 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.1 doc/xmllint.xml: indicate - means stdin closing #156626

Fri Oct 29 14:03:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: register xmlSchemaSetValidErrors, patch from
	  Brent Hendricks in the mailing-list
	* include/libxml/valid.h HTMLparser.c SAX2.c valid.c
	  parserInternals.c: fix #156626 and more generally how to find out
	  if a validation contect is part of a parsing context or not. This
	  can probably be improved to make 100% sure that vctxt->userData
	  is the parser context too. It's a bit hairy because we can't 
	  change the xmlValidCtxt structure without breaking the ABI since
	  this change xmlParserCtxt information indexes.

Wed Oct 27 19:26:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* ChangeLog NEWS configure.in doc/*: preparing release 2.6.15
	* debugXML.c nanoftp.c xmlschemas.c xmlschemastypes.c: cleanups

Wed Oct 27 09:31:24 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed a stupid mistake in xmlBuildRelativeURI
	  (bug 156527)

Wed Oct 27 11:44:35 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: second part of the security fix for
	  xmlNanoFTPConnect() and xmlNanoHTTPConnectHost().

Tue Oct 26 23:57:02 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied fixes for a couple of potential security problems
	* tree.c valid.c xmllint.c: more fixes on the string interning checks

Tue Oct 26 18:09:59 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added checking for names
	  values and dictionnaries generates a tons of errors
	* SAX2.ccatalog.c parser.c relaxng.c tree.c xinclude.c xmlwriter.c
	  include/libxml/tree.h: fixing the errors in the regression tests

Mon Oct 25 16:04:22 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: modified the handling of _private for entity
	  expansion (bug 155816)

Mon Oct 25 17:11:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the leak reported by Volker Roth on the list
	* test/ent10 result//ent10*: added a specific test for the problem

Sat Oct 23 11:07:41 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: unlinked the internal subset within xmlValidateDtd
	  (bug 141827)
	* configure.in: added -Wall to developer's flags
	* doc/examples/reader4.res: added to CVS

Fri Oct 22 16:36:50 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: added support for HTML PIs #156087
	* test/HTML/python.html result/HTML/python.html*: added specific tests

Fri Oct 22 15:20:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* threads.c: fixed nasty bug #156087

Fri Oct 22 21:04:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fixed a problem occuring only in x86_64 when
	  very large error messages are raised to the Python handlers.

Thu Oct 21 18:03:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed a memory bug
	* doc/examples/reader4.c doc/examples/*: added test from Graham Bennett
	  and regenerated the directory

Tue Oct 19 11:06:39 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlreader.h xmlreader.c: applied patch from
	  Graham Bennett adding 4 convenience functions to the reader API.

Fri Oct 15 11:22:48 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* debugXML.c: excluded a few nodes (with no content) from the
	  string check routine.

Fri Oct 15 10:48:30 EDT 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added UTF-8 string checking,
	  raise a problem, need debug

Wed Oct 13 02:17:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: applied patch from Thomas Fitzsimmons fixing
	  #155240 building outside the source tree. but make tests fails.

Mon Oct 11 16:26:51 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/xmlerror.h: added namespace checking

Sat Oct  9 22:36:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: some framework preparation to add namespace checkings

Thu Oct  7 15:12:58 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h include/libxml/xmlerror.h:
	  adding the tree debug mode
	* parser.c relaxng.c tree.c xpath.c: fixing various problems reported
	  by the debug mode.
	* SAX2.c: another tree fix from Rob Richards

Wed Oct  6 10:50:03 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: small change to last fix, to get xml:base right

Wed Oct  6 09:33:51 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* catalog.c: added code to handle <group>, including dumping
	  to output (bug 151924).
	* xmlcatalog.c, xmlstring.c, parser.c: minor compiler warning 
	  cleanup (no change to logic)
	  
Mon Oct  4 16:09:07 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in debugXML.c include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: revamped the XML debugging
	  module and prepare for a new checking mode

Mon Oct  4 13:53:24 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Malcolm Tredinnick fixing bug #152426

Mon Oct  4 12:26:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/tests/outbuf.py: 
	  applied patch from Malcolm Tredinnick fixing bug #154294
	  related to saving to python file objects.

Sat Oct  2 21:08:51 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: changed xmlHasNsProp to properly handle a request for
	  the default namespace (bug 153557)

Sat Oct  2 18:18:27 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem with dictionary handling within
	  xmlParseInNodeContext (bug 153175)

Sat Oct  2 15:46:37 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* check-relaxng-test-suite.py, check-relaxng-test-suite2.py,
	  check-xinclude-test-suite.py, check-xml-test-suite.py,
	  check-xsddata-test-suite.py, doc/examples/index.py: changed
	  changed sys.path setting from 'append' to 'insert' (patch
	  supplied by Malcolm Tredinnick) (bug 153716)

Sat Oct  2 15:03:14 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* include/libxml/parserInternals.h: added two new macros
	  IS_ASCII_LETTER and IS_ASCII_DIGIT used with (html)
	  parsing and xpath for testing data not necessarily
	  unicode.
	* HTMLparser.c, xpath.c: changed use of IS_LETTER_CH and
	  IS_DIGIT_CH macros to ascii versions (bug 153936).
	  
Fri Oct  1 20:37:25 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* error.c: added some coding to attempt to display which file
	  contains an error when using XInclude (bug 152623)

Thu Sep 30 11:19:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: stupid cut'n paste bug in xmllint detection

Wed Sep 29 17:47:56 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: releasing 2.6.14, rebuilding the docs
	  
Wed Sep 29 15:00:11 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlerror.h include/libxml/xmlschemas.h
	  include/libxml/schemasInternals.h: Parsing of <complexContent>
	  - handle attribute 'mixed', catch illegal attributes.
	  Parsing of <complexType> - handle attributes 'abstract',
	  'final' and 'block', catch illegal attributes.
	  Validation of complex types - handle abstract types.
	  Added handling of default/fixed attributes and element values.
	  Per validation option attribute nodes/text nodes are created
	  on the instance.
	  Added the corresponding constraints for fixed/default.
	  Added xmlSchemaSetValidOptions, xmlSchemaGetValidOptions
	  to the external API.
	  Extended element declaration constraints.  
	  Got rid of perseverative creation of temporery validation/parser 
	  contexts.
	  Added handling of xsi:schemaLocation and
	  xsi:noNamespaceSchemaLocation.
	  Fixed xsi:type component resolution if using non-prefixed
	  QNames.
	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h:
	  Enabled namespace awareness of the content model if using the
	  model group "all".
	* test/schemas/bug152470_1.xsd: Removed an "abstract" attribute,
	  which broke the test.
	* xstc/xstc.py:  Workaround to accomodate case insensitive
	  test definitions in ms-test.def.xml (was missing in a previous
	  commit).

Wed Sep 29 11:03:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/drv_libxml2.py: another patch from Malcolm Tredinnick
	  adding option not to load dtd from the drv_libxml2.py module
	  #134633

Tue Sep 28 14:30:22 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* acconfig.h config.h.in configure.in xmlIO.c xmlregexp.c xmlschemas.c
	  xmlschemastypes.c: another patch from Malcolm Tredinnick fixing
	  warning generated by the Nonstop Kernel Open System Services 
	  compiler #151710

Tue Sep 28 13:07:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: applied patch from Malcolm Tredinnick fixing
	  python exception hierarchy #139824

Sun Sep 26 16:40:24 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c TODO: applied patch from Malcolm Tredinnick fixing errata
	  E20 concerning NMTOKENS and co. validation #153722
	* result/VC/AttributeNmtokens test/VC/AttributeNmtokens
	  test/VCM/AttributeNmtokens.xml: also added tests from Malcolm

Sun Sep 26 16:24:44 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xstc/xstc.py: applied patch from Malcolm Tredinnick fixing space/tabs
	  #153713
	* xpath.c: fixed a realloc potential problem

Fri Sep 24 16:14:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: fixed make valgrind xstc 

Thu Sep 23 18:23:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixing an out of bound adressing issue

Thu Sep 23 15:14:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c relaxng.c xmlschemas.c: more memory related
	  code cleanups.

Thu Sep 23 01:04:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bunch of errors when realloc failed.

Wed Sep 22 23:56:05 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* threads.c uri.c: couple of memory fixes from Mark Vakoc reported
	  by Purify on Windows.

Mon Sep 20 22:01:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added --timing --copy timing for the copy
	* vms/build_libxml.com: applied patch from Craig Berry
	  to build with recent releases

Fri Sep 17 21:25:33 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c, include/libxml/nanohttp.h: added the routine
	  xmlNanoHTTPContentLength to the external API (bug151968).
	* parser.c: fixed unnecessary internal error message (bug152060);
	  also changed call to strncmp over to xmlStrncmp.
	* encoding.c: fixed compilation warning (bug152307).
	* tree.c: fixed segfault in xmlCopyPropList (bug152368); fixed
	  a couple of compilation warnings.
	* HTMLtree.c, debugXML.c, xmlmemory.c: fixed a few compilation
	  warnings; no change to logic.

Fri Sep 17 10:40:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed some extern before function code reported by
	  Kjartan Maraas on IRC
	* legacy.c: fixed compiling when configuring out the HTML parser
	* Makefile.am: added a declaration for CVS_EXTRA_DIST
	* HTMLparser.c: beginning of an attempt at cleaning up the construction
	  of the HTML parser data structures, current data generate a huge
	  amount of ELF relocations at loading time.

Fri Sep 17 10:36:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* ChangeLog: applied fix from Stepan Kasal to fix duplication
	  in the change log and cleanup of space/tabs issues.

Thu Sep 16 13:24:27 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h 
	  test/schemas/bug152470_1.* result/schemas/bug152470_1_1*: 
	  Simpified attribute wildcard creation and assignment to get rid 
	  of memory leaks.
	  Restructured the validation process.
	  Restructured and expanded parsing of <attributeGroup>.
	  Added initial handing of xsi:type.
	  Advanced handling of xsi:nil (should work now for simple types).
	  Added construction of schemata using xsi:schemaLocation and 
	  xsi:noNamespaceSchemaLocation; this is not enabled, since 
	  no corresponding API exists yet.
	  Moved the content model to complex type components.
	  Resolution of types for attributes will look for simple types
	  only (incl. all the built-in simple types).
	  Extended parsing of 'anyAttribute'.
	  Fixed content-type type for complex types if derived from 
	  'anyType' using the short-hand form (see bug # 152470,
	  submitted by Thilo Jeremias).
	* include/libxml/xmlschematypes.h: Cleaned up some comments.
	* xstc/xstc.py: Workaround to accomodate case insensitive
	  test definitions in ms-test.def.xml.
	* result/schemas/deter0_0_0.err result/schemas/ns0_0_2.err
	  result/schemas/ns0_1_2.err: Adapted.

Sat Sep 11 09:04:22 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: changed char array initialisation to avoid a
	  complaint from some compiler(s) (bug 152308)

Thu Sep  9 07:22:11 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* encoding.c: applied fixes for the UTF8ToISO8859x transcoding
	  routine suggested by Mark Itzcovitz

Wed Sep  8 22:50:27 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlsave.c: fixed 2 problems raised by #152140, one
	  which is that notation not in the internal subset should
	  not be saved, and the second more nasty on an error saving
	  NOTATIONs, if there is a proof that nobody uses notations !

Wed Sep  8 11:04:27 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/xmlschemas.h: Added the function
	  xmlSchemaValidateOneElement to the XML Schema validation API, 
	  as proposed by Jeffrey Fink - see bug # 152073.

Tue Sep  7 11:10:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/Makefile.am xstc/Makefile.am: some cleanup
	  checking for xmllint and xsltproc in configure.in, fixed
	  make dist w.r.t. the new xstc subdir.
	* doc/*: rebuilt

Mon Sep  6 16:42:59 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/xstc.py: Changed to finally validate instance documents.

Mon Sep  6 16:04:01 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am Makefile.am: integrated to "make valgrind",
	  heavy ... weight 250MB of VM !

Mon Sep  6 14:54:39 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xstc/Makefile.am xstc/xstc-to-python.xsl xstc/xstc.py Makefile.am:
	  more cleanup in integrating the xstc testsuite

Mon Sep  6 13:56:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in xstc/.cvsignore xstc/Makefile.am:
	  starting to integrate the xstc suite in the normal regression
	  tests

Mon Sep  6 13:14:11 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/sun-test-def.xml: The "tsDir" attribute was not
	  set correctly.

Mon Sep  6 11:52:50 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py: when output and expected do not match
	  exactly run diff to put the differences in the log c.f. #148691

Mon Sep  6 11:17:35 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xstc/xstc-to-python.xslt xstc/ms-test-def.xml xstc/nist-test-def.xml
	  xstc/sun-test-def.xml: Initial release of generation files to 
	  create python test scripts, which will run the W3C XML Schema Test
	  Collection. The ms-test-def.xml and sun-test-def.xml files
	  were extracted from the online HTML XSTC results [1], since they did
	  not exist for the SUN tests, and only partially did exist for the 
	  MS tests. The NIST definition file was created by concatenation
	  of the existing definition files for each single datatype.
	  The stylesheet "xstc-to-python.xslt" should be run against the
	  definition files to produce the python scripts.
	  [1] "http://www.w3.org/XML/2001/05/xmlschema-test-collection/
	  results-master.html"

Fri Sep  3 20:29:59 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: Fixed a seg fault in xmlGetQNameProp:
	  a format argument was missing.
	  Fixed wrong assignment of the owner of a wildcard in
	  xmlSchemaBuildAttributeValidation (in the shorthandform of
	  <complexType>; this caused a seg fault, due to a double-free
	  of the wildcard.
	  Added a check for circular attribute group references.
	  Added a check for circular model group definition references.
	  Fixed a dublicate xmlParserErrors enum value - see bug #151738.

Fri Sep  3 10:08:13 PDT 2004 William Brack <wbrack@mmmm.com.hk>

	* xmlstring.c: modified comments on xmlGetUTF8Char in
	  response to bug 151760 (no change to logic)

Tue Aug 31 09:46:18 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlstring.c: fixed error reported on the list caused by
	  my last change

Tue Aug 31 15:41:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in doc/*: release of libxml2-2.6.13

Tue Aug 31 14:14:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fixing #151456, an encoding error could generate
	  a serialization loop.

Tue Aug 31 11:34:04 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: also produce a tar ball with just the sources
	* xmllint.c: added --path option and --load-trace options to
	  xmllint, RFE #147740 based on xsltproc versions
	* doc/xmllint.* doc/*: updated the man page and rebuilt

Tue Aug 31 10:37:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: "" is a valid hexbinary string dixit xmlschema-dev
	* result/schemas/hexbinary_0_1.err test/schemas/hexbinary_1.xml: 
	  update the test.
	* test/ns5 result//ns5*: added a test for the namespace bug fixed
	  in previous commit.
	* Makefile.am: added a message in the regression tests

Mon Aug 30 23:36:21 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c: fixed bug introduced during OOM fixup causing problems
	  with default namespace when a named prefix with the same href
	  was present (reported on the mailing list by Karl Eichwalder.
	* xmlstring.c: modified xmlCheckUTF8 with suggested code from
	  Julius Mittenzwei.
	* dict.c: added a typecast to try to avoid problem reported by
	  Pascal Rodes.

Mon Aug 30 12:45:46 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: Fixed a bug in xmlSchemasCheckFacet, which did
	  not create a computed value on a facet and thus crashed during
	  validation of instances.
	  Expanded validity checks for min/maxOccurs attributes.
	  Expanded validity checks for the value of the attribute "form".

Fri Aug 27 18:32:24 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlstring.c: fixed a problem with xmlCheckUTF8 reported on the
	  mailing list by Julius Mittenzwei

Fri Aug 27 00:13:39 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: added BuildRequires:  zlib-devel, fixes
	  Red Hat bug #124942

Thu Aug 26 12:27:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: remove a warning on Solaris
	* xmlschemastype.c: fix a crashing bug #151111

Wed Aug 25 22:20:18 CEST 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* test/schemas/import-bad-1_0.imp: Added missing test file.
	* xmlschemas.c include/libxml/xmlerror.h include/libxml/xmlschemas.h:
	  Substituted the obsolete xmlSchemaValidError(s) for xmlParserErrors
	  - see #150840. 
	  Changed the import of schemas to allow failure of location
	  of a resource to be imported.
	* result/schemas/all_* result/schemas/any3_0_0.err 
	  result/schemas/choice_* result/schemas/import1_0_0.err
	  result/schemas/list0_0_1.err result/schemas/list0_1_0.err
	  result/schemas/list0_1_1.err result/schemas/ns0_0_2.err
	  result/schemas/ns0_1_2.err: Adapted regression test results.

Tue Aug 24 20:49:15 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml, xmltutorial.pdf, *.html
	fix Xpath memory leak (thanks to sKaBoy and William Brack)

Tue Aug 24 21:10:59 CEST 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c: fixed path problem in DTD loading reported by 
	  Sameer Abhinkar

Tue Aug 24 16:40:51 CEST 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js: added support for version extra
	* win32/Makefile.*: upgraded to zlib 1.2.1

Mon Aug 23 14:33:54 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: removing -O -g from default gcc flags #150828

Sun Aug 22 16:26:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* NEWS: preparing 2.6.12 release, updated and
	  and rebuilt the docs.

Sun Aug 22 16:07:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fix a problem on last commit

Sun Aug 22 15:16:53 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xpath.c include/libxml/xpath.h 
	  include/libxml/xpathInternals.h python/libxml.c 
	  python/libxml_wrap.h: trying to remove some warning when compiling
	  on Fedora Core 3 and 64bits

Sat Aug 21 0:035:10 CET 2004 Kasimier Buchcik <libxml2-cvs@cazic.net>

	* xmlschemas.c: modified parsing of <list>, <union>, <restriction>,
	  <sequence>, <choice>, <include>, <import>.
	  Fixed schema defaults (elementFormDefault, etc.) for included
	  schemas.
	  Fixed a bug which reported attributes as invalid on
	  elements declarations with the built-in type 'anyType'.
	  Added "lax" validation of the content of elements of type
	  'anyType'.
	  Fixed: element declarations with the same name were treated
	  as duplicate if located in the subtree of <choice> -> <sequence>.
	  (This was bug 150623, submitted by Roland Lezuo)
	  Fixed cleanup of error codes in xmlSchemaValidateDoc as proposed
	  by Igor Kapitanker. (This was bug 150647, submitted by Igor
	  Kapitanker)
	* xmlschemastypes.c: Changed the type of anyType to
	  XML_SCHEMAS_ANYTYPE.
	* include/libxml/xmlerror.h: Added schema parser errors.
	* result/schemas/bug145246_0_0*
	  result/schemas/extension1_0_2.err: Changed test results.
	* result/schemas/ct-sc-nobase_0_0*
	  result/schemas/facet-whiteSpace_0_0*
	  result/schemas/import1_0_0* result/schemas/import2_0_0*
	  result/schemas/include2_0_0* result/schemas/include3_0_0*
	  result/schemas/restriction-attr1_0_0*
	  result/schemas/seq-dubl-elem1_0_0*
	  result/schemas/xsd-list-itemType_0_0*: Added new rest results.
	  test/schemas/bug145246.xsd.imp test/schemas/ct-sc-nobase_0*
	  test/schemas/facet-whiteSpace_0* test/schemas/import1_0*
	  test/schemas/import2_0* test/schemas/include2_0*
	  test/schemas/include3_0* test/schemas/restriction-attr1_0*
	  test/schemas/seq-dubl-elem1_0* test/schemas/xml.xsd
	  test/schemas/xsd-list-itemType_0*: Added new tests and missing
	  files.  	      

Fri Aug 20 18:51:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: a bit of cleanup and a extra variable for
	  CVS dist

Thu Aug 19 07:44:07 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.1, xmllint.html:
	Edit and rebuild the man pages with Daniel's C14 update

Wed Aug 18 19:15:27 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed missing line numbers on entity as reported
	  on the list by Steve Cheng

Wed Aug 18 14:04:31 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in globals.c include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: added some code to
	  include the CVS ChangeLog version in the xmlParserVersion
	  string (printed by xmllint with --version)

Wed Aug 18 11:14:06 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h python/generator.py
	  python/libxml.c python/libxml_wrap.h python/types.c
	  python/tests/schema.py python/tests/Makefile.am: Applied patch
	  from Torkel Lyng to add Schemas support to the Python bindings
	  and extend the schemas error API, registered a new test.
	* doc/* elfgcchack.h: rebuilt to regenerate the bindings

Mon Aug 16 14:36:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added help for new set shell command
	* xinclude.c xmllint.c xmlreader.c include/libxml/parser.h:
	  added parser option to not generate XInclude start/end nodes,
	  added a specific option to xmllint to test it fixes #130769
	* Makefile.am: regression test the new feature
	* doc/xmllint.1 doc/xmllint.xml: updated man page to document option.

Mon Aug 16 02:42:30 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: small typo pointed out by Mike Hommey
	* doc/xmllint.xml, xmllint.html, xmllint.1: slightly improved
	  the --c14n description, c.f. #144675 .
	* nanohttp.c nanoftp.c: applied a first simple patch from 
	  Mike Hommey for $no_proxy, c.f. #133470
	* parserInternals.c include/libxml/parserInternals.h
	  include/libxml/xmlerror.h: cleanup to avoid 'error' identifier 
	  in includes #137414
	* parser.c SAX2.c debugXML.c include/libxml/parser.h:
	  first version of the inplementation of parsing within
	  the context of a node in the tree #142359, new function
	  xmlParseInNodeContext(), added support at the xmllint --shell
	  level as the "set" function
	* test/scripts/set* result/scripts/* Makefile.am: extended
	  the script based regression tests to instrument the new function.

Sat Aug 14 18:53:08 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.html, xmllint.1:
	add c14n to man page (man, it's hard to keep up with
	Daniel!)

Sat Aug 14 18:45:38 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.html, xmllint.1:
	add pattern, walker, maxmem, output and xmlout to man page
	fixes #144675

Sun Aug 15 00:41:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added a --c14n option to canonicalize the output
	  should close the RFE #143226

Sat Aug 14 23:50:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: Dodji pointed out a bug in xmlGetNodePath()
	* xmlcatalog.c: applied patch from Albert Chin to add a
	  --no-super-update option to xmlcatalog see #145461
	  and another patch also from Albert Chin to not crash 
	  on -sgml --del without args see #145462
	* Makefile.am: applied another patch from Albert Chin to
	  fix a problem with diff on Solaris #145511
	* xmlstring.c: fix xmlCheckUTF8() according to the suggestion
	  in bug #148115
	* python/libxml.py: apply fix from Marc-Antoine Parent about
	  the errors in libxml(2).py on the node wrapper #135547

Sat Aug 14 13:18:57 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: added a dumb rule to able to compile tst.c
	  when people submit a sample test program
	* xmlschemas.c: applied small patch from Eric Haszlakiewicz
	  to document xmlSchemasSetValidErrors() limitations, #141827
	* error.c: Add information in generic and structured error
	  setter functions that this need to be done per thread #144308
	* xmlsave.c: fixed bug whith missing NOTATION(s) serialization
	  bug #144162
	* doc/xmllint.xml: typo fix #144840

Tue Aug 10 07:19:31 PDT 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in xmlregexp.c xmlschemas.c xmlschemastypes.c
	  include/libxml/schemasInternals.h include/libxml/xmlerror.h
	  include/libxml/xmlschemastypes.h: applied Schemas patches
	  from Kasimier Buchcik
	* test/ result/ bug141333* annot-err* any[1-4]* bug145246*
	  element-err* element-minmax-err* include1* restrict-CT-attr-ref*:
	  lot of new tests for things fixed by the patch

Fri Aug  6 09:22:34 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: fixed my mis-handling of External ID on last
	  change.

Wed Aug  4 23:40:21 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: changed the parsing of a document's DTD to use
	  the proper base path (bug 144366)

Wed Aug  4 16:58:08 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am config.h.in configure.in python/Makefile.am:
	  applied a patch from Gerrit P. Haase to get python bindings
	  on Cygwin

Tue Aug  3 15:08:22 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* include/libxml/valid.h: elaborated on description of
	  xmlValidityWarningFunc and xmlValidityErrorFunc (bug
	  144760)
	* xmlIO.c, xmlschemastypes.c, include/libxml/schemasinternals.h:
	  minor fixes to comments for doc rebuilding errors.
	* doc/*.html: rebuilt the docs

Tue Aug  3 23:59:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/ChangeLog.xsl doc/downloads.html doc/xml.html doc/*:
	  fixes documentation glitches raised by Oliver Stoeneberg

Tue Aug  3 09:42:31 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: fixed problem with memory leak on text nodes in DTD
	  (bug 148965) with patch provided by Darrell Kindred

Tue Aug  3 08:14:44 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: fixed initialisation problem for htmlReadMemory
	  (bug 149041)

Sat Jul 31 11:01:33 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/buildDocBookCatalog: enhanced per bug 119876.  Further
	  info posted to the mailing list.

Sat Jul 31 09:12:44 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, encoding.c, error.c, parser.c, tree.c, uri.c, xmlIO.c,
	  xmlreader.c, include/libxml/tree.h: many further little changes
	  for OOM problems.  Now seems to be getting closer to "ok".
	* testOOM.c: added code to intercept more errors, found more
	  problems with library. Changed method of flagging / counting
	  errors intercepted.

Fri Jul 30 13:57:55 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied a couple of patch one from Oliver Stoeneberg
	  and another one from Rob Richards fixing #148448

Thu Jul 29 13:20:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: 1 line patch, apparently htmlNewDoc() was not
	  setting doc->charset.

Thu Jul 29 00:05:58 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, tree.c, uri.c, xmlIO.c, xmlreader.c: further
	  fixes for out of memory condition, mostly from Olivier
	  Andrieu.
	* testOOM.c: some further improvement by Olivier, with
	  a further small enhancement for easier debugging.

Tue Jul 27 00:34:07 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, error.c, parser.c, tree.c, xmlreader.c:
	  implemented patches supplied by Olivier Andrieu 
	  (bug 148588), plus made some further enhancements, to
	  correct some problems with out of memory conditions.
	* testOOM.c: improved with patches from Olivier Andrieu

Mon Jul 26 11:03:18 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: put in patch for Windows buffer re-allocation
	  submitted by Steve Hay (bug 146697)

Sun Jul 25 17:18:39 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: added some code to check, when an include is
	  done, whether the requested URL gets mapped to some other
	  location (e.g. with a catalog entry) and, if so, take care
	  of the xml:base properly (bug 146988)

Sun Jul 25 14:02:24 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* error.c: fixed to assure user data param is set correctly
	  when user structured error handler is called (bug 144823)

Thu Jul 22 10:14:48 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlreader.c: fixed problem with reader state after
	  processing attributes (bug 147993)

Wed Jul 21 17:04:27 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in, Makefile.am: put in an auto* check for the
	  path to perl (if it exists), and modified make Timingtests
	  to use that path instead of just executing the dbgenattr.pl
	  script (bug 148056)

Fri Jul 16 18:36:33 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: added a check on the argument for some
	  classes (e.g. xmlDoc and xmlNode) to prevent a segfault (as
	  reported on the list).  Further enhancement should be done
	  to auto-create the appropriate object.
	* python/libxml.c: minor fix for a warning message; added a
	  routine, currently not used, to report the description of a
	  PyCObject.
	* python/libxml2class.txt: regenerated

Fri Jul 16 11:01:40 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c test/catalogs/white* result/catalogs/white*:
	  applied patches from Peter Breitenlohner to fix handling
	  of white space normalization in public ids and add tests

Tue Jul 13 17:24:13 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: applied a small fix from Steve Hay

Tue Jul 13 23:02:19 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: Added code to in PREDICATE/FILTER handling to reset
	  the xpath context document pointer (part of fix to libxslt
	  bug 147445)

Tue Jul 13 00:14:08 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/libxml.py: ran 'expand' on the file to get rid of mixture
	  of tabs and spaces (bug 147424)

Sun Jul 11 22:38:29 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/drv_libxml.py: added an encoding "special comment" to avoid
	  warning message in python2.3 (bug 146889)
	* Makefile.am, python/Makefile.am, python/tests/Makefile.am: small
	  change to make "make tests" a little quieter (MAKEFLAGS+=--silent)
	* xpath.c: enhanced to take advantage of current libxslt handling
	  of tmpRVT.  Fixes bug 145547.

Fri Jul  9 14:02:54 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.h uri.c: fixed a couple of problems in the new
	  elfgcchack.h trick pointed by Peter Breitenlohner

Wed Jul  7 00:45:48 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h doc/apibuild.py doc/libxml2-api.xml: fixed a bug
	  which prevented building with --with-minimum

Mon Jul  5 19:43:51 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: releasing 2.6.11, updated and regenerated the
	  docs

Mon Jul  5 18:43:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: make the push interfaces synchronous
	* python/tests/sync.py: added a specific test
	* python/tests/Makefile.am doc/examples/Makefile.am
	  doc/examples/index.py: added the new test, cleaning up 
	  "make tests" output

Mon Jul  5 15:09:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Kasimier to fix some Relax-NG
	  datatype facet problem with recent changes.

Sat Jul  3 11:31:02 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* python/libxml.c: Changed the number of XPath extension functions
	  allowed to be variable-length (patch supplied by Marc-Antoine
	  Parent, bug 143805).  Added code to "unregister" the functions
	  when the parser cleanup takes place.

Fri Jul  2 14:22:14 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c python/libxml.c python/libxml2-python-api.xml:
	  some updates with memory debugging facilities while messing
	  with libxslt python bindings

Thu Jul  1 14:53:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/generator.py python/libxml.py
	  python/libxml2-python-api.xml python/libxml2class.txt:
	  applied patch from Stéphane Bidoul to fix some Python bindings
	  initialization, then had to change the parserCleanup() 
	  to handle memory released there.
	* xmlmemory.c: added more debugging comments.

Thu Jul  1 13:18:02 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: seems the reader buffer could be used while not
	  allocated, fixes bug #145218

Thu Jul  1 11:34:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: do not provide functions used as destructor
	  of classes as public methods to avoid double-free problem like
	  in bug #145185

Wed Jun 30 19:45:23 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c, xmlschemastypes.c: warning message cleanup.
	  Now compiles warning-free, all tests passed.
	* SAX2.c: small change to comments for documentation.
	  No change to logic.

Tue Jun 29 15:00:13 PDT 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more fixes with Kasimier, looks far cleaner :-)

Tue Jun 29 23:00:05 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: Kasimier Buchcik fixed the memory access and
	  allocation problem

Tue Jun 29 19:00:32 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h
	  include/libxml/schemasInternals.h include/libxml/xmlschemastypes.h:
	  applied Schemas patches from Kasimier Buchcik, there is still
	  one open issue about referencing freed memory.
	* test/schemas/* result/schemas/*: updated with new tests from 
	  Kasimier

Tue Jun 29 14:52:18 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h include/libxml/xmlIO.h
	  doc/libxml2-api.xml doc/libxml2-refs.xml: moved some definitions
	  to globals.h to avoid some troubles pointed out by Rob Richards

Mon Jun 28 11:25:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: applied changes suggested by Mike Hommey, remove
	  libxml1 support and use CPPFLAGS instead of CFLAGS

Sun Jun 27 14:17:15 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: another, more 'experimental' feature to 
	  get compiler optimization based on gcc runtime profiling

Sun Jun 27 14:02:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* elfgcchack.h doc/elfgcchack.xsl libxml.h: hack based on Arjan van de
	  Ven suggestion to reduce ELF footprint and generated code. Based on
	  aliasing of libraries function to generate direct call instead of
	  indirect ones
	* doc/libxml2-api.xml doc/Makefile.am doc/apibuild.py: added automatic
	  generation of elfgcchack.h based on the API description, extended
	  the API description to show the conditionals configuration flags
	  required for symbols.
	* nanohttp.c parser.c xmlsave.c include/libxml/*.h: lot of cleanup
	* doc/*: regenerated the docs.

Sun Jun 27 10:02:28 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* regressions.py, regressions.xml: new files for running
	  regression tests under Python.  Not yet complete, but
	  should provide good testing under both Linux and Windows.
	* testHTML.c, testSAX.c, xmllint.c: changed the 'fopen' used
	  for --push testing to include the 'rb' param when compiled
	  under Windows.

Fri Jun 25 13:38:57 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* uri.c: fixed a problem when base path was "./xxx"
	* result/XInclude/*: 5 test results changed by above.
	* Makefile.am: fixed a couple of spots where a new
	  result file used different flags that the testing one.

Thu Jun 24 16:27:44 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: suppressed warnings from within xmlValidGetValidElements
	  (bug 144644)
	* doc/examples/testWriter.c: corrected typo in comment for ISO-8859-1
	  (bug 144245)

Thu Jun 24 10:17:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: implemented bugfix from Massimo Morara for DTD
	  dumping problem.
	* test/valid/t10.xml, result/valid/t10.*: added regression
	  for above
	* configure.in: small change for my profile settings

Wed Jun 23 20:18:19 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog.1
	Docs patch from Ville Skytta, bugzilla #144841

Sat Jun 19 18:34:11 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, xmllint.html, xmllint.1
	update man page to reflect William's newly disciplined return
	code mojo

Thu Jun 17 00:51:55 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/io2.c doc/examples/parse4.c: fixing a couple of
	  compilation errors when configured with --with-minimum

Wed Jun 16 16:07:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: applied patch from Stefano Debenedetti to register
	  namespaces in the debug shell

Mon Jun 14 21:56:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fix from Steve Ball and update of the comment.
	* Makefile.am result/errors/*.str: William pointed out that 
	  the streaming error checking part wasn't streaming, fixing

Mon Jun 14 14:11:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: patch from Igor for the default catalog path on Windows

Sat Jun 12 09:03:57 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in: apparently wasn't updated last time

Thu Jun 10 20:57:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in, xmlmemory.c, globals.c: fixed problem when
	  configuring using --with-thread-alloc

Wed Jun  9 16:31:24 CEST 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js win32/Makefile.* minor changes for the new
	  layout of the Windows binary package

Tue Jun  8 19:50:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlerror.h: applied another patch
	  from Kasimier Buchcik for Schema Component Constraints
	* test/schemas/* result/schemas/*: added the regression tests

Tue Jun  8 21:27:03 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmllint.c: fixed missing error return code for schema
	  validation (bug 143880), also changed over to an enum for
	  defining the error return codes for all conditions.

Tue Jun  8 14:01:14 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlreader.c include/libxml/parser.h: fixed a serious
	  problem when substituing entities using the Reader, the entities
	  content might be freed and if rereferenced would crash
	* Makefile.am test/* result/*: added a new test case and a new
	  test operation for the reader with substitution of entities.

Tue Jun  8 12:14:16 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlIO.c include/libxml/globals.h include/libxml/xmlIO.h:
	  applied patch from Rob Richards for the per thread I/O mappings

Tue Jun  8 09:58:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: some further enhancement to take care of
	  xml:base for XPointer elements (bug 143886).  Also fixed
	  a problem when xml:base was already specified on an
	  XInclude'd element.

Mon Jun  7 22:14:58 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: fixed a problem with internal cleanup of <DIV> element
	  (bug 143738).

Mon Jun  7 16:57:43 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* uri.c, include/libxml/uri.h: added a new routine
	  xmlBuildRelativeURI needed for enhancement of xinclude.c
	* xinclude.c: changed handling of xml:base (bug 135864)
	* result/XInclude/*: results of 5 tests changed as a result
	  of the above change

Fri Jun  4 11:27:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* test/schemas/* result/schemas/*: added a bunch of tests from
	  Kasimier Buchcik posted on May 11

Thu Jun  3 17:58:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: new patch from  Kasimier Buchcik for processContents
	  of wildcards attribute handling
	* test/schemas/anyAttr-* result/schemas/anyAttr-*: added specific
	  regression tests

Thu Jun  3 13:20:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug where invalid charrefs may not be detected
	  sometimes as pointed by Morus Walter.
	* test/errors/charref1.xm result/errors/charref1.xml*: added the
	  test in the regression suite.

Thu Jun  3 18:38:27 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: small change to xmlSchemaValidateAttributes,
	  also corrected typo on error code enum.
	* include/libxml/xmlerror.h: corrected typo on schema error
	  code enum

Thu Jun  3 10:12:38 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: minor cosmetic changes, no change to logic.
	* result/schemas/attruse_0_[12].err: regenerated
	* globals.c: added a newline at end to make gcc happy

Wed Jun  2 21:16:26 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/schemasInternals.h 
	  include/libxml/xmlerror.h: applied a patch from Kasimier Buchcik
	  implementing attribute uses and wildcards.
	* test/schemas/* result/schemas/*: added/fixed a bunch of tests

Wed Jun  2 18:15:51 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlIO.c include/libxml/globals.h: applied patch from 
	  Rob Richards for custom I/O BufferCreateFilenane fixes bug
	  #143366

Wed Jun 02 16:25:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with predicate evaluation on an
	  empty nodeset (bug 143409)

Wed Jun 02 11:26:41 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* testSAX.c: fixed problem with attribute listing (bug 142674)
	  and added macro LIBXML_TEST_VERSION to assure xmlInitParser
	  gets called (bug 142686)

Sat May 29 21:35:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* test/schemas/date_0.xml xmlschemastypes.c: applied a patch from
	  Charles Bozeman fixing a side effect in date handling

Thu May 27 19:47:48 MDT 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml fix lack of cast in Xpath example
	* doc/tutorial/*.html, xmltutorial.pdf rebuild html, pdf

2004-05-25  Aleksey Sanin <aleksey@aleksey.com>

	* c14n.c: fixed c14n bug with serializing attribute namespaces

Mon May 24 08:22:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed to allow '+' in exponent of number
	  (bug 143005)
	* SAX2.c: fixed typo in last commit

Sat May 22 09:08:24 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* SAX2.c: skipped call to xmlValidateNCName when compiling
	  --with-minimum (bug 142917)

Tue May 18 06:48:00 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: reverted the broken change.

Mon May 17 23:07:15 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*: updated the docs for 2.6.10

Mon May 17 05:52:03 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in : releasing 2.6.10

Sun May 16 23:12:35 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: avoid returning default namespace when searching
	  from an attribute
	* entities.c xmlwriter.c: reverse xmlEncodeSpecialChars() behaviour
	  back to escaping " since the normal serialization routines do not
	  use it anymore, should close bug #134477 . Tried to make 
	  the writer avoid it too but it didn't work.

Sun May 16 01:07:16 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/ChangeLog.awk doc/ChangeLog.xsl: fixed escaping
	  handling and added direct links to bugzilla report for
	  bug numbers.

Sun May 16 11:11:13 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* error.c: modified to assure proper user data is sent to
	  structured error routine (bug 142598)

Sun May 16 03:18:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: a couple of large static variable which should really
	  not be declared as such cluttered the .bss section.

Sun May 16 03:06:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/ChangeLog.awk: fixed a couple of problems when parsing
	  libxslt ChangeLog

Sat May 15 20:14:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/ChangeLog.awk doc/ChangeLog.xsl: first steps of a good
	  ChangeLog page generation. The awk shoudl escape characters
	  not okay in XML and the xslt should make links to functions
	  or variables or bug reported in the entries.

Sat May 15 14:57:40 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c include/libxml/xmlsave.h: start adding API for 
	  escaping customization.

Sat May 15 12:38:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: more xmlSave cleanup, optimization and refactoring

Fri May 14 17:51:48 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmlsave.c: third pass at the escaping refactoring.

Fri May 14 12:37:24 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: enhanced the enhancement, fixed another couple of
	  special cases.

Fri May 14 11:48:33 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: small enhancement to dtd handling of (a?)+ (bug 142487)

Thu May 13 23:19:00 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmlsave.c include/libxml/xmlIO.h: second pass on escaping
	  handling, start to looks better, need to be completed and added
	  directly at the saving context level.

Thu May 13 10:31:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmlsave.c include/libxml/xmlIO.h: first pass at refactoring
	  the escape on save routines for better performances (less malloc)
	  and more flexibility using the new saving context. Preliminary
	  work, interface will change.

Wed May 12 22:34:03 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: added code in xmlSchemaBuildAContentModel to handle
	  element reference within the xs:all construct (bug 139897)

Wed May 12 17:27:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: a little further fixing of fallback processing, this
	  time for fallback with children (bug 139520).

Wed May 12 08:21:33 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: added code in xmlSchemaBuildContentModel to
	  allow ref in group definition (bug 134411).  Also fixed
	  misc compilation warning messages.
	* result/schema/group0_0_0, result/schema/group0_0_0.err:
	  regenerated (now no error reported).

Tue May 11 11:55:59 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix to the fix for #141864 from Paul Elseth  
	* HTMLparser.c result/HTML/doc3.htm: apply fix from David Gatwood for
	  #141195 about text between comments.

Tue May 11 23:04:47 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c, include/libxml/schemasInternals.h,
	  include/libxml/xmlerror.h: Applied patches supplied by
	  Kasimier Buchcik.
	* test/schemas/po1_0.xml, test/schemas/po1_0.xsd:
	  changed test to account for above patch.

Tue May 11 09:06:53 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* python/tests/tstLastError.py: better portability fix for f(*args),
	  use apply(f, args) as Stéphane Bidoul suggested

Mon May 10 15:49:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced xmlRegStateAddTrans to check if transition
	  is already present and, if so, to ignore the request to add it.
	  This has a very dramatic effect on memory requirements as well
	  as efficiency.  It also fixes bug 141762.

Sun May  9 20:40:59 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am python/tests/Makefile.am python/tests/tstLastError.py:
	  applied patch from Ed Davis to allow "make tests" to work
	  with Python 1.5

Sun May  9 19:46:13 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: apply fix for XHTML1 formating from Nick Wellnhofer
	  fixes bug #141266
	* test/xhtmlcomp result//xhtmlcomp*: added the specific regression
	  test

Sun May  9 14:07:21 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: fix for a pedantic make check without make all request

Sat May  8 22:56:22 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* uri.c xmlIO.c: fixing some problems in URI unescaping
	  and output buffer opening, this should fix #141864

Fri May  7 22:31:54 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/valid.h: fixes the use of 'list' as a parameter
	* xmlIO.c include/libxml/xmlIO.h: added xmlPopInputCallback for
	  Matt Sergeant

Thu May  6 21:14:38 PDT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced the handling of subexpression ranges
	  which have a minOccurs of 0 (bug 140478 again); cleaned up
	  comments throughout the module.

Tue May  4 00:52:16 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: adding a --maxmem option to check memory used.

Sat May  1 01:08:44 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlsave.c python/generator.py python/libxml.c: Fixed
	  bug #141529 i.e. various problems when building with --without-html

Fri Apr 30 18:12:31 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlreader.c: fixing bug #141384 where the reader didn't
	  call the deregistering functions. Also added the check to
	  xmllint --stream --chkregister .

Fri Apr 30 08:57:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.msvc: applied a second patch from Mark Vakoc for
	  regression tests on Windows

Thu Apr 29 21:47:23 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: never commit without running make tests first !

Thu Apr 29 20:15:20 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fix a nasty problem with reading over the end
	* xmlsave.c: fix a reported memory leak apparently

Thu Apr 29 17:05:00 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.msvc: patch from Mark Vakoc for regression tests
	  on Windows.
	* xpath.c: the NaN problem also shows up on Borland

Mon Apr 26 23:37:12 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced xmlFARegExec range evaluation for min
	  occurs 0 problems - fixes bug 140478.

Thu Apr 22 09:12:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* rngparser.c: tiny path fixes the "xmlConvertCRNGFile" function name
	  from Kasimier Buchcik
	* xmlschemas.c: recursive xs:extension fix from taihei goi

Wed Apr 21 00:19:29 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: small buffer resizing improvement from Morten Welinder
	  closes #140629

Tue Apr 20 23:40:14 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: last version of the fix for MSC version 1200

Tue Apr 20 19:40:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: killing the strncmp vs. memcmp controversy and #140593

Tue Apr 20 13:27:06 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/SAX2.h: Kasimier Buchcik pointed out some 
	  inexistent functions, cleaned them out.

Tue Apr 20 11:42:50 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* error.c: Johnson Cameron pointed out that
	  initGenericErrorDefaultFunc() was really wrong.
	* xmlreader.c include/libxml/xmlreader.h: xmlTextReaderMode enum
	  must be made public, added some missing comments on the XMLReader
	  header.
	* c14n.c: Alexsey fixed C14N bug with processing namespaces
	  from attributes

Mon Apr 19 23:27:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a stupid () error + Mark name.

Sun Apr 18 23:45:46 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.6.9 release
	* doc/* News: updated and rebuilt the docs

Sun Apr 18 22:51:43 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: relaxed id() to not check taht the name(s) passed
	  are actually NCName, decided this in agreement with Aleksey Sanin
	  since existing specs like Visa3D broke that conformance checking
	  and other tools seems to not implement it sigh...
	* SAX2.c: check attribute decls for xml:id and the value is an
	  NCName.
	* test/xmlid/id_err* result/xmlid/id_err*: added error testing

Sun Apr 18 21:46:17 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: work around Microsoft compiler NaN bug raise reported
	  by Mark Vakoc
	* xmlschemas.c include/libxml/schemasInternals.h 
	  include/libxml/xmlerror.h: fixed a recusive extention schemas
	  compilation error raised by taihei goi

Sun Apr 18 16:57:02 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: keep the ChangeLog compressed 
	* xmlreader.c: fix a segfault when using Close()
	* python/tests/Makefile.am python/tests/reader8.py: test for
	  the Close() reader API.

Sat Apr 17 22:42:13 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c, xmlwriter.c, doc/examples/parse4.c,
	  doc/examples/io2.c: minor warning cleanup (no change to logic)
	* xinclude: fixed return value for internal function
	  xmlXIncludeLoadFallback (now always 0 or -1)

Sat Apr 17 21:32:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* valid.c: small enhancement to fix bug 139791

Fri Apr 16 18:44:47 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/schemasInternals.h
	  include/libxml/xmlerror.h: applied patches from Kasimier Buchcik
	  for the attribute use support
	* test/schemas/attruse* result/schemas/attruse*: added the
	  tests to the regression suite.

Fri Apr 16 18:22:25 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: move the TODO as comments as the function while not
	  finished are usable as-is
	* xmlschemas.c include/libxml/xmlerror.h: patch from Kasimier Buchcik
	  implementing union
	* test/schemas/union_0_0.x* result/schemas/union_0_0*: added example
	* python/Makefile.am: applied fix from Mike Hommey

Fri Apr 16 23:58:42 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed problem with detecting external dtd
	  encoding (bug 135229).
	* Makefile.am: minor change to test label

Fri Apr 16 16:09:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem causing duplicate fallback
	  execution (bug 139520)
	* test/XInclude/docs/fallback2.xml result/XInclude/fallback2.*:
	  added testcase

Fri Apr  9 23:49:37 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* SAX2.c include/libxml/tree.h: adding xml:id draft support
	* Makefile.am test/xmlid/id_tst* result/xmlid/id_tst*: adding
	  4 first regression tests

Fri Apr  9 11:56:08 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixing Red Hat bug #120482 , libxml2-python
	  should depend on the version of python used to compile it.

Mon Apr  5 09:07:24 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from James Bursa, frameset should
	  close head.

Fri Apr  2 22:02:24 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: fixed problem in xmlRelaxNGCompareNameClasses
	  which was causing check-relaxng-test-suite.py test 351 to fail.

Fri Apr  2 17:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: implemented fix for M$ IIS redirect provided
	  by Ian Hummel
	* relaxng.c: fixed problem with notAllowed compilation
	  (bug 138793)

Thu Apr  1 22:07:52 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* uri.c: fix for xmlUriEscape on "http://user@somewhere.com"
	  from Mark Vakoc.

2004-04-01  Johan Dahlin  <johan@gnome.org>

	* python/.cvsignore: Add generated files, to make cvs silent.

Thu Apr  1 12:41:36 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: small signed-ness patch from Steve Little

Wed Mar 31 17:47:28 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: patched a bug in parsing production 1 and 2 of
	  xmlschemas regexp that William pointed out while working on
	  #134120
	* test/regexp/branch result/regexp/branch: added a specific
	  regression test

Wed Mar 31 09:50:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* Makefile.am: added PYTHONPATH to python tests for Schemas
	  and RelaxNG
	* test/xsdtest/xsdtestsuite.xml: added testfile for
	  SchemasPythonTests

Mon Mar 29 16:56:49 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/examples.xsl doc/examples/index.html: added
	  information about compiling on Unix

Mon Mar 29 14:18:12 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixes the comments for xmlCatalogDump and xmlDumpACatalog
	* doc/*: rebuilt to update

Sun Mar 28 18:11:41 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: optimize indentation based on the new context

Sun Mar 28 14:17:10 CEST 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/xpath2.c doc/examples/xpath2.res: handle and explain
	  a very tricky problem when modifying the tree based on an XPath
	  result query.

Sat Mar 27 09:56:14 PST 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: fixed problem with IS_COMPILABLE flag
	  (bug 130216)

Fri Mar 26 18:28:32 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Dave Beckett to correct line number
	  errors when using push with CDATA

Fri Mar 26 14:53:58 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/xpath1.c: added a test template
	* doc/examples/xpath2.c doc/examples/xpath2.res doc/examples/*:
	  added a new example, and make valgrind target 

Fri Mar 26 11:47:29 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: apply fix for #136693

Thu Mar 25 20:21:01 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/io2.c
	* doc/examples/io2.res
	add xmlDocDumpMemory example in response to mailing list FAQ
	(rebuilt xml and html also)

Thu Mar 25 10:33:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c testXPath.c xmllint.c xmlschemastypes.c: applied
	  patch from Mark Vakoc avoiding using xmlParse* option and use
	  xmlRead* instead
	* win32/Makefile.bcb: patch to Borland C++ builder from Eric Zurcher
	  to avoid problems with some pathnames.

Tue Mar 23 12:35:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* News: preparing 2.6.8 release, updated and rebuilt
	  the docs.
	* Makefile.am: use valgring fro the new Python based regression tests

Mon Mar 22 20:07:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: remove a memory leak on schemas type facets.
	* check-relaxng-test-suite.py check-relaxng-test-suite2.py
	  check-xsddata-test-suite.py: reduce verbosity
	* configure.in Makefile.am: incorporated the Python regressions
	  tests for Relax-NG and Schemas Datatype to "make tests"

Mon Mar 22 16:16:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h doc/* : applied patch from
	  Alfred Mickautsch for better DTD support.
	* SAX2.c HTMLparser.c parser.c xinclude.c xmllint.c xmlreader.c
	  xmlschemas.c: fixed bug #137867 i.e. fixed properly the way
	  reference counting is handled in the XML parser which had the
	  side effect of removing a lot of hazardous cruft added to try
	  to fix the problems associated as they popped up.
	* xmlIO.c: FILE * close fixup for stderr/stdout

Sun Mar 21 19:19:41 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: added an error message when an element is not
	  found within a <choice> (bug 126093)

Sat Mar 20 22:25:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: enhanced the logic of parsing char groups to
	  better handle initial or ending '-' (bug 135972)

Sat Mar 20 19:26:03 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: added check for external reference in 
	  xmlRelaxNGGetElements (bug 137718)
	* test/relaxng/rngbug-001.*, result/relaxng/rngbug-001*: added
	  regression test for above

Wed Mar 17 16:37:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* nanohttp.c: added a close for the local file descriptor
	  (bug 137474)

Mon Mar 15 15:46:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlsave.c: switched the output routines to use the new context.

Mon Mar 15 10:37:18 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* relaxng.c: enhanced to ignore XML_XINCLUDE_START and XML_XINCLUDE_END
	  nodes (bug 137153)

Sun Mar 14 13:19:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied patch from John Belmonte for anyURI.

Wed Mar 10 17:22:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix bug reported by Holger Rauch
	* test/att8 result/noent/att8 result/att8 result/att8.rdr
	  result/att8.sax: added the test to th regression suite

Wed Mar 10 19:42:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/search.php: Minor change for later verson of php requiring
	  $HTTP_GET_VARS.

Wed Mar 10 00:12:31 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c: Changed the flag to xmlDocCopyNode (and similar routines),
	  previously used only for recursion, to use a value of '2' to
	  indicate copy properties & namespaces, but not children.
	* xinclude.c: changed the handling of ranges to use the above new
	  facility.  Fixes Bug 134268.

Tue Mar  9 18:48:51 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* win32/Makefile.bcb, win32/Makefile.mingw, win32/Makefile.msvc:
	  added new module xmlsave with patch supplied by Eric Zurcher
	  (second attempt - don't know what happened to the first one!)

Tue Mar  9 09:59:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: applied patch from Anthony Carrico
	  providing Python bindings for the Canonicalization C14N support.

Mon Mar  8 11:12:23 CET 2004 Hagen Moebius <hagen.moebius@starschiffchen.de>

	* .cvsignore and python/.cvsignore patched

Mon Mar  8 22:33:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: enhanced to assure that if xpointer is called
	  for a document, the XML_PARSE_NOENT flag is set before parsing
	  the included document so that entities will automatically get
	  taken care of.
	* xpointer.c: corrected code so that, if an XML_ENTITY_REF node
	  is encountered, it will log it and not crash (bug 135713)

Sun Mar  7 19:03:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: modified to make sub-includes inherit the
	  parse flags from the parent document (bug 132597)

Fri Mar  5 01:13:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: QName handling fixes for the XML Schemas
	  support from Adam Dickmeiss
	* test/schemas/po1_0.xsd: also fix the schemas
	* test/schemas/ns[12]* result/schemas/ns[12]*: added the specific
	  regression tests

Thu Mar  4 23:03:02 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/Makefile.am include/libxml/Makefile.am:
	  paalied patch from Julio M. Merino Vidal fixing bug #134751
	  to fix --with-html-dir option.
	* doc/*: rebuilt fully the docs 
	* doc/html/libxml-xmlsave.html: new file from new header.

Thu Mar  4 16:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c testHTML.c tree.c doc/examples/*.c
	  include/libxml/xmlsave.h: fixing compilation bug with some options
	  disabled as well as --with-minimum should fix #134695

Thu Mar  4 15:00:45 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: allow fallback to URI lookup when SYSTEM fails,
	  should close #134092

Thu Mar  4 14:39:38 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am tree.c xmlsave.c include/libxml/xmlsave.h: commiting
	  the new xmlsave module before the actuall big code change.

Thu Mar  4 12:38:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Adam Dickmeiss for mixed content
	* test/schemas/mixed* result/schemas/mixed*: added his regression
	  tests too.

Mon Mar  1 15:22:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: fix a compilation problem about a missing timb include

Sat Feb 28 22:35:32 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* testSAX.c: small enhancement to prevent trying to print
	  strings with null pointers (caused "make tests" errors on
	  HP-UX)

Thu Feb 26 20:19:40 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	* doc/xmllint.html
	* doc/xmlcatalog_man.xml
	* doc/xmlcatalog.1
	* doc/xmlcatalog_man.html
	applying patch from Mike Hommey to clarify XML_CATALOG_FILES
	use

Thu Feb 26 23:47:43 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: patch for cross-compilation to Windows from
	  Christophe de VIENNE.

Thu Feb 26 18:52:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/*.html, doc/html/*.html: regenerated docs using older
	  version of xsltproc pending resolution of AVT problem

Thu Feb 26 10:56:29 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: applied patch from Charles Bozeman to not use
	  the system xmllint.

Wed Feb 25 18:07:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlexports.h: applied patch from Roland Schwingel
	  for MingW

Wed Feb 25 13:57:25 CET 2004 Daniel Veillard <daniel@veillard.com>

	* Makefile.am catalog.c configure.in: applied a cleanup patch
	  from Peter Breitenlohner
	* tree.c: removed a doc build warning by fixing a param comment
	* doc/* : rebuilt the docs

Wed Feb 25 13:33:07 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c HTMLparser.c: avoid ID error message if using
	  HTML_PARSE_NOERROR should fix #130762

Wed Feb 25 12:50:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c relaxng.c valid.c xinclude.c xmllint.c xmlreader.c:
	  fixing compilation and link option when configuring with
	  --without-valid should fix #135309

Wed Feb 25 11:36:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed the main issues reported by Peter Breitenlohner
	* parser.c: cleanup
	* valid.c: speedup patch from Petr Pajas

Wed Feb 25 16:07:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed a memory leak (xmlXPathLangFunction) reported
	  on the list by Mike Hommey

Mon Feb 23 17:28:34 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/* NEWS configure.in: preparing 2.6.7 release, updated and
	  rebuilt the documentation.

Mon Feb 23 11:52:12 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/tests/*.py: applied patch from Malcolm Tredinnick
	  to avoid tabs in python sources, should fix #135095

Sun Feb 22 23:16:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: add --timing option
	* relaxng.c: use the psvi field of the nodes instead of _private
	  which may be used for other purposes.

Sat Feb 21 16:57:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: small patch to try to fix a warning with Sun One compiler

Sat Feb 21 16:22:35 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: small patch removing a warning with MS compiler.

Sat Feb 21 13:52:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added "relaxng" option to the debugging shell
	* Makefile.am test/errors/* result/errors/*: some regression tests
	  for some error tests cases.

Fri Feb 20 09:56:47 CET 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: xmlAttrSerializeTxtContent don't segfault if NULL
	  is passed.
	* test/att7 result//att7*: adding an old regression test
	  laying around on my laptop

Thu Feb 19 17:33:36 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed xmllint --memory --stream memory consumption
	  on large file by using xmlParserInputBufferCreateStatic() with
	  the mmap'ed file 

Thu Feb 19 13:56:53 CET 2004 Daniel Veillard <daniel@veillard.com>

	* tree.c: some clarification in xmlDocDumpMemory() documentation
	* xmllint.c: fixed xmllint --stream --timing to get timings back

Wed Feb 18 15:20:42 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a problem in push mode when attribute contains
	  unescaped '>' characters, fixes bug #134566
	* test/att6 result//att6*: added the test to the regression suite

Tue Feb 17 17:26:31 CET 2004 Daniel Veillard <daniel@veillard.com>

	* valid.c: removing a non-linear behaviour from ID/IDREF raised
	  by Petr Pajas. Call xmlListAppend instead of xmlListInsert in
	  xmlAddRef

Tue Feb 17 13:27:27 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/tests/indexes.py python/tests/reader.py: indicated
	  encoding of the test file, needed for python 2.3

Tue Feb 17 21:08:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with numbers having > 19
	  fractional places (bug 133921)

Tue Feb 17 12:47:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied optimization patch from Petr Pajas

Tue Feb 17 12:39:08 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h: applied update
	  from Alfred Mickautsch and the added patch from Lucas Brasilino

Sun Feb 15 12:01:30 CET 2004 Daniel Veillard <daniel@veillard.com>

	* benchmark.png index.html xml.html: updating the benchmark
	  graph and using a PNG instead of a GIF
	* xmlreader.c: updated the TODO

Sat Feb 14 18:55:40 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/xmltutorial.pdf
	* doc/tutorial/*.html
	Fix bug in XPath example in the tutorial, thanks to Carlos, whose
	last name I don't know, for pointing this out

Thu Feb 12 16:28:12 CET 2004 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in: preparing release of 2.6.6
	* doc/*: updated the docs and rebuilt them

Thu Feb 12 13:41:16 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing bug #132930 with the provided patch, a bit
	  suspicious about it but this is fairly contained and regression
	  tests still passes.
	* test/schemas/all1* result/schemas/all1*: added the test to
	  the regression suite.

Thu Feb 12 12:54:26 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #132575 about finding the end of the
	  internal subset in push mode.
	* test/intsubset.xml result/intsubset.xml* result/noent/intsubset.xml:
	  added the test to the regression suite

Wed Feb 11 14:19:31 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c xmlIO.c encoding.c include/libxml/parser.h
	  include/libxml/xmlIO.h: added xmlByteConsumed() interface
	* doc/*: updated the benchmark rebuilt the docs
	* python/tests/Makefile.am python/tests/indexes.py: added a
	  specific regression test for xmlByteConsumed()
	* include/libxml/encoding.h rngparser.c tree.c: small cleanups

Wed Feb 11 08:13:58 HKT 2004 William Brack <wbrack@mmm.com.hk

	* tree.c: fixed missing output of internal DTD param entities when
	  nothing else present in DTD (bug 134052)

Tue Feb 10 19:24:38 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* encoding.c: applied patch supplied by Christophe Dubach
	  to fix problem with --with-minimum configuration
	  (bug 133773)
	* nanoftp.c: fixed potential buffer overflow problem,
	  similar to fix just applied to nanohttp.c.

Mon Feb  9 18:40:21 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* nanohttp.c: fixed the fix for the buffer overflow, thanx
	  William :-)

Mon Feb  9 22:37:14 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* acinclude.m4, configure.in: fixed problem concerning
	  determining SOCKLEN_T as pointed out by Daniel Richard G.
	  on the mailing list

Mon Feb  9 15:31:24 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* nanohttp.c: fixed buffer overflow reported by Yuuichi Teranishi

Mon Feb  9 13:45:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xpath.c: small patch from Philip Ludlam to avoid warnings.

Mon Feb  9 13:41:47 CET 2004 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applied a small patch from Alfred Mickautsch
	  to avoid an out of bound error in isolat1ToUTF8()

Mon Feb  9 13:35:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: remove the warning on the 2001 namespace
	* parser.c parserInternals.c xpath.c: remove some warnings
	  when compiling with MSVC6
	* nanohttp.c: applied a patch when using _WINSOCKAPI_

Sun Feb  8 12:09:55 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: added a small hack to fix interference between
	  my fixes for bugs 132585 and 132588.
	* python/libxml.c: fixed problem with serialization of namespace
	  reported on the mailing list by Anthony Carrico

Sat Feb  7 16:53:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem with function xmlXIncludeCopyRange
	  (bug 133686).

Fri Feb  6 21:03:41 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: fixed problem with return value of
	  xmlTextWriterWriteIndent() (bug 133297)

Fri Feb  6 19:07:04 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: changed coding to output good XIncludes when
	  one or more bad ones are present (bug 132588)

Fri Feb  6 17:34:21 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: corrected handling of empty fallback condition
	  (bug 132585)

Fri Feb  6 15:28:36 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: added initialisation for ctxt->vctxt
	  in HTMLInitParser (bug 133127)
	* valid.c: minor cosmetic change (removed ATTRIBUTE_UNUSED
	  from several function params)

Tue Feb  3 16:48:57 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem regarding freeing of dictionary
	  when there are errors within an XInclude file (bug 133106).
	  Thanks to Oleg Paraschenko for the assistance.

Tue Feb  3 09:53:18 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlschemastypes.c: fixed validation of maxLength with no
	  content using patch submitted by Eric Haszlakiewicz
	  (bug 133259)

Tue Feb  3 09:21:09 CET 2004 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlreader.h include/libxml/xmlmemory.h: added
	  calling convention to the public function prototypes (rep by
	  Cameron Johnson)
	* include/libxml/xmlexports.h: fixed mingw+msys compilation
	  (rep by Mikhail Grushinskiy)

Mon Feb  2 20:22:18 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlwriter.c: enhanced output indenting (bug 133264)

Mon Feb  2 16:13:33 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xmlreader.c, include/libxml/xmlreader.h: applied patch from
	  Steve Ball to provide structured error reports.

Sun Feb  1 01:48:14 PST 2004 William Brack <wbrack@mmm.com.hk>

	* tree.c, include/libxml/tree.h: moved serialization of
	  attribute text data (xmlSerializeContent) into a separate
	  routine (xmlSerializeTxtContent) so it can be used by xmlwriter.c
	* xmlwriter.c: changed handling of attribute string to use the
	  routine above (fixed bug 131548)

Sat Jan 31 08:22:02 MST 2004 John Fleck <jfleck@inkstain.net

	* doc/examples/reader1.c, reader2.c, reader3.c
	* doc/examples/examples.xml
	* doc/examples/*.html
	add note that reader examples need libmxl2 > 2.6, rebuild
	html - this time doing it correctly :-)

Fri Jan 30 20:45:36 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/examples.xml
	* doc/examples/*.html
	add note that reader examples need libmxl2 > 2.6, rebuild
	html

Thu Jan 29 23:51:48 PST 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: added (void *) type override to prevent
	  warning on Solaris (Bug 132671)

Wed Jan 28 07:20:37 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/examples/Makefile.am
	per Jan. 15 email to the list from oliverst, the index.html
	file from this directory wasn't making it into the tarball

Mon Jan 26 18:01:00 CET 2004 Daniel Veillard <daniel@veillard.com>

	* acinclude.m4: applied fix from Alexander Winston for a problem
	  related to automake-1.8 , c.f. #132513 and #129861

Mon Jan 26 12:53:11 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/index.py: don't rely on . being on the path for
	  make tests, should keep Mr. Crozat quiet until next time...

Sun Jan 25 21:45:03 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.5, rebuilt the
	  docs, checked rngparser stuff does not end up in the tarball

Sun Jan 25 20:59:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: applied patch from Frederic Peters
	  fixing the wrong arg order in xpath callback in bug #130980

Sun Jan 25 20:52:09 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixing #130453 XInclude element with no href attribute
	* relaxng.c rngparser.c include/libxml2/relaxng.h: fully integrating 
	  the compact syntax will require more work, postponed for the
	  2.6.5 release.

Sat Jan 24 09:30:22 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/schemasInternals.h xmlschemas.c: applied patch from
	  Steve Ball to avoid a double-free.

Fri Jan 23 14:03:21 CET 2004 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added io1.c an example ox xmlIO usage and io1.res
	  test result, fixed a awful lot of memory leaks showing up in
	  testWriter.c, changed the examples and the Makefiles to test
	  memory leaks.
	* xmlwriter.c: fixed a memory leak
	* Makefile.am: run the doc/examples regression tests as part of
	  make tests
	* xpath.c include/libxml/xpath.h: added xmlXPathCtxtCompile() to
	  compile an XPath expression within a context, currently the goal
	  is to be able to reuse the XSLT stylesheet dictionnary, but this
	  opens the door to others possible optimizations.
	* dict.c include/libxml/dict.h: added xmlDictCreateSub() which allows
	  to build a new dictionnary based on another read-only dictionnary.
	  This is needed for XSLT to keep the stylesheet dictionnary read-only
	  while being able to reuse the strings for the transformation
	  dictionnary.
	* xinclude.c: fixed a dictionnar reference counting problem occuring
	  when document parsing failed.
	* testSAX.c: adding option --repeat for timing 100times the parsing
	* doc/* : rebuilt all the docs

Thu Jan 22 14:17:05 2004  Aleksey Sanin  <aleksey@aleksey.com>

	* xmlmemory.c: make xmlReallocLoc() accept NULL pointer

Thu Jan 22 08:26:20 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied patch from John Belmonte for
	  normalizedString datatype support.

Thu Jan 22 10:43:22 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed problem with union when last() is used
	  in predicate (bug #131971)
	* xpointer.c: minor change to comment for doc generation

Wed Jan 21 17:03:17 CET 2004 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #131745 raised by Shaun McCance with the
	  suggested patch

Wed Jan 21 10:59:55 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Alfred Mickautsch fixing a memory
	  leak reported on the list.

Thu Jan 15 00:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/tests/tstLastError.py: applied
	  patch from Stéphane Bidoul to add enums to the Python bindings.

Tue Jan 13 21:50:05 CET 2004 Daniel Veillard <daniel@veillard.com>

	* testHTML.c: another small patch from Mark Vakoc

Tue Jan 13 21:39:58 CET 2004 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c relaxng.c testRelax.c testSchemas.c: applied
	  patch from Mark Vakoc to not use SAX1 unless necessary.

Mon Jan 12 17:22:57 CET 2004 Daniel Veillard <daniel@veillard.com>

	* dict.c parser.c xmlstring.c: some parser optimizations,
	  xmllint --memory --timing --repeat --stream ./db10000.xml
	  went down from 16.5 secs to 15.5 secs.

Thu Jan  8 17:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: removed a memory leak remaining from the switch
	  to a dictionnary for string allocations c.f. #130891

Thu Jan  8 17:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixing some problem if configured --without-xinclude
	  c.f. #130902

Thu Jan  8 17:42:48 CET 2004 Daniel Veillard <daniel@veillard.com>

	* configure.in: changed AC_OUTPUT() macro to avoid a cygwin problem
	  c.f. #130896

Thu Jan  8 00:36:00 CET 2004 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc:
	  applying patch from Mark Vakoc for Windows
	* doc/catalog.html doc/encoding.html doc/xml.html: applied doc
	  fixes from Sven Zimmerman

Tue Jan  6 23:51:46 CET 2004 Daniel Veillard <daniel@veillard.com>

	* python/libxml2-python-api.xml python/libxml_wrap.h python/types.c
	  python/tests/Makefile.am python/tests/tstLastError.py: applied 
	  patch from Stéphane Bidoul for structured error handling from
	  python, and the associated test

Tue Jan  6 23:18:11 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* configure.in: fixed Bug130593
	* xmlwriter.c: fixed compilation warning

Tue Jan  6 15:15:23 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlstring.h: fixed the comment in the header
	* doc/*: rebuilt the docs

Tue Jan  6 19:40:04 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* encoding.c, parser.c, xmlstring.c, Makefile.am,
	  include/libxml/Makefile.am, include/libxml/catalog.c,
	  include/libxml/chvalid.h, include/libxml/encoding.h,
	  include/libxml/parser.h, include/libxml/relaxng.h,
	  include/libxml/tree.h, include/libxml/xmlwriter.h,
	  include/libxml/xmlstring.h:
	  moved string and UTF8 routines out of parser.c and encoding.c
	  into a new module xmlstring.c with include file
	  include/libxml/xmlstring.h mostly using patches from Reid
	  Spencer.  Since xmlChar now defined in xmlstring.h, several
	  include files needed to have a #include added for safety.
	* doc/apibuild.py: added some additional sorting for various
	  references displayed in the APIxxx.html files.  Rebuilt the
	  docs, and also added new file for xmlstring module.
	* configure.in: small addition to help my testing; no effect on
	  normal usage.
	* doc/search.php: added $_GET[query] so that persistent globals
	  can be disabled (for recent versions of PHP)

Mon Jan  5 20:47:07 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/customfo.xsl
	* doc/tutorial/customhtml.xsl
	update custom tutorial-building stylesheets in preparation
	for tutorial update

Tue Jan  6 00:10:33 CET 2004 Daniel Veillard <daniel@veillard.com>

	* rngparser.c: commiting the compact relax ng parser. It's not
	  completely finished, it's not integrated but I want to save the
	  current state

Mon Jan  5 22:22:48 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* doc/apibuild.py, doc/APIconstructors.html, doc/libxml2-refs.xml,
	  win32/libxml2.def.src: fixed apibuild.py's generation of
	  "constructors" to be in alphabetical order (instead of previous
	  random sequence); regenerated resulting files.

Mon Jan  5 14:03:59 CET 2004 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Lucas Brasilino fixing an indent
	  problem.

Sun Jan  4 18:54:29 MST 2004 John Fleck <jfleck@inkstain.net>

	* doc/newapi.xsl: change background color of function
	declaration to improve readability
	* doc/*: rebuild docs with new stylesheet

Sun Jan  4 22:45:14 HKT 2004 William Brack <wbarck@mmm.com.hk>

	* parser.c, include/libxml/parser.h: added a routine
	  xmlStrncatNew to create a new string from 2 frags.
	* tree.c: added code to check if node content is from
	  dictionary before trying to change or concatenate.

Sun Jan  4 08:57:51 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xmlmemory.c: applied suggestion from Miloslav Trmac (see
	  Bug 130419) and eliminated xmlInitMemoryDone.  More
	  improvement needed.
	* xml2-config.in: added an additional flag (--exec-prefix) to
	  allow library directory to be different from include directory
	  (Bug 129558).

Fri Jan  2 21:22:18 CET 2004 Daniel Veillard <daniel@veillard.com>

	* error.c: applied patch from Stéphane Bidoul for structured error
	  reporting.

Fri Jan  2 21:03:17 CET 2004 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlwriter.h xmlwriter.c: applied the patch from
	  Lucas Brasilino to add indentation support to xmlWriter

Fri Jan  2 22:58:29 HKT 2004 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem with "recursive" include (fallback
	  contains another include - Bug 129969)

Fri Jan  2 11:40:06 CET 2004 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: found and fixed a bug misallocating some non
	  blank text node strings from the dictionnary.
	* xmlmemory.c: fixed a problem with the memory debug mutex
	  release.

Wed Dec 31 22:02:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xinclude.c: fixed problem caused by wrong dictionary
	  reference count, reported on the list by Christopher
	  Grayce.

Wed Dec 31 15:55:55 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* python/generator.py, python/libxml2class.txt: fixed problem
	  pointed out by Stéphane Bidoul on the list.
	* xinclude.c, xpointer.c, xpath.c, include/libxml/xpointer.h:
	  completed modifications required to fix Bug 129967 (at last!).
	  Now wait to see how long before further trouble...

Tue Dec 30 16:26:13 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* parser.c, xmlmemory.c, include/libxml/xmlmemory.h: Fixed
	  memory leak reported by Dave Beckett
	* xmlschemas.c: Removed spurious comment reported on the mailing
	  list
	* xinclude.c, xpath.c, xpointer.c, libxml/include/xpointer.h:
	  Further work on Bug 129967 concerning xpointer range handling
	  and range-to function; much better, but still not complete

Mon Dec 29 18:08:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: xmlValidateElement could crash for element holding a 
	  namespace declaration but not in a namespace. Oliver Fischer 
	  provided the example.

Mon Dec 29 11:29:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: issue validation status on stderr, not stdout as suggested
	  by Pawel Palucha
	* result/relaxng/*: this change slightly all the output from RNG 
	  regressions.

Mon Dec 28 10:47:32 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: edited a couple of comments in accordance with
	  posting on the mailing list (no logic change)
	* xpointer.c: working on Bug 129967, added check for NULL
	  nodeset to prevent crash.  Further work required.
	* xpath.c: working on Bug 129967, added code to handle
	  XPATH_LOCATIONSET in RANGETO code, also added code to
	  handle it in xmlXPathEvaluatePredicateResult.  Further
	  work required.

Sat Dec 27 12:32:58 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: added tests for xs:all to assure minOccurs
	  and maxOccurs <= 1 (Bug 130020)

Sat Dec 27 09:53:06 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: fixed xmlFAParseCharRange for Unicode ranges
	  with patch from Charles Bozeman.

Fri Dec 26 14:03:41 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlregexp.c: fixed problem causing segfault on validation error
	  condition (reported on mailing list)

Thu Dec 25 21:16:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlschemas.c: fixed missing dictionaries for Memory and Doc
	  parser contexts (problem reported on mailing list)
	* doc/apibuild.py: small change to prevent duplicate lines
	  on API functions list.  It will take effect the next time
	  the docs are rebuilt.

Wed Dec 24 12:54:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: updated the docs and prepared a new
	  release 2.6.4

Wed Dec 24 12:07:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* legacy.c: remove deprecated warning on startElement()

Wed Dec 24 12:04:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c result/XInclude/nodes2.*: XInclude xpointer support
	  was broken with the new namespace. Fixes #129932

Wed Dec 24 00:29:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/schemasInternals.h: types might be
	  redefined in includes, quick fix to allow this but lacks the 
	  equality of the redefinition test.

Tue Dec 23 15:14:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* valid.c: fixed bug concerning validation using external
	  dtd of element with mutiple namespace declarations
	  (Bug 129821)

Tue Dec 23 11:41:42 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* tree.c: inhibited production of "(null):" in xmlGetNodePath
	  when node has default namespace (Bug 129710)

Tue Dec 23 09:29:14 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xpath.c: small enhancement to xmlXPathCmpNodes to assure
	  document order for attributes is retained (Bug 129331)

Mon Dec 22 19:06:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlreader.c: change xmlReadFd() xmlCtxtReadFd()
	  xmlReaderNewFd() xmlReaderForFd(), change those to not close
	  the file descriptor. Updated the comment, should close #129683

Mon Dec 22 00:34:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed a serious problem in XInclude #129021

Sun Dec 21 13:59:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed bug #129489, propagation of parsing flags 
	  in entities.
	* parser.c xmlreader.c: improved the comments of parsing options

Sun Dec 21 18:14:04 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* python/Makefile.am, python/tests/Makefile.am,
	  doc/Makefile.am: applied fixes to allow build from
	  'outside' directory (Bug 129172)

Sat Dec 20 16:42:07 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c - add explanation of namespace inheritance when
	ns is NULL to xmlNewChild and xmlNewTextChild API doc

Sat Dec 20 18:17:28 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xpathInternals.h: undid last change (my
	  bad).  Put necessary fix in libxslt/libexslt instead.
	* include/libxml/DOCBparser.h: put test for __GCC__ on
	  warning directive (Bug 129105)

Sat Dec 20 10:48:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xpathInternals.h: fixed xmlXPathReturnString
	  to cater for NULL pointer (bug 129561)
	* globals.c: added comment to suppress documentation warning
	* doc/apibuild.py: fixed problem which caused last APIchunkxx.html
	  to be lost.  Rebuilt doc/* (including adding APIchunk26.html)

Fri Dec 19 18:24:02 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: trying to fix #129692 xmlTextReaderExpand() when
	  using an xmlReaderWalker()

Thu Dec 18 20:10:34 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c: fix misc. typos in doc comments
	* include/libxml/tree.h: elaborate on macro define doc comments
	* doc/*: rebuild docs

Wed Dec 17 16:07:33 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: don't call the result files .out but .res as
	  the Makefiles tend to try generating binaries for .out targets...

Tue Dec 16 20:53:54 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/html/libxml-pattern.html: - cvs add API docs for new
	pattern stuff

Tue Dec 16 20:40:40 MST 2003 John Fleck <jfleck@inkstain.net>

	* tree.c
	* doc/*:
	Elaborate in documentation discussion of xmlNewChild
	and xmlNewTextChild. Thanks to Steve Lenti for pointing
	out the usefulness of a more explicit explanation of the
	reserved character escaping issue.

Fri Dec 12 15:55:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: applied patch from Stefan Kost

Thu Dec 11 15:15:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/testWriter.c: applied small fix from Lucas Brasilino

Thu Dec 11 14:55:22 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: Added pattern support

Wed Dec 10 14:11:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* libxml.spec.in: preparing release of
	  libxml2-2.6.3, updated and regenerated the docs.

Wed Dec 10 11:43:33 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c pattern.c: removed some compilation warnings

Wed Dec 10 11:16:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: fixing bug #119264 xmllint failing to report
	  serialization errors in some cases.

Tue Dec  9 23:50:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed an XML entites content serialization 
	  potentially triggered by XInclude, see #126817

Tue Dec  9 16:12:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied the patch to xmlTextWriterStartPI()
	  suggested by Daniel Schulman in #128313

Tue Dec  9 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in Makefile.am: another patch from Kenneth Haley
	  for Mingw, c.f. #128787

Tue Dec  9 15:07:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlexports.h: applied patch from Kenneth Haley
	  for compiling on Mingw see #128786

Tue Dec  9 14:52:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: some flags were not passed down correctly as
	  parsing options. Fixes #126806

Tue Dec  9 12:29:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmllint.c xmlreader.c include/libxml/xinclude.h
	  include/libxml/xmlerror.h: augmented the XInclude API
	  to be able to pass XML parser flags down to the Inclusion
	  process. Also resynchronized with the Last Call W3C Working
	  Draft 10 November 2003 for the xpointer attribute.
	* Makefile.am test/XInclude/docs/nodes[23].xml 
	  result/XInclude/*: augmented the tests for the new namespace and
	  testing the xpointer attribute, changed the way error messages
	  are tested
	* doc/*: regenerated the documentation

Mon Dec  8 18:38:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* error.c: filter warning messages if the global setting blocks them
	* xinclude.c xmlreader.c include/libxml/xinclude.h
	  include/libxml/xmlerror.h: updated the change of namespace at
	  the XInclude level, raise a warning if the old one is found,
	  and some cleanup

Mon Dec  8 13:09:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: tentative fix for #126117 character reference in
	  attributes output problem in some cornercase.

Mon Dec  8 11:08:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: tried to fix the problems reported in 
	  bug #126735
	* xpath.c SAX2.c error.c parser.c valid.c include/libxml/xmlerror.h:
	  fixed again some problem trying to use the structured error
	  handlers, c.f. bug #126735
	* result/VC/ElementValid: tiny change due to the fix

Sun Dec  7 22:27:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* error.c: fixed __xmlRaiseError to use structured error handlers
	  defined by xmlSetStructuredErrorFunc(), fixes bug #126211

Sun Dec  7 20:30:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: attempt to fix #126211 ... 

Fri Dec  5 17:07:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* pattern.c xmlreader.c xmllint.c include/libxml/pattern.h
	  include/libxml/xmlreader.h: fixed the pattern interfaces
	  but not yet the parser to handle the namespaces.
	* doc/examples/reader3.c doc/*: fixed the example, rebuilt the docs.

Fri Dec  5 15:49:44 CET 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlwriter.c doc/apibuild.py include/libxml/globals.h 
	  include/libxml/pattern.h include/libxml/schemasInternals.h
	  include/libxml/xmlexports.h include/libxml/xmlwriter.h: cleanup
	  the make rebuild in doc, this include new directive to stop
	  documentation warnings
	* doc/* doc/html/*: rebuilt the docs
	* pattern.c xmlreader.c include/libxml/pattern.h
	  include/libxml/xmlreader.h: adding xmlTextReaderPreservePattern()
	  to save nodes while scanning the tree with the reader, cleanup
	  the way element were freed, and xmlTextReaderPreserve()
	  implementation, the API might change for namespace binding support
	  when compiling patterns.
	* doc/examples/*: added reader3.c exposing the xmlTextReaderPreserve()

Thu Dec  4 15:10:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: oops forgot to modify/commit the new code.

Thu Dec  4 13:29:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml_wrap.h:
	  cleanup the output buffer support to at least get the basic
	  to work
	* python/tests/outbuf.py python/tests/serialize.py: fixes and
	  cleanup.
	* include/libxml/xmlwriter.h: cleanup

Wed Dec  3 21:38:56 MST 2003 John Fleck <jfleck@inkstain.net>

	* include/libxml/xmlversion.h.in
	* doc/*: add WITH_TRIO comment so it shows up in the docs, rebuild
	  docs

Wed Dec  3 13:10:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in xmlregexp.c: fix bug #128401 affecting
	  regexp quantifiers

Tue Dec  2 23:29:56 CET 2003 Daniel Veillard <daniel@veillard.com>

	* pattern.c include/libxml/pattern.h: adding the pattern node
	  selection code. Inheried in part from libxslt but smaller.
	* Makefile.am configure.in include/libxml/xmlversion.h.in:
	  integrated the pattern module, made it a configure time option
	* xmllint.c: added --pattern to test when doing --stream

Tue Dec  2 11:25:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed a problem in xmlreader validation when
	  streaming exposed by reader2 example.

Mon Dec  1 20:40:51 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html
	* doc/docs.html:
	add reference to the Code Examples page to docs.html list
	of resources

Mon Dec  1 12:30:28 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb win32/configure.js: Applied the BCB patch
	  from Eric

Sun Nov 30 21:33:37 MST 2003 John Fleck <jfleck@inkstain.net>

	* include/libxml/xinclude.h
	* doc/*: Add comments for macro definitions in xinclude.h and
	rebuild the docs

Sun Nov 30 21:06:29 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/docdescr.doc
	Updating William's explanation of how to build docs, 
	reflecting Daniel's new docs build system

Sat Nov 29 18:38:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlmemory.c: enhanced by adding mutex to protect global
	  structures in a multi-threading environment.  This fixed
	  some random errors on the Threads regression tests.

Fri Nov 28 21:39:49 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html doc/python.html: fix tst.py text, which didn't
	  import sys

Fri Nov 28 17:28:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, include/libxml/encoding.h: Enhanced the handling of
	  UTF-16, UTF-16LE and UTF-16BE encodings.  Now UTF-16 output is
	  handled internally by default, with proper BOM and UTF-16LE
	  encoding.  Native UTF-16LE and UTF-16BE encoding will not generate
	  BOM on output, and will be automatically recognized on input.
	* test/utf16lebom.xml, test/utf16bebom.xml, result/utf16?ebom*:
	  added regression tests for above.

Thu Nov 27 19:25:10 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: Modified to allow coexistent 
	  build with all compilers. Added C-Runtime option for MSVC. Included
	  xmlWriter.
	* xmlwriter.c: Added IN_LIBXML macro

Wed Nov 26 21:54:01 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: applied patch from Eric

Wed Nov 26 21:33:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: stefan on IRC pointed out that XML_GET_LINE
	  is broken on 2.6.x

Tue Nov 25 18:39:44 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixed #127877, never output &quot; in element content
	* result/isolat3 result/slashdot16.xml result/noent/isolat3
	  result/noent/slashdot16.xml result/valid/REC-xml-19980210.xml
	  result/valid/index.xml result/valid/xlink.xml: this changes the
	  output of a few tests

Tue Nov 25 16:36:21 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/schemasInternals.h include/libxml/xmlerror.h
	  testSchemas.c xmlschemas.c: added xsd:include support, fixed
	  testSchemas behaviour when a schemas failed to parse.
	* test/schemas/vdv-* result/schemas/vdv-first5_0_0*: added one
	  test for xsd:include from Eric Van der Vlist

Tue Nov 25 08:18:12 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: swapped the attribute defaulting and attribute checking
	  parts of parsing a new element start, fixes bug #127772
	* result/valid/127772.* test/valid/127772.xml
	  test/valid/dtds/127772.dtd: added the example in the regression tests

Tue Nov 25 08:00:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: moved xmlCleanupThreads() to the end of xmlCleanupParser()
	  to avoid bug #127851

Mon Nov 24 15:26:21 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixing some Negative Character Group and
	  Character Class Subtraction handling.

Mon Nov 24 14:01:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: more XML Schemas fixes based
	  on Eric van der Vlist examples
	* result/schemas/vdv-first4* test/schemas/vdv-first4*:
	  added regression tests
	* doc/examples/Makefile.am doc/examples/index.py: do not
	  regenerate the index on make all target, but only on
	  make rebuild to avoid troubles.

Sat Nov 22 21:35:42 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h
	  include/libxml/schemasInternals.h: lot of bug fixes, cleanup,
	  starting to add proper namespace support too.
	* test/schemas/* result/schemas/*: added a number of tests
	  fixed the result from some regression tests too.

Fri Nov 21 20:50:59 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xml.html, docs.html: remove reference to gtk-doc now that
	Daniel has removed it, fix link to George's IBM article, other
	minor edits

Fri Nov 21 01:26:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: applied patch from Robert Stepanek to start 
	  import os schemas support, cleaned up stuff and the patch.
	* test/schemas/import0_0.* result/schemas/import0_0_0*: added test
	  to regression, fixed a few regressions too.

Thu Nov 20 22:58:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied two parsing fixes from James Bursa

Thu Nov 20 19:20:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added two xmlReader examples
	* xmlreader.c: cleaned up some bugs in the process

Thu Nov 20 12:54:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c include/libxml/xmlwriter.h: applied patch from
	  Alfred Mickautsch, bugfixes and comments
	* doc/examples/*: added his test as the xmlWriter example
	* doc/html/ doc/*.html: this resulted in some improvements
	* include/libxml/hash.h: fixed an inclusion problem when
	  <libxml/hash.h> wasn't preceeded by <xml/parser.h>

Wed Nov 19 17:19:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fix an error message
	* doc/examples/*: added tree2 example from Lucas Brasilino

Wed Nov 19 17:50:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/newapi.xsl: improve the sort sequence for page content
	* doc/html/*.html: regenerate the web pages

Wed Nov 19 00:48:56 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: do not package cvs versioning temp files.
	* doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl: more cleanup,
	  slightly improved the API xml format, fixed a lot of small
	  rendering problems
	* doc/html/libxml*.html: rebuilt

Tue Nov 18 21:51:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/*.h include/libxml/*.h.in: modified the file
	  header to add more informations, painful...
	* genChRanges.py genUnicode.py: updated to generate said changes
	  in headers
	* doc/apibuild.py: extract headers, add them to libxml2-api.xml
	* *.html *.xsl *.xml: updated the stylesheets to flag geprecated
	  APIs modules. Updated the stylesheets, some cleanups, regenerated
	* doc/html/*.html: regenerated added back book1 and libxml-lib.html

Tue Nov 18 14:43:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/*.xsl doc/*.html doc/apibuild.py: cleaned up
	  the build process to remove all remains from the old gtk-doc
	  inherited, libxml2-refs.xml is now generated by apibuild.py, the
	  stylesheets have been improved, and the API*html now generated
	  are XHTML1 valid too

Tue Nov 18 14:28:32 HKT 2003 William Brack <mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h: minor
	  enhancement to prevent comment with unreferenced variable.
	* threads.c xmlreader.c xmlwriter.c: edited some comments to
	  improve auto-generation of documentation
	* apibuild.py: minor change to an error message

Mon Nov 17 17:55:51 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl: more cleanup,
	  improving navigation
	* doc/html/*.html: updated the result

Mon Nov 17 14:54:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml doc/newapi.xsl:
	  improvement of the stylesheets, fixed a API generation problem,
	  switched the stylesheet and Makefile to build the HTML output.
	* doc/html/*.html: complete update, ditched some old files, might
	  introduce some breakage...

Mon Nov 17 12:50:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/newapi.xsl: lot of improvements, this starts looking good
	  enough to be usable.

Mon Nov 17 00:58:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/newapi.xsl: stylesheet to build HTML pages from the
	  API XML description, Work in Progress

Sun Nov 16 16:03:24 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed bug 126976 (string != empty nodeset
	  should be false)

Sun Nov 16 14:00:08 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/html/*.html: Finally - found the problem with the
	  page generation (XMLPUBFUN not recognized by gtkdoc).
	  Re-created the pages using a temporary version of
	  include/libxml/*.h.
	* testOOMlib.c,include/libxml/encoding.h,
	  include/libxml/schemasInternals.h,include/libxml/valid.h,
	  include/libxml/xlink.h,include/libxml/xmlwin32version.h,
	  include/libxml/xmlwin32version.h.in,
	  include/libxml/xpathInternals.h: minor edit of comments
	  to help automatic documentation generation
	* doc/docdescr.doc: small elaboration
	* doc/examples/test1.c,doc/examples/Makefile.am: re-commit
	  (messed up on last try)
	* xmlreader.c: minor change to clear warning.

Sat Nov 15 19:20:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Copyright: fixed some wording
	* libxml.spec.in: make sure doc/examples is packaged
	* include/libxml/tree.h valid.c xmlreader.c: fixed the really
	  annoying problem about xmlRemoveID and xmlReader streaming.
	  Thing looks fixed now, had to add a doc reference to the
	  xmlID structure though...

Sat Nov 15 09:53:36 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/docdescr.doc: added description of man page building

Sat Nov 15 19:08:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/html/libxml-chvalid.html, doc/html/libxml-dict.html,
	  doc/html/libxml-list.html, doc/html/libxml-testOOMlib.html,
	  doc/html/libxml-wincecompat, doc/html/winsockcompat.html,
	  doc/html/libxml-xmlexports.html, doc/html/libxml-xmlversion.html,
	  doc/html/libxml-xmlwin32version.html, doc/html/libxml-xmlwriter.html:
	  added missing pages for the website.

Sat Nov 15 18:23:48 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am doc/*.html doc/html/*.html: rebuilt the
	  generated pages (again), manually restored doc/html/index.html
	  and manually edited generated file doc/gnome-xml.xml to put
	  in appropriate headings.
	* doc/docdescr.doc: new file to describe details of the
	  document generation (helps my memory for the next time)
	* genChRanges.py,chvalid.c,include/libxml/chvalid.h: minor
	  enhancement to please the automatic documentation generation.

Fri Nov 14 23:47:31 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* catalog.c,relaxng.c,testAutomata.c,xpointer.c,genChRanges.py,
	  chvalid.c,include/libxml/chvalid.h,doc/examples/test1.c:
	  minor error cleanup for gcc-3.3.[12] compilation warnings.

Fri Nov 14 15:08:13 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* tree.c: minor changes to some comments
	* doc/*.html: rebuilt the generated HTML pages for changes
	  from jfleck (bug 126945)

Thu Nov 13 12:44:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added Dodji's example, added output handling

Thu Nov 13 11:35:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/examples/*: added Aleksey XPath example, fixed bugs
	  in the indexer

Wed Nov 12 23:48:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*: integrating the examples in the navigation menus
	* doc/examples/*: added make tests, updated the navigation,
	  added a new test, cleanups, updates.

Wed Nov 12 17:50:36 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*.html: rebuilt the generated HTML pages
	* doc/examples/*: updated the stylesheets, added a synopsis,
	  Makefile.am is now generated by index.py

Wed Nov 12 01:38:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/site.xsl doc/examples/Makefile.am doc/examples/index.html:
	  added autogeneration of a web page for the examples
	* doc/examples/example1.c doc/examples/.cvsignore
	  doc/examples/examples.xml doc/examples/index.py: updated the
	  informations extracted, improved the format and indexing.

Tue Nov 11 22:08:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py: less verbose on difference
	* libxml.spec.in: cleanup
	* parser.c: fixed xmlCleanupParser() doc
	* doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml
	  doc/examples/Makefile.am doc/examples/example1.c 
	  doc/examples/examples.xml doc/examples/index.py
	  doc/examples/test1.xml: work on adding C examples and
	  generating automated information about those. examples.xml
	  is autogenerated describing the examples.
	* example/Makefile.am: cleanup

Mon Nov 10 23:47:03 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genUnicode.py, xmlunicode.c, include/libxml/xmlunicode.h:
	  fixed missing '-' in block names, enhanced the hack for
	  ABI aliasing.

Sun Nov  9 20:28:21 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genUnicode.py, xmlunicode.c, include/libxml/xmlunicode.h,
	  python/libxml2class.txt: enhanced for range checking,
	  updated to Unicode version 4.0.1 (API docs also updated)
	* python/generator.py: minor change to fix a warning

Wed Nov  5 23:46:36 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: apply fix from Karl Eichwalder for script path

Wed Nov  5 10:49:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: applied patch from Mark Vakoc to simplify
	  his work from CVS checkouts.

Tue Nov  4 21:16:47 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmlreader.html: minor cleanups

Tue Nov  4 15:52:28 PST 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/xmlversion.h.in: changed macro ATTRIBUTE_UNUSED
	  for gcc so that, if undefined, it's defined as
	  __attribute__((unused))

Tue Nov  4 15:28:07 PST 2003 William Brack <wbrack@mmm.com.hk>

	* python/generator.py: small enhancement to assure ATTRIBUTE_UNUSED
	  appears after the variable declaration.
	* valid.c: trivial change to eliminate a warning message

Tue Nov  4 11:24:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.2, updated and
	  rebuilt the docs

Tue Nov  4 09:38:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: change --html to make sure we use the HTML serialization
	  rule by default when HTML parser is used, add --xmlout to allow to
	  force the XML serializer on HTML.
	* HTMLtree.c: ugly tweak to fix the output on <p> element and 
	  solve #125093
	* result/HTML/*: this changes the output of some tests

Mon Nov  3 17:51:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed bug #125812, about XPointer in XInclude 
	  failing but not returning an error.

Mon Nov  3 17:18:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed bug #125811 related to DTD post validation
	  where the DTD doesn't pertain to a document.

Mon Nov  3 15:25:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlIO.c include/libxml/parserInternals.h: implemented
	  the XML_PARSE_NONET parser option.
	* xmllint.c: converted xmllint.c to use the option instead of 
	  relying on the global resolver variable.

Mon Nov  3 13:26:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmlreader.c include/libxml/xinclude.h: adding XInclude
	  support to the reader interface. Lot of testing of the walker,
	  various bug fixes.
	* xmllint.c: added --walker and made sure --xinclude --stream --debug
	  works as expected
	* Makefile.am result/dtd11.rdr result/ent6.rdr test/dtd11 test/ent6
	  result/XInclude/*.rdr: added regression tests for the walker and
	  XInclude xmlReader support, had to slightly change a couple of tests
	  because the walker can't distinguish <foo/> from <foo></foo>

Sat Nov  1 17:42:27 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c nanohttp.c threads.c: second BeOS patch from 
	  Marcin 'Shard' Konicki

Fri Oct 31 15:35:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: always generate line numbers

Fri Oct 31 11:53:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed another regression introduced in fixing #125823

Fri Oct 31 11:33:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: previous fix for #124044 was broken, correct
	  fix provided.
	* HTMLparser.c parser.c parserInternals.c xmlIO.c: fix xmlStopParser()
	  and the error handlers to address #125877

Thu Oct 30 23:10:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: side effect of #123105 patch, namespace resolution
	  would fail when defined in internal entities, fixes #125823

Thu Oct 30 14:10:42 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: be more defensive in the xmlReader python bindings
	  fixing bug #124044

Thu Oct 30 11:14:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: the a-posteriori DTD validation code was not validating
	  the namespace declarations, this fixes #124110

Wed Oct 29 14:13:03 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: enhanced to bypass compression detection code
	  when input file is stdin (bug 125801)

Wed Oct 29 18:21:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix needed when HTTP is not compiled in by Mark Vakoc

Wed Oct 29 18:05:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: more fixes about unregistering objects
	* include/libxml/relaxng.h: applied patch from Mark Vakoc
	  missing _cplusplus processing clause

Wed Oct 29 07:49:52 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* include/libxml/parser.h parser.c: added xmlStrVPrintf function

Wed Oct 29 14:37:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c testThreads.c threads.c: applied patch from
	  Marcin 'Shard' Konicki to provide BeOS thread support.

Wed Oct 29 14:20:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h: applied patch
	  from Steve Ball to make a schema parser from a preparsed document.

Wed Oct 29 13:52:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied a couple of patches from Mark Lilback about text
	  nodes coalescing

Wed Oct 29 12:16:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: change suggested by Anthony Carrico when unregistering
	  a namespace prefix to a context
	* hash.c: be more careful about calling callbacks with NULL payloads.

Wed Oct 29 00:04:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/*: preparing release 2.6.1, updated and
	  regenerated docs and APIs
	* parser.c: cleanup and last change to fix #123105

Tue Oct 28 23:02:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Fix #124907 by simply backporting the same
	  fix as for the XML parser
	* result/HTML/doc3.htm.err: change to ID detecting modified one
	  test result.

Tue Oct 28 22:28:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: included a new function
	  to reuse a Push parser context, based on Graham Bennett original
	  code
	* valid.c: in HTML, a name in an input is not an ID
	* TODO: bug list update

Tue Oct 28 19:54:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied patch from nico@xtradyne.com for #125030

Tue Oct 28 16:42:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* error.c valid.c include/libxml/xmlerror.h: fixing bug #125653
	  sometimes the error handlers can get a parser context on DTD
	  errors, and sometime they don't. So be very careful when trying
	  to grab those informations.

Tue Oct 28 15:26:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Kasimier Buchcik which fixes a 
	  problem in xmlSearchNs introduced in 2.6.0

Tue Oct 28 14:57:03 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #123263, the encoding is mandatory in a textdecl.

Tue Oct 28 13:48:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix bug #125047 about serializing when finding a 
	  document fragment node.

Mon Oct 27 11:11:29 EST 2003 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: fix bug #125592 need a NULL check
	* include/libxml/chvalid.h: rename a parameter

Mon Oct 27 09:43:48 EST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from #123105 about defaulted attributes
	  from element coming from an entity

Mon Oct 27 21:12:27 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmllint.c: fixed warning message from IRIX (bug 125182)
	* python/libxml.py: removed tabs, replaced with spaces
	  (bug 125572)

Mon Oct 27 06:17:30 EST 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.h parserInternals.c xmlIO.c: make sure we report errors
	  if xmlNewInputFromFile() fails.
	* xmlreader.c: avoid using _private for the node or document
	  elements.

Sat Oct 25 17:33:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js: added declaration for verMicroSuffix

Fri Oct 24 23:08:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: applied patch from Patrick Welche provided in
	  bug #125432 , future proofing the .m4 file.
	* parser.c: resetting the context should also reset the error
	* TODO: problem of conformance w.r.t. E20 was raised in the
	  XML Core telconf and libxml2 isn't conformant there.

Wed Oct 22 14:33:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlwriter.c: applied patch from Alfred Mickautsch fixing #125180

Wed Oct 22 10:50:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.c genChRanges.py: Stéphane Bidoul pointed out another
	  small glitch missing a const

Wed Oct 22 10:43:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.c genChRanges.py: Stéphane Bidoul pointed out that
	  it doesn't define IN_LIBXML

Tue Oct 21 21:14:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.mingw: typo pointed out by Stéphane Bidoul

Tue Oct 21 11:26:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc
	  win32/configure.js: set of Win32 patches for 2.6.0 by Joachim Bauch

Tue Oct 21 02:07:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: last minute patch from Eric Zurcher making it into 2.6.0

Tue Oct 21 02:03:03 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS doc/libxml2.xsa: preparing libxml2-2.6.0
	* doc/*: updated and regenerated the docs and API

Tue Oct 21 01:01:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c error.c tree.c: moved the line number to their proper
	  field in elements now.

Tue Oct 21 00:28:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in xmlwriter.c Makefile.am include/libxml/xmlwriter.h
	  include/libxml/Makefile.am include/libxml/xmlversion.h.in:
	  added the xmlWriter module contributed by Alfred Mickautsch
	* include/libxml/tree.h: added room for line and extra information
	* xmlreader.c python/tests/reader6.py: bugfixing some problem some
	  of them introduced in September
	* win32/libxml2.def.src doc/libxml2-api.xml: regenerated the API

Mon Oct 20 19:02:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in xmldwalk.c xmlreader.c
	  include/libxml/Makefile.am include/libxml/xmldwalk.h
	  include/libxml/xmlversion.h.in: removing xmldwalk module
	  since it got merged with the xmlreader.
	* parser.c: cleanup
	* win32/libxml2.def.src python/libxml2class.txt doc/libxml2-api.xml:
	  rebuilt the API
	* python/tests/Makefile.am python/tests/reader7.py
	  python/tests/walker.py: adding regression testing for the
	  new xmlreader APIs, new APIs for reader creation, including
	  makeing reader "walker" operating on preparsed document trees.

Sun Oct 20 22:37:03 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* entities.c, valid.c: fixed problem reported on the mailing
	  list by Melvyn Sopacua - wrong argument order on functions
	  called through xmlHashScan.

Sun Oct 19 23:57:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlIO.c: fixes for compiling using --with-minimum

Sun Oct 19 23:46:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: cleanup xmlNodeGetContent() reusing xmlNodeBufGetContent(),
	  tested it through the xslt regression suite.

Sun Oct 19 22:42:16 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: adding xmlNodeBufGetContent()
	  allowing to grab the content without forcing allocations.
	* python/libxml2class.txt doc/libxml2-api.xml: rebuilt the API
	* xpath.c xmldwalk.c: removed a couple of comment errors.

Sun Oct 19 16:39:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch from Chris Anderson to change back
	  memcmp with CMPx()

Sun Oct 19 16:24:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed to not send NULL to %s printing
	* python/tests/error.py result/HTML/doc3.htm.err
	  result/HTML/test3.html.err result/HTML/wired.html.err
	  result/valid/t8.xml.err result/valid/t8a.xml.err: cleaning
	  up some of the regression tests error

Sun Oct 19 15:31:43 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/nanohttp.h include/libxml/parserInternals.h 
	  include/libxml/xmlIO.h nanohttp.c parserInternals.c xmlIO.c:
	  Fixed the HTTP<->parser interraction, which should fix 2 long
	  standing bugs #104790 and #124054 , this also fix the fact that
	  HTTP error code (> 400) should not generate data, we usually
	  don't want to parse the HTML error information instead of the
	  resource looked at.

Sun Oct 19 19:20:48 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: enhanced the installation of tutorial files
	  to avoid installing CVS subdirectories (bug 122943)

Sun Oct 19 17:33:27 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c: fixed segfault when input file not present
	* tree.c: changed output formatting of XML_CDATA_SECTION
	  (bug 120917)

Sun Oct 19 00:15:38 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* include/libxml/parserInternals.h HTMLparser.c HTMLtree.c
	  SAX2.c catalog.c debugXML.c entities.c parser.c relaxng.c
	  testSAX.c tree.c valid.c xmlschemas.c xmlschemastypes.c
	  xpath.c: Changed all (?) occurences where validation macros
	  (IS_xxx) had single-byte arguments to use IS_xxx_CH instead
	  (e.g. IS_BLANK changed to IS_BLANK_CH).  This gets rid of
	  many warning messages on certain platforms, and also high-
	  lights places in the library which may need to be enhanced
	  for proper UTF8 handling.

Sat Oct 18 20:34:18 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h,
	  doc/apibuild.py: enhanced to include enough comments to
	  make the api doc generation happy.

Sat Oct 18 07:28:25 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c xmlIO.c include/libxml/nanohttp.h: starting work
	  to fix the HTTP/XML parser integration.

Sat Oct 18 11:04:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: added new APIs
	  for creating reader from sources or reusing a reader with
	  a new source, like the xmlReadxx and xmlCtxtReadxxx
	* win32/libxml2.def.src doc/libxml2-api.xml doc/apibuild.py
	  doc/Makefile.am: regenerated the APIs
	* doc/xml.html: applied a patch from Stefan Kost for namesapce docs

Sat Oct 18 12:46:02 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h,
	  include/libxml/parserInternals.h: enhanced macros to avoid
	  breaking ABI from previous versions.
	* catalog.c, parser.c, tree.c: modified to use IS_* macros
	  defined in parserInternals.h.  Makes maintenance much easier.
	* testHTML.c, testSAX.c, python/libxml.c: minor fixes to avoid
	  compilation warnings
	* configuration.in: fixed pushHTML test error; enhanced for
	  better devel (me) testing

Fri Oct 17 14:38:54 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* legacy.c: remove the warning for startDocument(), as it is used by
	  glade (or glade-python)
	* parser.c relaxng.c xmlschemastypes.c: fixed an assorted set of
	  invalid accesses found by running some Python based regression
	  tests under valgrind. There is still a few leaks reported by the
	  relaxng regressions which need some attention.
	* doc/Makefile.am: fixed a make install problem c.f. #124539
	* include/libxml/parserInternals.h: addition of xmlParserMaxDepth
	  patch from crutcher

Wed Oct 15 12:47:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: Marc Liyanage pointed out that xmlCleanupParser()
	  was missing xmlCleanupInputCallbacks and xmlCleanupOutputCallbacks
	  calls.

Wed Oct 15 10:16:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* vms/build_libxml.com trionan.c: VMS patch from Craig A. Berry

Mon Oct 13 21:46:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: small fix from Bjorn Reese

Mon Oct 13 15:59:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix a call missing arguments

Sun Oct 12 18:42:18 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRanges.py, chvalid.c, include/libxml/chvalid.h: fixed
	  a bug in the range search; enhanced range generation (inline code
	  if a small number of intervals); enhanced the readability of the
	  output files.

Sun Oct 12 00:52:14 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* chvalid.def chvalid.c include/libxml/chvalid.h: rebuilt 
	  chvalid.def from scratch based on XML 2nd edition REC
	  and regenerated the code.

Sat Oct 11 22:54:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: removed some annoying warnings
	* chvalid.def chvalid.c include/libxml/chvalid.h: fixed a bug
	  in the PubidChars definition, regenerated, there is still
	  a bug left somewhere
	* genChRanges.py: save the header directly in include/libxml/
	* configure.in: I generated a 2.6.0beta6 earlier today

Sat Oct 11 23:32:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* fixed small error on previous commit (chvalid.h in
	  base dir instead of include directory)

Sat Oct 11 23:11:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* genChRange.py, chvalid.def, chvalid.c, include/libxml/chvalid.h:
	  new files for a different method for doing range validation
	  of character data.
	* Makefile.am, parserInternals.c, include/libxml/Makefile.am,
	  include/libxml/parserInternals.h: modified for new range method.
	* catalog.c: small enhance for warning message (using one
	  of the new range routines)

Sat Oct 11 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/valid.h: adding an serror field to
	  the validation context breaks the ABI for the xmlParserCtxt
	  structure since it's embedded by content and not by reference

Sat Oct 11 12:46:49 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: patch from Mike Hommey
	* threads.c: applied Windows patch from Jesse Pelton and Stephane
	  Bidoul
	* parser.c: fix the potentially nasty access to ctxt->serror
	  without checking first that the SAX block is version 2

Fri Oct 10 21:34:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed a nasty bug with interning some text strings
	* configure.in: prepare for beta5 of 2.6.0
	* libxml.h nanoftp.c nanohttp.c xmlIO.c include/libxml/xmlerror.h:
	  better error handling for I/O and converted FTP and HTTP
	* parser.c: fixed another bug

Fri Oct 10 16:45:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed uninitialized new field.
	* result/VC/OneID2 result/relaxng/*.err: fixed a typo updating
	  all messages

Fri Oct 10 16:19:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: make room in Doc, Element, Attributes
	  for PSVI type informations.

Fri Oct 10 16:08:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c c14n.c catalog.c error.c globals.c parser.c
	  parserInternals.c relaxng.c valid.c xinclude.c xmlIO.c xmlregexp.c
	  xmlschemas.c xpath.c xpointer.c include/libxml/globals.h
	  include/libxml/parser.h include/libxml/valid.h 
	  include/libxml/xmlerror.h: Setting up the framework for structured
	  error reporting, touches a lot of modules, but little code now
	  the error handling trail has been cleaned up.

Fri Oct 10 14:29:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* c14n.c include/libxml/xmlerror.h: converted the C14N module too

Fri Oct 10 13:40:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: cleanup
	* xpointer.c include/libxml/xmlerror.h: migrated XPointer module
	  to the new error mechanism

Fri Oct 10 12:49:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c xmlschemas.c: a bit of cleanup
	* result/schemas/*.err: updated with the new result strings

Fri Oct 10 03:58:39 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* xpath.c: fixed bug 124061

Fri Oct 10 02:47:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* encoding.c: fix a funny typo
	* error.c xmlschemas.c xmlschemastypes.c include/libxml/xmlerror.h:
	  converted the Schemas code to the new error handling. PITA,
	  still need to check output from regression tests.

Thu Oct  9 15:13:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/xmlerror.h: converted too
	* tree.c: small cleanup

Thu Oct  9 13:44:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: comment fix
	* catalog.c include/libxml/xmlerror.h: migrating the catalog code
	  to the new infrastructure

Thu Oct  9 00:36:03 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: final error handling cleanup
	* xinclude.c error.c: converted XInclude to the new error handling
	* include/libxml/xmlerror.h: added XInclude errors

Wed Oct  8 23:31:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: bug in compression saving was crashing galeon
	  reported by teuf

Wed Oct  8 21:18:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c tree.c xmlIO.c xmllint.c: more cleanup through the
	  I/O error path

Wed Oct  8 20:57:27 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: better handling of error cases

Wed Oct  8 13:51:14 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c xmllint.c include/libxml/xmlerror.h: first pass at
	  cleaning up error handling in the I/O module.

Wed Oct  8 10:52:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c include/libxml/xmlerror.h: error handling
	  cleanup of the Regexp module.

Wed Oct  8 01:09:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: converting the tree module too
	* error.c include/libxml/xmlerror.h: created a simpler internal
	  error reporting function.

Tue Oct  7 23:19:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c include/libxml/xmlerror.h include/libxml/xpath.h
	  include/libxml/xpathInternals.h xpath.c: cleaning up XPath
	  error reporting that time. 
	* threads.c: applied the two patches for TLS threads
	  on Windows from Jesse Pelton
	* parser.c: tiny safety patch for xmlStrPrintf() make sure the
	  return is always zero terminated. Should also help detecting
	  passing wrong buffer size easilly.
	* result/VC/* result/valid/rss.xml.err result/valid/xlink.xml.err:
	  updated the results to follow the errors string generated by
	  last commit.

Tue Oct  7 14:16:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/xmlerror.h: last cleanup of error
	  handling in the Relax-NG module.

Tue Oct  7 13:30:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* error.c relaxng.c include/libxml/xmlerror.h: switched Relax-NG
	  module to teh new error reporting. Better default report, adds
	  the element associated if found, context and node are included
	  in the xmlError
	* python/tests/reader2.py: the error messages changed.
	* result/relaxng/*: error message changed too.

Mon Oct  6 10:46:35 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.bcb win32/Makefile.mingw win32/Makefile.msvc
	  win32/configure.js: applied patch from Stéphane Bidoul to
	  fix the compilation of 2.6.0 code on Win32

Mon Oct  6 10:16:30 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: fixing the script
	* parser.c: replace sequences of RAW && NXT(.) == '.' with
	  memcmp calls, seems to not break conformance, slightly inflate
	  the size of the gcc generated code though.

Sun Oct  5 23:30:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c parser.c valid.c include/libxml/parserInternals.h:
	  more cleanup of error handling in parserInternals, sharing the
	  routine for memory errors.

Sun Oct  5 15:49:14 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c Makefile.am legacy.c parser.c parserInternals.c
	  include/libxml/xmlerror.h: more code cleanup, especially around
	  error messages, the HTML parser has now been upgraded to the new
	  handling.
	* result/HTML/*: a few changes in the resulting error messages

Sat Oct  4 23:06:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: more error/warning
	  handling cleanups, the XML parser module should be okay now.

Sat Oct  4 01:58:27 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in xmldwalk.c include/libxml/Makefile.am
	  include/libxml/xmldwalk.h include/libxml/xmlversion.h.in:
	  integrated the xmlDocWalker API given by Alfred Mickautsch,
	  and providing an xmlReader like API but working on a xmlDocPtr.

Sat Oct  4 00:18:29 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: more cleanup in make tests
	* error.c valid.c parser.c include/libxml/xmlerror.h: more work
	  in the transition to the new error reporting strategy.
	* python/tests/reader2.py  result/VC/* result/valid/*:
	  few changes in the strings generated by the validation output

Fri Oct  3 00:19:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: changed 'make tests' to use a concise output,
	  scrolling to see where thing broke wasn't pleasant
	* configure.in: some beta4 preparation, but not ready yet
	* error.c globals.c include/libxml/globals.h include/libxml/xmlerror.h:
	  new error handling code, last error informations are stored
	  in the parsing context or a global variable, new APIs to
	  handle the xmlErrorPtr type.
	* parser.c parserInternals.c valid.c : started migrating to the
	  new error handling code, it's a royal pain.
	* include/libxml/parser.h include/libxml/parserInternals.h:
	  moved the definition of xmlNewParserCtxt()
	* parser.c: small potential buffer access problem in push code
	  provided by Justin Fletcher
	* result/*.sax result/VC/PENesting* result/namespaces/*
	  result/valid/*.err: some error messages were sligthly changed.

Thu Oct  2 13:01:13 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* include/libxml/parser.h parser.c: introduced xmlStrPrintf
	function (wrapper around snprintf)

Wed Oct  1 21:12:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: Fix error on output of high codepoint charref like
	  &#x10FFFF; , reported by Eric Hanchrow

Wed Oct  1 14:20:10 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c include/libxml/DOCBparser.h: let's see how much
	  of a pain murrayc is really gonna be.

Wed Oct  1 11:03:40 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: Applied fix for bug #123481 reported by Peter Derr

Tue Sep 30 15:34:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c legacy.c parser.c: made the predefined entities
	  static predefined structures to avoid the work, memory and
	  hazards associated to initialization/cleanup.

Tue Sep 30 14:30:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c Makefile.am configure.in legacy.c parser.c
	  parserInternals.c testHTML.c xmllint.c include/libxml/HTMLparser.h
	  include/libxml/parser.h include/libxml/parserInternals.h
	  include/libxml/xmlversion.h.in: added a new configure
	  option --with-push, some cleanups, chased code size anomalies.
	  Now a library configured --with-minimum is around 150KB,
	  sounds good enough.

Tue Sep 30 12:31:00 AEST 2003 Malcolm Tredinnick <malcolm@commsecure.com.au>

	* libxml-2.0-uninstalled.pc.in: New file for building against
	uninstalled libxml2 builds.
	* configure.in, Makefile.am: Support the *-uninstalled.pc file.
	* .cvsignore: Ignore the new generated *.pc file.

Tue Sep 30 02:38:16 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am SAX.c SAX2.c configure.in globals.c parser.c
	  parserInternals.c testReader.c testSAX.c xmlIO.c xmllint.c
	  xmlreader.c example/gjobread.c include/libxml/xmlversion.h.in:
	  added 2 new configure option: --with-reader --with-sax1
	  to allow removing the reader or non-xmlReadxxx() interfaces.

Mon Sep 29 19:58:26 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in entities.c tree.c valid.c xmllint.c
	  include/libxml/tree.h include/libxml/xmlversion.h.in:
	  Adding a configure option to remove tree manipulation
	  code which is not strictly needed by the parser.

Mon Sep 29 15:23:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: last finishing touch to the BeOS
	  patch from Marcin 'Shard' Konicki

Mon Sep 29 15:15:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c SAX2.c c14n.c catalog.c configure.in debugXML.c
	  encoding.c entities.c nanoftp.c nanohttp.c parser.c relaxng.c
	  testAutomata.c testC14N.c testHTML.c testRegexp.c testRelax.c
	  testSchemas.c testXPath.c threads.c tree.c valid.c xmlIO.c
	  xmlcatalog.c xmllint.c xmlmemory.c xmlreader.c xmlschemas.c
	  example/gjobread.c include/libxml/HTMLtree.h include/libxml/c14n.h
	  include/libxml/catalog.h include/libxml/debugXML.h
	  include/libxml/entities.h include/libxml/nanohttp.h
	  include/libxml/relaxng.h include/libxml/tree.h
	  include/libxml/valid.h include/libxml/xmlIO.h
	  include/libxml/xmlschemas.h include/libxml/xmlversion.h.in
	  include/libxml/xpathInternals.h python/libxml.c:
	  Okay this is scary but it is just adding a configure option
	  to disable output, this touches most of the files.

Mon Sep 29 12:53:56 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: better fix, avoids breaking the python bindings

Mon Sep 29 11:21:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: fix a compilation problem when configuring
	  with debug but without mem-debug

Sun Sep 28 20:53:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup, creating a new legacy.c module,
	  made sure make tests ran in reduced conditions
	* SAX.c SAX2.c configure.in entities.c globals.c parser.c
	  parserInternals.c tree.c valid.c xlink.c xmlIO.c xmlcatalog.c
	  xmlmemory.c xpath.c xmlmemory.c include/libxml/xmlversion.h.in:
	  increased the modularization, allow to configure out 
	  validation code and legacy code, added a configuration
	  option --with-minimum compiling only the mandatory code
	  which then shrink to 200KB.

Sun Sep 28 02:15:07 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix a bug raised by the Mips compiler.
	* include/libxml/SAX.h include/libxml/parser.h: move the 
	  SAXv1 block definitions to parser.h fixes bug #123380
	* xmlreader.c include/libxml/xmlreader.h: reinstanciate
	  the attribute and element pool borken 2 commits ago.
	  Start playing with an entry point to preserve a subtree.
	* entities.c: remove a warning.

Sat Sep 27 12:19:38 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, parser.c, relaxng.c: further (final?) minor
	  changes for compilation warnings. No change to logic.

Fri Sep 26 18:03:42 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* parser.c: fixed small problem with missing entities (test/ent2)

Sat Sep 27 01:25:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: William's change allowed to spot a nasty bug in xmlDoRead
	  if the result is not well formed that ctxt->myDoc is not NULL
	  and uses the context dictionnary.

Fri Sep 26 21:09:34 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: other patches from William Brack to avoid
	  compilation warnings on AIX.

Fri Sep 26 11:03:08 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c, entities.c, xmlreader.c: minor change to
	  avoid compilation warnings on some (e.g. AIX) systems

Fri Sep 26 16:49:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixed a backward compatibility problem
	  when formatting "deprecated SAXv1 function ignorableWhitespace"
	  could be reproduced by xmllint --format

Fri Sep 26 15:50:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml: rebuilt the API
	* xmllint.c doc/xmllint.1 doc/xmllint.xml: added the new options
	  --nocdata and --nsclean to remove CDATA section and surperfluous
	  namespace declarations
	* parser.c SAX2.c: implementation of the 2 new options

Fri Sep 26 14:41:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c testHTML.c xmllint.c include/libxml/HTMLparser.h:
	  added the same htmlRead APIs than their XML counterparts
	* include/libxml/parser.h: new parser options, not yet implemented,
	  added an options field to the context.
	* tree.c: patch from Shaun McCance to fix bug #123238 when ]]>
	  is found within a cdata section.
	* result/noent/cdata2 result/cdata2 result/cdata2.rdr
	  result/cdata2.sax test/cdata2: add one more cdata test

Thu Sep 25 23:03:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmllint.c doc/libxml2-api.xml include/libxml/parser.h:
	  Changed the new xmlRead/xmlCtxtRead APIs to have an extra
	  base URL parameter when not loading from a file or URL.

Thu Sep 25 16:23:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing a beta3 solving the ABI problems
	* globals.c parser.c parserInternals.c testHTML.c HTMLparser.c SAX.c
	  include/libxml/globals.h include/libxml/SAX.h: make sure the
	  global variables for the default SAX handler are V1 ones to
	  avoid ABI compat problems.
	* xmlreader.c: cleanup of uneeded code
	* hash.c: fix a comment

Thu Sep 25 14:16:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c hash.c parser.c include/libxml/xmlexports.h 
	  include/libxml/xmlmemory.h include/libxml/xmlversion.h.in:
	  fixing some comments to avoid warnings from apibuild.py

Wed Sep 24 23:42:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: patch from Stéphane Bidoul for configuring
	  the beta2 version #123104

Wed Sep 24 23:17:59 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: adding repeated parsing and validating tests
	* SAX2.c parser.c tree.c include/libxml/parser.h: make the new
	  DOM tree building interfaces use the dictionary from the 
	  parsing context to build the element and attributes names
	  as well as formatting spaces and short text nodes
	* include/libxml/dict.h dict.c: added some reference counting
	  for xmlDictPtr because they can be shared by documents and
	  a parser context.
	* xmlreader.c: a bit of cleanup, remove the specific tree freeing
	  functions and use the standard ones now.
	* xmllint.c: add --nodict
	* python/libxml.c: fix a stupid bug so that ns() works on 
	  attribute nodes.

Tue Sep 23 23:07:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: adding a new set of
	  API for parsing xmlReadDoc() xmlReadFile() ... xmlReadIO()
	  and xmlCtxtReadDoc() ... xmlCtxtReadIO(). That with
	  a clear define of xmlParserOption, xmlCtxtUseOptions()
	  should simplify custom parsing without being tempted to
	  use global variables, and xmlCtxtReset() should allow reuse
	  of a context for multiple parsing.
	* xmllint.c: switched to use xmlReadXXX, allow options to
	  be used simultaneously with less troubles.
	* tree.c: simple warning removal
	* doc/apibuild.py: small fix
	* doc/libxml2-api.xml win32/libxml2.def.src: updated

Tue Sep 23 11:15:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: revert xmlCreateDocParserCtxt() since this break
	  the parseDoc() python bindings

Tue Sep 23 11:00:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: make sure xmlDetectSAX2() is called only at 
	  parsing time to avoid breaking apps changing the SAX
	  callbacks after context allocation, change xmlCreateDocParserCtxt()
	  to use an immutable buffer instead of a copy

Tue Sep 23 09:40:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied patch from Markus Keim fixing a problem
	  with I/O callback registration.
	* include/libxml/xmlerror.h: fixed #122994 comment numbering
	  for xmlParserErrors

Mon Sep 22 12:21:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: the uri arg to xmlNodeSetBase is
	  really a const xmlChar*
	* xmlreader.c include/libxml/xmlreader.h: addin the
	  xmlTextReaderConstString() to get an interned string from
	  the reader

Sun Sep 20 17:22:20 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c: fixed a warning message (trivial)
	* doc/search.php: removed incorrect warning message when word
	  search not found in last of multiple tables (bug 119535)

Fri Sep 19 14:26:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing a 2.6.0-beta2 release
	* xmlIO.c: avoid a warning
	* tree.c: avoid duplicate code in xmlReplaceNode as pointed out
	  by Chris Ryland
	* include/libxml/dict.h: add a QName access lookup to the
	  dictionary.
	* xmlreader.c include/libxml/xmlreader.h: adding const access
	  based on the dictionary interface for string read from the
	  reader, the node content access is still TODO, it's too different

Fri Sep 19 00:01:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixing namespace DTD validations
	* result/valid/ns2.xml result/valid/ns.xml: the output of defaulted
	  namespaces is slightly different now.
	* Makefile.am: report the memory used in Timingtests (as well as time)

Thu Sep 18 15:29:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: add streaming on memory regression tests, found
	  bad bugs in the reader interface
	* xmlreader.c: fixing bugs w.r.t. very large names, and special
	  condition in end of file.
	* xmlIO.c tree.c include/libxml/tree.h include/libxml/xmlIO.h:
	  adding immutable buffers, and parser input based on those,
	  but this should not be used (yet) for general parsing
	* parser.c: added a comment about using immutable buffers for
	  general parsing.
	* result/bigname.xml.rdr result/bigname2.xml.rdr: fixing the
	  output of the regression tests
	* xmllint.c: using the immutable buffers when streaming on
	  mmaped file (--stream --memory)

Thu Sep 18 12:04:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c: the last patch broke unicity of returned strings, removed

Thu Sep 18 00:31:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: add a Timingtests target to check bad behaviour
	  from the streaming engine
	* dbgen.pl dbgenattr.pl: perl script to generate big instances
	* xmlreader.c: fix a bad behaviour on large buffer inputs

Wed Sep 17 23:25:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c xmlreader.c: two small improvements

Wed Sep 17 22:53:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: avoid a leak with previous patch

Wed Sep 17 22:06:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: use stderr and not stdout for default errors
	  in python environment bug #122552

Wed Sep 17 21:33:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: small fix from Rob Richards for input filename
	* xmllint.c: fixes for --repeat and --memory/--stream for speed tests
	* xmlIO: adding a guard in one function

Wed Sep 17 15:57:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c xmlreader.c include/libxml/parser.h: more performance hunting
	  reducing memory allocation and free and avoiding expensive routines

Wed Sep 17 12:23:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c parser.c parserInternals.c xmlreader.c: started messing
	  seriously with per-document dict and element and attribute nodes
	  reuse in the xmlReader. This seems to lead to an interesting
	  speedup of the xmlReader already.

Wed Sep 17 01:07:56 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h: do string allocations in large
	  pools, allowing to find if a string pertain to a dict quickly
	* xmllint.c: fix --stream --repeat --timing
	* Makefile.am: the testThreads run output should be seen.

Mon Sep 15 16:46:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c include/libxml/parser.h: starting work on reusing the
	  parser dictionary for the element and attribute tag names.
	  Add pools for Element and Attributes in the parser context,
	  which should help speeding up the reader.
	* Makefile.am result/*.rdr : adding non-python reader regression
	  tests.

Mon Sep 15 14:54:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c parser.c valid.c: starting to cleanup some of the
	  problems exposed by the W3C/NIST regression suite.
	* result/ent7.sax result/xml2.sax: small fixes.

Mon Sep 15 11:46:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: more parser error factoring

Sun Sep 14 21:53:39 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLtree.c: Fixed bug 121394 - missing ns on attributes

Sun Sep 14 21:43:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: factoring of more 
	  error handling code, serious size reduction and more lisibility
	  of the resulting code.
	* parserInternals.c parser.c include/libxml/parserInternals.h
	  include/libxml/parser.h: changing the way VC:Proper Group/PE Nesting
	  checks are done, use a counter for entities. Entities where freed and
	  reallocated at the same address failing the check.
	* tree.c: avoid a warning
	* result/valid/* result/VC/*: this slightly changes some validation
	  error messages.

Sun Sep 14 11:03:27 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* valid.c: fixed bug 121759 - early declaration of
	  attribute-list in external DTD

Sat Sep 13 14:42:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/xmlerror.h: starting cleaning up
	  error handling, factorize error processing
	* doc/xmllint.html: update of the page, remove --sgml

Sat Sep 13 02:13:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am DOCBparser.c parserInternals.c testDocbook.c
	  xmllint.c doc/xmllint.xml doc/xmllint.1: removing the 
	  broken pseudo SGML DocBook parser code.

Fri Sep 12 17:24:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix a problem with strcpy() in xmlXPathFormatNumber()
	  valgrind pointed out the strings overlapped. cleanup .

Fri Sep 12 11:43:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied speedup to xmlSearchNs() as suggested by
	  Luca Padovani. Cleaned up xmlSearchNsByHref() in the process
	  applying the same trick.

Fri Sep 12 01:36:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c tree.c include/libxml/parser.h
	  include/libxml/xmlerror.h: adding namespace checkings
	  while making sure they still parse as wellformed documents.
	  Add an nsWellFormed status report to the context, and 
	  provide new appropriate error codes.
	* Makefile.am result/namespaces/* test/namespaces/*: add 
	  specific regression testing for the new namespace support
	* test/att5 result/noent/att5 result/att5 result/att5.sax:
	  add more coverage for the attribute parsing and normalization
	  code.

Fri Sep 12 01:34:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* threads.c: backport of a thread bugfix from 2_5_X branch

Thu Sep 11 18:29:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a bug in one corner case of attribute parsing.

Thu Sep 11 16:21:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* : 2.6.0beta1 changes
	* SAX2.c hash.c parser.c parserInternals.c: Fixing attribute
	  normalization, might not be totally fixed but this should 
	  make sure SAX event provide the right strings for attributes
	  except entities for which libxml2 is different by default
	  This should fix #109564
	* result/attrib.xml.sax result/ent3.sax result/p3p.sax: minor changes
	  in attribute callback values
	* result/c14n/with-comments/example-4
	  result/c14n/without-comments/example-4: this also fixes a subtle
	  bug in the canonicalization tests.

Wed Sep 10 12:38:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	Time to commit 3 days of work rewriting the parser internal,
	fixing bugs and migrating to SAX2 interface by default. There
	is some work letf TODO, like namespace validation and attributes
	normalization (this break C14N right now)
	* Makefile.am: fixed the test rules
	* include/libxml/SAX2.h include/libxml/parser.h
	  include/libxml/parserInternals.h SAX2.c parser.c
	  parserInternals.c: changing the parser, migrating to SAX2,
	  adding new interface to switch back to SAX1 or initialize a
	  SAX block for v1 or v2. Most of the namespace work is done
	  below SAX, as well as attribute defaulting
	* globals.c: changed initialization of the default SAX handlers
	* hash.c tree.c include/libxml/hash.h: added QName specific handling
	* xmlIO.c: small fix
	* xmllint.c testSAX.c: provide a --sax1 switch to test the old
	  version code path
	* result/p3p result/p3p.sax result/noent/p3p test/p3p: the new code
	  pointed out a typo in a very old test namespace

Sun Sep  7 19:58:33 PTD 2003 William Brack <wbrack@mmm.com.hk>

	* xmlIO.c include/libxml/xmlIO.h parser.c: Implemented detection
	  of compressed files, setting doc->compressed appropriately
	  (bug #120503).

Sun Sep  7 22:53:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: try to cope with the fact that apps may still
	  have allocated smaller SAX callbak block

Sun Sep  7 11:11:45 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c: allow to give -1 for undefined length in lookups
	* include/libxml/parser.h parser.c parserInternals.c testSAX.c:
	  first round of work on the new SAX2 interfaces, the API
	  will change but commiting before changing for historical
	  reference.

Sat Sep  6 10:55:01 PTD 2003 William Brack <wbrack@mmm.com.hk>

	* SAX2.c, xmlIO.c: fixed bug #121210 (callback to sax->error,
	  sax->warning with wrong params).

Fri Sep  5 10:33:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h: patch from Stéphane Bidoul to export
	  globals entry points to the python bindings

Wed Sep  3 15:24:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: when creating a DOCTYPE use "html" lowercase
	  by default instead of "HTML"
	* parser.c xmlreader.c: optimization, gain a few % parsing speed by
	  avoiding calls to "areBlanks" when not needed.
	* include/libxml/parser.h include/libxml/tree.h: some structure
	  extensions for future work on using per-document dictionaries.

Wed Sep  3 15:08:06 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am results/*.sax SAXResult/*: removing the SAXresults
	  tree, keeping result in the same tree, added SAXtests to the
	  default "make tests"

Tue Sep  2 15:59:04 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlexports.h: defined additional macros which
	  affect exports and added mingw section

Mon Sep  1 15:15:18 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/index.py: fixed problem parsing xhtml docs
	* doc/xmlreader.html,doc/guidelines.html: small modification
	  to avoid problem in python parsing.
	* doc/search.php: fixed upper case filename problem for XSLT docs

Mon Sep  1 22:55:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: patch from Mark Vakoc that allows compiling 
	  with XInclude but without XPointer support.

Mon Sep  1 22:31:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in xml2-config.in: Applied a patch from Kevin P. Fleming
	  to add --libtool-libs option to xml2-config script.

Sun Aug 31 21:52:12 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/README.docs, doc/Makefile.am: new file added,
	  giving some description of the documentation generation process
	* doc/search.php: fixed problem with upper case on filenames

Fri Aug 29 12:25:01 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: updates by Eric Zurcher

Thu Aug 28 22:58:38 PDT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/apibuild.py, doc/libxml2-api.xml: enhanced code
	  to compensate for pollution from Igor's header taint
	  (quick before Daniel notices)

Thu Aug 28 23:01:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX2.c: fixed a namespace error on attribute reporting bug
	  pointed out by Tobias Reif
	* test/p3p result/p3p result/noent/p3p: this test case was wrong
	  using xmlsn instead of xmlns...

Thu Aug 28 18:25:07 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/globals.h include/libxml/xmlexports.h: fixed
	  typos reported by Mark Vakoc

Thu Aug 28 08:59:51 MDT 2003 John Fleck <jfleck@inkstain.net>

	add:
	* doc/tutorial/api.html
	* doc/tutorial/ar01s09.html
	* doc/tutorial/includexpath.c
	updated
	* doc/tutorial/*.html
	fix my bad - forgot to check in new files when I last
	updated

Thu Aug 28 14:31:13 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.bcb: new file, support for Borland C++
	* xmllint.c: fixed time inclusion for various compilers

Thu Aug 28 12:32:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c parserInternals.c DOCBparser.c HTMLparser.c: added
	  few casts to shut the compiler warnings

Thu Aug 28 12:23:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.* win32/configure.js: fixed for mingw

Thu Aug 28 10:01:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c threads.c: fixing bug #120870 try to avoid problem
	  with uninitialized mutexes

Wed Aug 27 16:12:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed an error reporting bug in Relax-NG when we end
	  up with multiple states, select the "best" one. Fix #120682
	* result/relaxng/tutor11_2_3.err: small change resulting 

Wed Aug 27 11:25:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: applied base64 support patch from Anthony Carrico

Wed Aug 27 10:58:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/[threads-xpointer].h: realigned parameters
	  after taint

Wed Aug 27 09:59:54 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlexports.h: fixed defs for Borland compiler,
	  as reported by Eric Zurcher

Tue Aug 26 15:54:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed bug #120386 again a problem introduced when
	  trying to reuse automata for content validation. Fix a bug report
	  problem on zeroOrMore
	* result/relaxng/tutor3_7_err: change slightly error reporting.

Mon Aug 25 13:24:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: make sure the new header will
	  be included when generating a new distribution.

Mon Aug 25 12:37:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a couple of stupid bugs in the state allocation
	  routines which led to bug #120040 and the ones reported by
	  Martijn Faassen

Mon Aug 25 12:37:23 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/parserInternals.h include/libxml/relaxng.h
	  include/libxml/SAX.h include/libxml/SAX2.h: realigned the
	  parameters after taint.

Mon Aug 25 11:16:01 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/xmlversion.h.in: moved export defs to a separate
	  file for consistency.
	* include/libxml/xmlexports.h: new file, contains export defs.

Mon Aug 25 11:01:49 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* include/libxml/*.h genUnicode.py: exportability taint
	  of the headers.

Thu Aug 21 12:37:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: make the deprecated interfaces log an error message
	  to be sure it won't get used.

Thu Aug 21 00:50:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am SAX2.c include/libxml/Makefile.am include/libxml/SAX2.h:
	  Adding new version of the SAX interface, it's not there yet,
	  currently just preparing the work
	* globals.c parser.c SAX.c include/libxml/SAX.h 
	  include/libxml/globals.h include/libxml/parser.h: doing some
	  refactoring of the SAXv1 interfaces, obsoleting a bunch of them
	  while keeping functionalities, preparing SAX2 integration.
	* dict.c: small cleanup.

Wed Aug 20 00:20:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixes a small bug introduced in last commit and detected
	  by valgrind.

Tue Aug 19 16:54:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c hash.c: optimization when freeing hash tables.
	* parser.c xmlIO.c include/libxml/tree.h: some tuning of buffer
	  allocations
	* parser.c parserInternals.c include/libxml/parser.h: keep a
	  single allocated block for all the attributes callbacks,
	  avoid useless malloc()/free()
	* tree.c: do not realloc() when growing a buffer if the buffer
	  ain't full, malloc/memcpy/free avoid copying memory.

Mon Aug 18 18:37:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c doc/xmllint.xml doc/xmllint.1: added option
	  --dtdvalidfpi for Tobias Reif

Mon Aug 18 14:03:03 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* dict.c include/libxml/dict.h Makefile.am include/libxml/Makefile.am:
	  new dictionary module to keep a single instance of the names used
	  by the parser
	* DOCBparser.c HTMLparser.c parser.c parserInternals.c valid.c:
	  switched all parsers to use the dictionary internally
	* include/libxml/HTMLparser.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/valid.h:
	  Some of the interfaces changed as a result to receive or return
	  "const xmlChar *" instead of "xmlChar *", this is either
	  insignificant from an user point of view or when the returning
	  value changed, those function are really parser internal methods
	  that no user code should really change
	* doc/libxml2-api.xml doc/html/*: the API interface changed and
	  the docs were regenerated

Sun Aug 17 23:05:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied patch to xmlCleanupParser from Dave Beckett

Sat Aug 16 22:53:42 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/parsedecl.py, doc/libxml2-refs.xml, doc/API*.html:
	  fixed part (2) of bug 119535 (wrong alpha case on filenames)

Sat Aug 16 20:35:28 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/API*.html, doc/html/*: regenerated API documentation
	  for xmlsoft.org (part of Bug 119535)

Fri Aug 15 14:58:37 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c, threads.c, include/libxml/HTMLparser.h,
	  doc/libxml2-api.xml: Minor changes to comments, etc. for
	  improving documentation generation
	* doc/Makefile.am: further adjustment to auto-generation of
	  win32/libxml2.def.src

Fri Aug 15 02:24:20 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* News configure.in: preparing libxml2-2.5.10 release
	* doc/* : updated the doc and rebuilt

Fri Aug 15 01:55:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing the xmlSAXParseDTD bug #119536 raised by
	  Malcolm Tredinnick with the patch he suggested.

Fri Aug 15 01:37:10 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: allocation error #119784 raised by Oliver Stoeneberg

Fri Aug 15 00:41:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c: fixing an use of strcpy() where both strings overlap
	  pointed out by valgrind.

Thu Aug 14 17:10:39 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c globals.c include/libxml/xmlmemory.h: get rid of
	  some compilation warnings.
	* xinclude.c: fix the performance problem reported by Kevin Ruscoe
	  plus some cleanup and better error reporting.

Thu Aug 14 14:13:43 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applied UTF-16 encoding handling patch provided by
	  Mark Itzcovitz
	* encoding.c parser.c: more cleanup and fixes for UTF-16 when 
	  not having iconv support.

Thu Aug 14 03:19:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in example/Makefile.am libxml.h nanoftp.c
	  nanohttp.c xmllint.c: Applied patch from Mikhail Grushinskiy for
	  mingw compiler on Windows.

Thu Aug 14 02:28:36 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed the serious CPU usage problem reported by
	  Grant Goodale
	* HTMLparser.c: applied patch from Oliver Stoeneberg about a free
	  missing in htmlSAXParseDoc

Tue Aug 12 22:48:10 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* doc/Makefile.am: Removed dependency from libxml2.def.src

Tue Aug 12 18:55:08 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* autogen.sh: took away the requirement for automake-1.4,
	  changed the messages for getting auto* tools to current
	  gnu pages.
	* configure.in: added check for Linux Dec alpha requiring
	  -ieee flag, fixed test for ipv6
	* trionan.c: fixed problem for compiling on Linux Dec alpha
	  using native compiler
	* doc/Makefile.am: implemented regeneration of win32/libxml2.def.src
	  whenever libxml2-api.xml is changed.

Mon Aug 11 17:02:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: cleaning up a problem when parsing UTF-16 and libiconv
	  is not used.

Sun Aug 10 08:13:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/libxml2.def.src: renerated with fixed libxml2-api.xml

Sun Aug 10 00:22:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* News configure.in: preparing libxml2-2.5.9 release
	* doc/* : updated the doc and rebuilt

Sat Aug  9 20:00:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlreader.h doc/libxml2-api.xml: changing an enum
	  definition to get a correct API XML description. This was apparently
	  breaking Windows build.

Sat Aug  9 13:41:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed a nasty bug #119387, bad heuristic from
	  the progressive HTML parser front-end on large character data
	  island leading to an erroneous end of data detection by the
	  parser. Some cleanup too to get closer from the XML progressive
	  parser.

Sat Aug  9 00:42:47 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/configure.js: Added in support for the ISO8859X
	  module (patch provided by Jesse Pelton)

Fri Aug  8 15:56:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c threads.c: hum try to avoid some troubles
	  when the library is not initialized and one try to save, the 
	  locks in threaded env might not been initialized, playing safe
	* xmlschemastypes.c: apply patch for hexBinary from Charles Bozeman
	* test/schemas/hexbinary_* result/schemas/hexbinary_*: also added
	  his tests to the regression suite.

Fri Aug  8 18:47:38 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* win32/defgen.xsl, win32/libxml2.def.src: Bug 119343
	  (with apologies to Igor) - Enhanced handling of docb and
	  nanohttp.

Thu Aug  7 21:13:22 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* encoding.c: further small changes for warnings when
	  configured with --with-iconv=no

Wed Aug  6 12:32:11 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c trionan.[ch] testThreads.c python/generator.py:
	  further small changes to elminate most of the remaining
	  warnings.

Tue Aug  5 23:51:21 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* error.c HTMLparser.c testC14N.c testHTML.c testURI.c
	  xmlcatalog.c xmlmemory.c xmlreader.c xmlschemastypes.c
	  python/libxml.c include/libxml/xmlmemory.h: small changes
	  to syntax to get rid of compiler warnings.  No changes
	  to logic.

Mon Aug  4 22:40:54 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/html/*: rebuilt the API and docs.

Mon Aug  4 21:40:34 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a small problem in the patch for #118763
	* result/HTML/doc3.htm*: this reverts back to the previous result

Sun Aug  3 21:41:49 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* doc/FAQ.html doc/xml.html: applied doc patch to xml.html
	  and rebuilt, apparently some C++ wrappers are not available,
	  c.f. bug #118943

Sun Aug  3 21:30:31 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixing HTML attribute serialization bug #118763
	  applying a modified version of the patch from Bacek
	* result/HTML/doc3.htm*: this modifies the output from one test

Sun Aug  3 21:02:30 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: added a new API to split a
	  QName without generating any memory allocation
	* valid.c: fixed another problem with namespaces on element
	  in mixed content case
	* python/tests/reader2.py: updated the testcase with 
	  Bjorn Reese fix to reader for unsignificant white space
	* parser.c HTMLparser.c: cleanup.

Sun Aug  3 20:55:40 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* catalog.c: trying to fix #118754 of possible recursion in the
	  catalogs. Not fantastically happy about the current fix since
	  it's likely to break under very thread intensive concurrent
	  access to the catalog. Better solution might to keep the depth
	  an extra argument to the resolution functions.

Sun Aug  3 18:56:54 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed bug #118712 about mixed content, and namespaced
	  element names.
	* test/valid/mixed_ns.xml result/valid/mixed_ns*: added a check
	  in the regression tests

Fri Aug 1 23:55:23 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Coninuing work on bug 118559
	* DOCBparser.c: removed 2 unsed vars
	* xmlregexp.c: changed some numeric const to their enum symbols
	* xmlreader.c: changed one var define from int to enum
	  (a little more to be done, awaiting co-ordination)
	* relaxng.c: deleted one unused var
	* xmllint.c: deleted some unused vars, changed one arg
	  val from int to enum
	* testHTML.c, testDocbook.c: changed some arg vals to enum const
	* xmlIO.c: fixed typo from last night (small warning msg)

Thu Jul 31 22:44:33 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Working on bug 118559
	* error.c: deleted unused variable
	* parserInternals.c: deleted unneeded 'const' qualifier
	* parser.c: changed variable type for enum temp storage
	* xmlIO.c: changed debugging var to be inside #ifdef
	* valid.c: removed unused variable
	* HTMLparser.c: removed some unneeded 'const' qualifiers
	* xpath.c: added some type casts, removed some unused vars
	* xinclude.c: added one type cast
	* nanohttp.c: repositioned some #ifdef to avoid unused var
	* nanoftp.c: removed unused var

Wed Jul 30 14:57:55 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied a patch from William Brack about
	  the problem of parsing very large HTML instance with comments
	  as raised by Nick Kew

Wed Jul 30 12:29:38 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: applying cleanup
	  patch from Bjorn Reese for xmlTextReaderNodeType() and 
	  significant whitespace. There is an enum for node type
	  values now.

Wed Jul 30 11:08:21 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: applying patch from Peter Jacobi to added 
	  ISO-8859-x encoding support when iconv is not available
	* configure.in include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h.in: added the glue needed
	  at the configure level and made it the default for Windows

Tue Jul 29 16:43:48 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml2class.txt:
	  patch from Joachim Bauch + cleanup for Relax NG error callbacks
	  in python

Tue Jul 29 12:46:08 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c tree.c: applied Peter Jacobi encoding
	  cleanup patch, and also avoided a possible memory leak

Tue Jul 29 09:28:09 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fix the previous commit

Tue Jul 29 12:28:17 HKT 2003 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: fixed problem with comments reported by Nick Kew
	* encoding.c: added routines xmlUTF8Size and xmlUTF8Charcmp for
	  some future cleanup of UTF8 handling

Mon Jul 28 16:39:14 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied a change suggested by Sean Griffin in bug
	  #118494 about a memory leak in EXSLT

Sun Jul 27 14:30:56 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed a Relax-NG compilation/streaming bug introduced
	  when fixing the previous Relax-NG bugs
	* result/relaxng/*: This slightly changes the output messages of
	  some regression tests.
	* configure.in: added support of -with-fexceptions for nested C++
	  support.

Thu Jul 24 15:46:02 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/apa.html
	* doc/tutorial/apb.html
	* doc/tutorial/apc.html
	* doc/tutorial/apd.html
	* doc/tutorial/ape.html
	* doc/tutorial/apf.html
	* doc/tutorial/apg.html
	* doc/tutorial/aph.html
	* doc/tutorial/ar01s02.html
	* doc/tutorial/ar01s03.html
	* doc/tutorial/ar01s04.html
	* doc/tutorial/ar01s05.html
	* doc/tutorial/ar01s06.html
	* doc/tutorial/ar01s07.html
	* doc/tutorial/ar01s08.html
	* doc/tutorial/index.html
	* doc/tutorial/ix01.html
	* doc/tutorial/xmltutorial.pdf
	* doc/tutorial/xmltutorial.xml
	update tutorial with XPath example

Thu Jul 24 17:07:06 IST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c: fixing a bug about a special case of namespace
	  handling, this closes bug #116841

Wed Jul 23 20:52:36 IST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c result/relaxng/*: checked and fixed the compilation
	  of RNG schemas, fixes a couple of bugs #117097 and #117001 .
	  This slightly changes the output messages of some regression tests.

Wed Jul 23 15:15:08 IST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed an out of bound error #118052 , the good
	  part if that base64 code was not in use yet ...

Tue Jul 22 19:42:15 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.html
	include html version of the xmllint man page, so an
	up-to-date version is visible on the Web

Mon Jul 21 21:53:43 IST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c include/libxml/xinclude.h: added a new API
	  xmlXIncludeProcessTree() to process XInclude only on a subtree
	  this should fix bug #115385

Fri Jul 18 17:11:42 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: adding Get interface for
	  the error callback and parameters of parsing and validation
	  contexts
	* xmlreader.c: patch to fix bug #117702 about incomplete Read()
	  on text nodes.

Wed Jul 16 23:15:53 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: patch from Dodji Seketeli about UTF16 BOM
	  when using the push XML parser.
	* result/utf16bom.xml result/noent/utf16bom.xml test/utf16bom.xml:
	  added the test to the regression suite.

Tue Jul 15 22:03:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c: add xmlThrDefMutex = NULL in xmlCleanupGlobals() 
	  as suggested by Rob Richards

Tue Jul 15 15:30:55 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c entities.c parser.c relaxng.c 
	  xmlschemas.c xpath.c: removed some warnings by casting xmlChar
	  to unsigned int and a couple of others.

Fri Jul 11 16:44:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixes a segfault on empty hexBinary strings

Thu Jul 10 16:02:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: cleanup patches from Peter Breitenlohner

Tue Jul  8 16:02:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c threads.c: fixes some problem when freeing unititialized
	  mutexes

Tue Jul  8 14:15:07 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c: the modules should not import <config.h>
	  directly, some cleanups
	* xmlschemas.c: Peter Sobisch found a nasty bug in the Schemas
	  validation code.

Mon Jul  7 18:00:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js: Jesse Pelton pointed out a problem in the
	  javascript code.

Mon Jul  7 16:39:31 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*: regenerated
	* nanoftp.c nanohttp.c: might fix includes problems with the
	  Ipv6 support on solaris
	* tree.c: patch from Markus Keim about xmlHasNsProp() on attributes
	  defined as #IMPLIED

Sun Jul  6 23:09:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/*: preparing release 2.5.8
	* nanohttp.c: changed some preprocessor block
	* xmlschemastypes.c: applied patch from Charles Bozeman adding
	  hexBinary schema datatype and adding support for totalDigits and
	  fractionDigits facets.

Sun Jul  6 19:56:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* debugXML.c xpath.c: fixed 2 bugs pointed in #116448

Sun Jul  6 19:34:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixed bug #116095 removing the error message when
	  reapplying XInclude to a document.

Sat Jul  5 22:40:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied small changes to portability layer for 
	  compilation on DJGPP Ms-DOS compiler.

Sat Jul  5 22:30:25 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c HTMLparser.c: use the character() SAX callback
	  if the cdataBlock ain't defined.
	* xpath.c: fix bug #115349 allowing compilation when configured
	  with --without-xpath since the Schemas code needs NAN and co.

Sat Jul 5 00:51:30 HKT 2003 William Brack <wbrack@mmm.com.hk>

	Fixed problem with multi-threading, shown by the test program
	testThreads.  After fix, ran mutiple tests on various speed
	machines (single and dual processor X86), which all seem okay.

	* catalog.c: added missing xmlRMutexUnlock in xmlLoadCatalog

	* threads.c: added missing initialisation for condition variable
	  in xmlNewRMutex.

Sat Jun 21 16:10:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	Applying IPv6 patch from Archana Shah <archana.shah@wipro.com>
	closing bug #114837

	* configure.in: Added checks for IPv6 support and getaddrinfo().

	* acconfig.h: Defined HAVE_GETADDRINFO and SUPPORT_IP6.

	* config.h.in: Defined HAVE_GETADDRINFO and SUPPORT_IP6.

	* nanoftp.c: Structure xmlNanoFTPCtxt contains either sockaddr_storage
	  field or sockaddr_in field, depending upon the availability of IPv6
	  support.
	  have_ipv6(): Added to check for run-time IPv6 support.
	  (xmlNanoFTPScanURL), (xmlNanoFTPUpdateURL), (xmlNanoFTPScanProxy):
	  Modified to parse a URI with IPv6 address given in [].
	  (xmlNanoFTPConnect): Changed to use getaddrinfo for address
	  resolution, if it is available on the system, as gethostbyname
	  does not return IPv6 addresses on some platforms.
	  (xmlNanoFTPGetConnection): Modified type of dataAddr variable to
	  sockaddr_storage or sockaddr_in depending upon the IPv6 support.
	  Sending EPSV, EPRT or PASV, PORT depending upon the type of address
	  we are dealing with.

	* nanohttp.c: (have_ipv6): Added to check for run-time IPv6 support.
	  (xmlNanoHTTPScanURL), (xmlNanoHTTPScanProxy): Modified to parse
	  a URI with IPv6 address given in [].
	  (xmlNanoHTTPConnectHost): Modified to use getaddrinfo if it is
	  available on the system. Also IPv6 addresses will be resolved by
	  gethostbyname only if IPv6 run-time support is available.
	  (xmlNanoHTTPConnectAttempt): Modified to deal with IPv6 address.

Sat Jun 14 18:46:51 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/configure.js include/win32config.h 
	  include/libxml/xmlversion.h.in: Applied the patch for BCB
	  by Eric Zurcher.

Fri Jun 13 14:27:19 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/html/*: reverted back patch for #113521,
	  due to #115104 and while fixing #115101 . HTML URLs must not
	  be version dependant.

Fri Jun 13 12:03:30 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: do not generate &quot; for " outside of attributes
	* result//*: this changes the output of some tests

Mon Jun  9 12:28:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c xmlIO.c: trying to fix #114277 about when file
	  remapping and escaping should really be attempted.

Mon Jun  9 11:06:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/*: applied a patch from Gman for building docs
	* valid.c xmllint.c include/libxml/valid.h: applied a patch from
	  Gary Pennington to provide an allocator for xmlValidCtxt
	* xmlreader.c: applied patch from Jacek Konieczny fixing bug
	  #113580 about data not being passed immediately.

Thu Jun  5 11:31:02 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied a couple of patches from Mark Itzcovitz
	  to handle saving back "UTF-16" documents.

Mon Jun  2 21:56:15 MVT 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemas.c include/libxml/schemasInternals.h: commiting
	  some work done while in the Maldives (hence the timezone on the
	  laptop !)
	* result/schemas/length3* test/schemas/deter0_*
	  test/schemas/group0_*: some tests added too

Mon Jun  2 15:34:17 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: small fix
	* xmlIO.c: fixed an error message

Tue May 20 14:21:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixing Red Hat bug #91013 where xmllint was
	  accepting an improper UTF8 sequence

Sat May 17 12:53:11 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* threads.c: applied the patch from Stéphane Bidoul for getting
	  rid of extra threads in a dynamic library.
	* win32/configure.js: threads default to 'native' now.

Fri May 16 13:17:52 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixing  bug #112904: html output method escaped
	  plus sign character in URI attribute.

Thu May 15 18:06:18 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* build_glob.py global.data globals.c parser.c
	  include/libxml/globals.h: patch from Stéphane Bidoul for setting
	  up threads global defaults.
	* doc/libxml2-api.xml: this extends the API with new functions
	* python/tests/Makefile.am python/tests/reader2.py
	  python/tests/thread2.py: integrated the associated testcase and
	  fixed the error string used in reader2

Wed May 14 14:56:46 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.spec.in python/Makefile.am: trying
	  to conciliate --with-python= requirements and RPM builds,
	  a PITA really...

Tue May 13 18:30:34 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: oops last commit introduced a memory leak.

Tue May 13 18:10:38 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c doc/xmllint.xml: added --nonet option
	* doc/Makefile.am: fixing #112803 by adding --nonet when calling
	  xsltproc or xmllint
	* doc/xmllint.xml doc/xmllint.1: also added --schema doc and
	  rebuilt
	* HTMLparser.c: cleaned up the HTML parser context build when 
	  using an URL

Tue May 13 16:35:04 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: added a comment about bug #112902 

Mon May 12 21:58:00 EDT 2003 William Brack <wbrack@mmm.com.hk>

	* minor cleanup of configure '--help' display
	* error.c: enhanced xmlParserPrintFileContext to fix bug #109942

Mon May 12 17:53:30 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: PI nodes in external subset were not freed :-\
	  fixes bug #112842

Mon May 12 11:23:27 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added --schema option to run WXS schema validation
	* xmlschemas.c xmlschemastypes.c include/libxml/schemasInternals.h:
	  tried to improve error reporting in the Schema code, some cleanup
	  too.

Sun May 11 16:13:20 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed some problems in the handling of errors,
	  and attributes addressed by references.
	* test/schemas/* result/schemas/*: dropped the verbosity level
	  and added a couple of new tests

Sat May 10 16:01:21 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: Stéphane Bidoul found an off by one addressing
	  error on the error handling.

Fri May  9 19:08:20 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: trying to fix #112673

Fri May  9 18:14:16 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c catalog.c parser.c relaxng.c: removed multiple
	  warning, this fixed a bug and should close #111574

Fri May  9 15:34:32 EDT 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixing bug #104081 with xs:all with an element
	  holding minOccurs="0"
	* test/schemas/all_* result/schemas/all_*: added some regression
	  tests for that bug
	* xmllint.c xmlreader.c: patches from Joerg Schmitz-Linneweber and
	  Garry Pennington to compile without schemas support.

Thu May  1 10:02:35 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a problem with xmlUnlinkNode() for DTDs.

Wed Apr 30 14:16:08 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xml2-config.in: try to fix Red hat bug #89957, do not
	  output -L/usr/lib64
	* xmlreader.c: fixed a typo in a comment

Tue Apr 29 07:32:02 MDT 2003 John Fleck <jfleck@inkstain.ent>

	* doc/tutorial/aph.html, ix01.html
	forgot to cvs add the new files. Thanks to Roland van Laar
	for pointing this out

Tue Apr 29 14:36:49 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c doc/libxml2-api.xml: fixing a function comment
	* doc/Makefile.am doc/apibuild.py doc/gnome-xml.sgml: switching
	  to the XML/XSLT doc generation closing #111799
	* doc/html/*: complete update of the HTML results

Mon Apr 28 14:51:41 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/defgen.xsl: fixed the conditional for unicode map,
	  removed hardcoded schema entries

Mon Apr 28 02:19:00 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/defgen.xsl: new file, stylesheet for generating 
	  win32/libxml2.def.src from doc/libxml2-api.xml
	* win32/libxml2.def.src: is autogenerated from now on, changes
	  to this file will not appear here anymore

Mon Apr 28 00:12:11 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* win32/configure.js python/setup.py.in: applied patch
	  from Stéphane Bidoul for the Python bindings on the new
	  release.

Sun Apr 27 17:56:21 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* debugXML.c: included libxml/uri.h for xmlCanonicPath
	  declaration
	* win32/configure.js: thread-enabled build is now default
	* win32/libxml2.def.src: added more exports

Sun Apr 27 00:23:05 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*.xsl doc/*.html: updated the web site separated
	  developers from common pages, made the transition to XHTML1,
	  added validity checking to the makefile rules.

Sat Apr 26 23:17:51 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fix for xmlIOParseDTD same as previous and reported
	  by Petr Pajas

Sat Apr 26 15:26:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied fix to xmlSAXParseDTD from Malcolm Tredinnick
	  closing #111638

Sat Apr 26 14:00:58 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: fixed a problem in the generator where
	  the way functions are remapped as methods on classes was
	  not symetric and dependant on python internal hash order,
	  as reported by Stéphane Bidoul

Fri Apr 25 21:52:33 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/tutorial:
	xmltutorial.xml
	xmltutorial.pdf
	*.html
	add appendix on generating compiler flags, more indexing

Sat Apr 26 01:10:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* triodef.h vms/build_libxml.com: applied patch from Craig A. Berry
	  to get libxml-2.5.7 to compile on OpenVMS

Fri Apr 25 18:42:35 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing an xmlParseDTD bug raised by Petr Pajas

Fri Apr 25 15:20:29 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am doc/xmlcatalog.1 doc/xmlcatalog_man.xml
	  doc/xmllint.1 doc/xmllint.xml: automated the generation of the
	  man page based on xsltproc and a stylesheet PI in the XML.

Fri Apr 25 12:37:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* doc/xmllint.*: trying to fix #110541 where &nbsp; generated
	  character preventing rendering by the man command.

Fri Apr 25 01:09:23 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS configure.in: preparing release 2.5.7
	* doc/*: updated and rebuilt the docs
	* doc/apibuild.py: fixed the script

Thu Apr 24 19:11:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/apibuild.py: make sure the OOM code don't
	  get in the way of the builds
	* doc/libxml2-api.xml python/libxml2class.txt: automatic update

Thu Apr 24 18:01:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am testOOM.c testOOMlib.[ch] : integrated the Out Of
	  Memory test from Havoc Pennington #109368
	* SAX.c parser.c parserInternals.c tree.c uri.c valid.c
	  xmlmemory.c xmlreader.c xmlregexp.c include/libxml/tree.h
	  include/libxml/parser.h: a lot of memory allocation cleanups
	  based on the results of the OOM testing
	* check-relaxng-test-suite2.py: seems I forgot to commit the
	  script.

Wed Apr 23 17:16:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: trivial fix for 109774 removing a warning

Wed Apr 23 15:49:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c SAX.c catalog.c debugXML.c parser.c: try to find
	  more places where xmlCanonicPath() must be used to convert
	  filenames to URLs, trying to fix #111088

Wed Apr 23 09:35:12 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: applied patch from 
	  Brent M Hendricks adding binding for xmlCatalogAddLocal

Tue Apr 22 15:18:01 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: tried to fix #98879 again in a more solid
	  way.

Tue Apr 22 13:58:43 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: added more exports from the relaxng and
	  xmlreader clan

Tue Apr 22 10:35:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c test/valid/ns* test/result/ns*: applied the patch
	  provided by Brent Hendricks fixing #105992 and integrated the
	  examples in the testsuite.

Tue Apr 22 01:06:09 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* TODO: updated a bit
	* configure.in: fixed the comment, threads now default to on
	* parserInternals.c: fixed an erroneous xmlMallocAtomic() call

Mon Apr 21 23:33:38 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c libxml.h parser.c parserInternals.c tree.c xmllint.c
	  xmlreader.c include/libxml/parser.h: a lot of performance work
	  especially the speed of streaming through the reader and push
	  interface. Some thread related optimizations. Nearly doubled the
	  speed of parsing through the reader.

Sun Apr 20 10:36:05 MDT 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	update man page to explain use of --stream

Sat Apr 19 02:03:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c catalog.c encoding.c globals.c
	  nanohttp.c parser.c parserInternals.c relaxng.c tree.c uri.c
	  xmlmemory.c xmlreader.c xmlregexp.c xpath.c xpointer.c
	  include/libxml/globals.h include/libxml/xmlmemory.h: added
	  xmlMallocAtomic() to be used when allocating blocks which
	  do not contains pointers, add xmlGcMemSetup() and xmlGcMemGet()
	  to allow registering the full set of functions needed by
	  a garbage collecting allocator like libgc, ref #109944

Fri Apr 18 16:37:41 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: switched to have thread support enabled by default,
	  didn't got troubles with ABI compatibility on Linux, hope it
	  won't break on strange OSes, if yes, report the system ID
	* doc/libxml2-api.xml: just rebuilt the API

Fri Apr 18 14:31:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.h include/libxml/parser.h parser.c xmlIO.c DOCBparser.c: 
	  added support for large file, tested with a 3+GB instance,
	  and some cleanup.
	* catalog.c: added a TODO
	* Makefile.am: added some "make tests" comments

Thu Apr 17 14:51:57 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: some cleanups
	* doc/xmlreader.html: extended the document to cover RelaxNG and
	  tree operations
	* python/tests/Makefile.am python/tests/reader[46].py: added some
	  xmlReader example/regression tests
	* result/relaxng/tutor*.err: updated the output of a number of tests

Thu Apr 17 11:35:37 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: valgrind pointed out an uninitialized variable error.

Thu Apr 17 11:06:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* include/libxml/relaxng.h relaxng.c include/libxml/xmlreader.h
	  xmlreader.c: augnemting the APIs, cleanups.
	* parser.c: cleanup bug #111005
	* xmlIO.c: added some missing comments

Wed Apr 16 17:46:50 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmllint.c: more work on RelaxNG streaming validation
	  trying to improve the subset compiled, and more testing.
	* doc/downloads.html doc/xml.html doc/xmlmem.html: some updates on the
	  documentation
	* test/relaxng/tutor11_1_3.xml: fixes the DTD path
	* result/relaxng/*.err: fix some of the outputs

Wed Apr 16 01:28:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlreader.c xmllint.c include/libxml/relaxng.h
	  include/libxml/xmlreader.h: implemented streaming of
	  RelaxNG (when possible) on top of the xmlReader interface,
	  provided it as xmllint --stream --relaxng .rng .xml
	  This seems to mostly work.
	* Makefile.am: updated to test RelaxNG streaming

Mon Apr 14 18:08:33 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: integrated the regexp
	  based validity checking of fragments of the document for
	  which the RNG can be compiled to regexps. Works on all regression
	  tests, only fix needed is related to error messages.

Sun Apr 13 21:51:00 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlregexp.c include/libxml/xmlautomata.h
	  include/libxml/xmlregexp.h: Starting work precompiling
	  parts of RelaxNG schemas. Not plugged onto validity checking
	  yet, just the regexp building part. Needed to extend some
	  of the automata and regexp APIs.

Fri Apr 11 21:36:21 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c xmlreader.c include/libxml/xmlreader.h: make sure
	  xmllint --stream and xmllint --stream --valid returns errors
	  code appropriately

Fri Apr 11 10:59:24 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h: Added the Expand()
	  and Next() operation to work on subtrees within the reader
	  framework.
	* doc/libxml2-api.xml python/libxml2class.txt: resulting updates
	* python/tests/reader5.py: added an example for those new
	  functions of the reader.

Thu Apr 10 23:38:13 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: patch from Vasily Tchekalkin to fix #109865

Thu Apr 10 15:32:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixing HasValue for namespace as raised by 
	  Denys Duchier

Wed Apr  9 14:07:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c include/libxml/HTMLparser.h:  exported
	  htmlCreateMemoryParserCtxt() it was static

Wed Apr  9 13:21:48 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
	  update from Charles Bozeman for date and duration types
	* test/schemas/date_0.* test/schemas/dur_0.*
	  result/schemas/date_0.* result/schemas/dur_0.*: updated too

Mon Apr  7 12:19:26 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c valid.c xpath.c include/libxml/tree.h include/libxml/valid.h:
	  fixing bug #107129, removing excessive allocation and calls
	  to *printf in the code to build QName strings.

Sat Apr  5 11:41:36 CEST 2003 Igoe Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: fixed conditional exports, reported by
	  Luke Murray.

Fri Apr  4 18:08:00 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a possible problem with xmlRecoverMemory()

Thu Apr  3 17:24:44 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* trio.c trio.h triodef.h trionan.c trionan.h triop.h triostr.c
	  triostr.h: Bjorn sent an update for the TRIO portability layer.

Tue Apr  1 21:57:26 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/libxml2.def.src: exported new functions

Tue Apr  1 13:09:46 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing release 2.5.6
	* doc/*: updated and rebuilt the docs

Tue Apr  1 11:52:15 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed an uninitialized memory access pointed by valgrind
	  on C14Ntests

Tue Apr  1 00:12:28 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: one more fixup of error message reporting

Mon Mar 31 18:36:32 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on bug #109225, and fixed an uninitialized
	  variable pointed out by valgrind

Mon Mar 31 18:05:22 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: try to work on bug #109225 and provide better
	  error reports.
	* result/relaxng/* : this change the output of a number of tests
	* xinclude.c: fixing the parsed entity redefinition problem
	  raised on the list.
	* test/schemas/date_0.xsd: updated the date test c.f. E2-12

Mon Mar 31 13:19:04 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixed date comparison to handle the tzo
	  The only failures left are disagreements on Notations and
	  '+1' not being allowed for ulong, uint, ushort and ubyte.

Mon Mar 31 12:11:47 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: fixed gMonth parsing routine accordingly
	  to the XML Schemas errata
	  http://www.w3.org/2001/05/xmlschema-errata#e2-12

Sun Mar 30 23:04:18 CEST 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemastypes.c: more work on XML Schemas datatypes
	  and facets support. Currently only schemas with binHex or
	  base64 don't compile. A few error left in the test suite:
	  found 1035 test instances: 919 success 23 failures
	  most are gdate or gdateyear failing check, and a few cases where
	  James clark tests results are strange.
	* valid.c: allow to reuse the Notation checking routine without
	  having a validation context.
	* SAX.c: removed a #if 0

Sat Mar 29 17:35:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: forgot to apply one check from #106931 patch
	* xmlschemastypes.c: more work on XML Schemas datatypes

Sat Mar 29 11:49:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h xmlschemastypes.c: more work
	  on cleaning up XML Schemas datatypes based on James Clark tests
	  test/xsdtest/xsdtest.xml

Fri Mar 28 14:24:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented comparisons for Schemas values.
	* xmlschemastypes.c include/libxml/xmlschemastypes.h: fixed
	  some bugs in duration handling, comparisons for durations
	  and decimals, removed all memory leaks pointed out by James
	  testsuite. Current status is now
	  found 238 test schemas: 197 success 41 failures
	  found 1035 test instances: 803 success 130 failures

Fri Mar 28 00:41:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h: fixed bugs and memory
	  leaks in the W3C XML Schemas code
	* xmlschemastypes.c: implemented nonPositiveInteger
	* test/schemas/length2_0.xsd result/schemas/length2_0_0.err:
	  fixed the test and result.

Thu Mar 27 22:23:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c tree.c: two patches from James Bursa on the HTML
	  parser and a typo
	* xmlschemastypes.c: reindenting, fixing a memory access
	  problem with dates.

Thu Mar 27 15:53:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing #109227 providing more context in case of 
	  start/end tag mismatch
	* python/tests/ctxterror.py python/tests/readererr.py: update the
	  tests accordingly

Thu Mar 27 15:22:41 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: should fix #109327 errors on memory accesses

Thu Mar 27 15:06:13 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: Fixed reopening of #78662 <form action="...">
	  is an URI reference

Wed Mar 26 22:38:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed bug #109160 on non-ASCII IDs

Wed Mar 26 17:30:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: Norm suggested a nicer error message for xml:space values
	  errors

Wed Mar 26 01:34:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c include/libxml/xpath.h: first part of the fix to
	  performance bug #108905, adds xmlXPathOrderDocElems() providing
	  document order for nodes.
	* python/libxml.c: Python may require TRIO as Albert Chin pointed out

Tue Mar 25 16:07:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: removing a warning with Sun compiler
	  bug #109154

Tue Mar 25 07:02:56 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	update xmllint man page with --relaxng option

Tue Mar 25 12:07:03 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/setup.py.in : was missing "drv_libxml2.py"

Mon Mar 24 19:38:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c xpath.c: some changes related to the new way of 
	  handling Result Value Tree, before 2.5.5

Mon Mar 24 16:36:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing release 2.5.5
	* doc/* : updated the documentation and regenerated it.

Mon Mar 24 14:56:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed some problems related to #75813 about handling
	  of Result Value Trees

Sun Mar 23 22:57:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied a set of patches from Lorenzo Viali correcting
	  URI parsing errors.

Sun Mar 23 22:00:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: validity status was not passed back when validating in
	  entities, but raised by Oliver Fischer

Sun Mar 23 21:30:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: avoid escaping ',' in URIs

Sun Mar 23 12:57:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #108976 get the ID/REFs to reference 
	  the ID in the document content and not in the entity copy
	* SAX.c include/libxml/parser.h: more checking of the ID/REF
	  stuff, better solution for #107208
	* xmlregexp.c: removed a direct printf, dohhh
	* xmlreader.c: fixed a bug on streaming validation of empty 
	  elements in entities
	* result/VC/ElementValid8 test/VCM/v20.xml result/valid/xhtml1.xhtml:
	  cleanup of the validation tests
	* test/valid/id* test/valid/dtds/destfoo.ent result/valid/id*:
	  added more ID/IDREF tests to the suite

Sat Mar 22 23:38:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed #107043 removing 2 warnings with Sun One
	  compiler.

Sat Mar 22 18:50:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: valgrind'ed and cleaned up a couple of memory issues.

Sat Mar 22 16:15:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fix bug #107208 avoid false duplicates when ID/REFs are
	  defined in entities content

Sat Mar 22 15:53:27 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: Fixed validation bug #108858 on namespace names using
	  entities and reported by Brent Hendricks
	* xmllint.c: report xmlTextReaderHasValue() result in --stream
	  --debug output.

Sat Mar 22 13:32:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed bug #108801 reported by Malcolm Tredinnick
	  about the DocType node not being reported sometimes.
	* python/tests/reader.py: added to test to the regression checks

Sat Mar 22 01:57:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed bug #108546 on long CDATA (or text nodes)
	  reported by Edd Dumbill

Sat Mar 23 01:00:24 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c parser.c parserInternals.c: patch from
	  johan@evenhuis.nl for #107937 fixing some line counting
	  problems, and some other cleanups.
	* result/HTML/: this result in some line number changes

Fri Mar 21 22:19:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in Makefile.am: fixed Red Hat bug #86118 use libxml2.spec
	  instead of libxml.spec
	* relaxng.c: fixed some of the error reporting excessive
	  verbosity
	* catalog.c debugXML.c valid.c xmlreader.c xmlschemas.c xpath.c
	  xmlschemastypes.c: removed some warnings from gcc
	* doc/libxml2-api.xml: rebuilt

Fri Mar 21 17:25:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: another optimization, for choice this time
	* result/relaxng/spec1* result/relaxng/tutor12_1* 
	  result/relaxng/tutor3_7: cleanups.

Fri Mar 21 13:41:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed xmlRelaxNGNodeMatchesList
	* test/relaxng/testsuite.xml: augmented the test suite
	* result/relaxng/spec1* result/relaxng/tutor12_1*: this fixes
	  some schemas validation tests in the presence of foreign 
	  namespaces.

Fri Mar 21 02:23:34 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: added another interleave speedup.

Thu Mar 20 17:22:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: added integer and fixed one of the
	  IDREFS regression tests pbm
	* result/relaxng/docbook_0.err: updated

Wed Mar 19 21:58:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlschemastypes.c: attempt to cope with ID/IDREF(S)
	  declared both in the DTD and in the Schemas <grin/>
	* relaxng.c: more debug, added a big optimization for <mixed>
	* test/relaxng/testsuite.xml: augmented the testsuite
	* test/relaxng/ result/relaxng: added the RelaxNG spec and a 
	  DocBook example to the regression tests

Wed Mar 19 11:34:10 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py: cosmetic change for output
	* relaxng.c: try to minimize calls to malloc/free for states.

Tue Mar 18 17:50:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: removed a warning
	* xmlschemastypes.c: more cleanup, added ENTITY and ENTITIES
	  support
	* check-relaxng-test-suite.py check-xsddata-test-suite.py:
	  cleanup/improvements of the regression tests batch
	* test/relaxng/testsuite.xml: augmented libxml2 own testsuite

Tue Mar 18 12:36:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed error msg cleanup deallocation
	* xmlschemastypes.c: added a function to handle lists of
	  atomic types, added support for IDREFS

Tue Mar 18 01:28:15 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c valid.c xmlschemastypes.c: added Datatype ID
	  and IDREF, usable from RelaxNG now
	* include/libxml/xmlschemastypes.h: need to add a new interface
	  because the validation modifies the infoset
	* test/relaxng/testsuite.xml: extended the testsuite

Mon Mar 17 16:34:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed the last core RelaxNG bug known #107083,
	  shemas datatype ID/IDREF support still missing though.
	* xmlreader.c: fix a crashing bug with prefix raised by
	  Merijn Broeren
	* test/relaxng/testsuite.xml: augmented the testsuite with
	  complex inheritance tests

Sun Mar 16 18:45:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: switched back to the previous Relax-NG code base,
	  the derivation algorithm need severe constraining code to avoid
	  combinatorial explosion. Fixed the problem with Sebastian Rahtz
	  TEI based example and other bugs
	* result/relaxng/*err: updated the results
	* test/relaxng/testsuite.xml: started a new test suite 

Sat Mar 15 22:26:46 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c include/libxml/relaxng.h: After coming to the conclusion
	  that the original RelaxNG validation code was un-fixeable, it got
	  rewritten to use the derivation algorithm from James Clark and
	  redebugged it (nearly) from scratch:
	  found 373 test schemas: 372 success 1 failures
	  found 529 test instances: 529 success 0 failures

Tue Mar 11 12:08:23 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c: fix some recursion problems introduced in the
	  last release.
	* relaxng.c: more debugging of the RNG validation engine, still
	  problems though.

Mon Mar 10 14:10:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: stop generating wrong result file with * in name
	* relaxng.c: fixing the include bug raised by Sebastian Rahtz
	* result/relaxng/demo* test/relaxng/demo: added the tests from
	  Sebastian reproducing the problem.

Sun Mar  9 18:02:31 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.1: regenerating man page from xmllint.xml to pick
	  up Aleksey's change

Sun Mar  9 13:53:16 2003  Aleksey Sanin  <aleksey@aleksey.com>

	* xmllint.c doc/xmllint.xml: use $XMLLINT_INDENT environment
	variable to control the indentation for the xmllint "--format" 
	option

Sat Mar  8 14:27:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* encoding.c: applied Gennady's patch against buffer overrun

Fri Mar  7 19:29:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* test/xsdtest/xsdtest.xml uri.c: after and exchange with James
	  Clark it appeared I had bug in URI parsing code ...
	* relaxng.c include/libxml/relaxng.h: completely revamped error
	  reporting to not loose message from optional parts.
	* xmllint.c: added timing for RNG validation steps
	* result/relaxng/*: updated the result, all error messages changed

Fri Mar  7 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix bug #107804, the algorithm used for document order
	  computation was failing on attributes.

Thu Mar  6 22:35:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix bug #107764 , possibility of buffer overflow
	  in xmlValidDebug()

Wed Mar  5 17:41:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c include/libxml/nanoftp.h: adding xmlNanoFTPDele()
	  from Philipp Dunkel

Wed Mar  5 10:57:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastype.c: made powten array static it should not be exported
	* HTMLparser.c: fix bug #107361 by reusing the code from the XML 
	  parser function.
	* testHTML.c: get rid of valgrind messages on the HTML SAX tests

Fri Feb 28 00:23:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a node dump crash on attributes
	* test/xsdtest/xsdtest.xml test/xsdtest/xsdtest.xsl: fixed
	  an URI test bug and get better output.

Thu Feb 27 22:28:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py: give more infos
	* relaxng.c: fix a bug reported by Sebastian Rahtz and
	  REF->DEF in attribute values.

Thu Feb 27 21:09:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xsddata-test-suite.py test/xsdtest/xsdtest.xml
	  test/xsdtest/xsdtest.xsl: import of the XSD Datatype
	  regression tests from James Clark.

Thu Feb 27 18:40:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c xmlschemas.c xmlschemastypes.c
	  include/libxml/xmlschemastypes.h: added param support for relaxng
	  type checking, started to increment the pool of simple types
	  registered, still much work to be done on simple types and
	  facets checkings.

Wed Feb 26 16:45:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* entities.c: fixes again one of the problem raised by
	  James Clark in #106788

Wed Feb 26 15:46:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: Fixed a couple of problem raised by James Clark
	  in bug #107083, the support for ID/IDREF/IDREFS at the WXS
	  datatype level still not fixed though.

Mon Feb 24 21:09:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release 2.5.4
	* doc/*: updated and rebuilt the docs
	* relaxng.c: removed warnings
	* result/relaxng/*: updated the results

Mon Feb 24 20:53:17 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixes a DTD regexp generation problem.

Mon Feb 24 20:12:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixes bug #105998 about false detection of
	  attribute consumption loop.

Mon Feb 24 19:14:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: Fixes bug #106931 in XInclude entities merging.

Mon Feb 24 18:50:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed bug #105992

Mon Feb 24 18:14:16 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed xmlSetProp and al. when the node passed is not an
	  element.
	* relaxng.c: fixed bugs 7.3 (though not complete) and memory leaks
	  found 373 test schemas: 369 success 4 failures
	  found 529 test instances: 525 success 4 failures
	* check-relaxng-test-suite.py: added memory debug reporting

Mon Feb 24 12:41:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* uri.c parser.c: some warning removal on Igor's patch
	* tree.c: seems I messed up with #106788 fix
	* python/libxml.c: fixed some base problems when Python provides
	  the resolver.
	* relaxng.c: fixed the interleave algorithm 
	  found 373 test schemas: 364 success 9 failures
	  found 529 test instances: 525 success 4 failures
	  the resulting failures are bug in the algorithm from 7.3 and
	  lack of support for params

Sun Feb 23 14:49:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: another fix for nodeinfo in entities problem
	* tree.c entities.c: fixed bug #106788 from James Clark
	  some spaces need to be serialized as character references.

Sat Feb 22 18:28:16 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* parser.c uri.c: fixed the bug I introduced in the path
	  handling, reported by Sebastian Bergmann

Sat Feb 22 00:19:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing some nodeinfo in entities problem raised
	  by Glenn W. Bach
	* relaxng.c: implemented the first section 7.3 check
	* result/relaxng/*: updated the results

Fri Feb 21 18:12:19 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: fixed some problems in the previous commit
	  and finished implementing 4.16 rules checking
	  found 373 test schemas: 353 success 20 failures
	  found 529 test instances: 519 success 6 failures
	* result/relaxng/*: updated the results

Fri Feb 21 16:37:39 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented checks from section 7.2

Thu Feb 20 16:00:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented the checks from section 7.1, fixed
	  some of the 4.20 and 4.21 problems.
	  found 373 test schemas: 338 success 35 failures
	  found 529 test instances: 519 success 6 failures
	* result/relaxng/*: updated the results

Thu Feb 20 01:09:24 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: implemented the 4.20 and 4.21 simplification rules.
	* result/relaxng/*: updated the results

Wed Feb 19 18:30:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more bugfixes
	* result/relaxng/*: updated the results

Wed Feb 19 15:39:56 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* DOCBparser.c: obsoleted xmlNormalizeWindowsPath
	* HTMLparser.c: obsoleted xmlNormalizeWindowsPath
	* SAX.c: ensured xmlDoc.URL is always canonic
	* parser.c: obsoleted xmlNormalizeWindowsPath
	* uri.c include/libxml/uri.h: introduced xmlCanonicPath
	* xmlIO.c include/libxml/xmlIO.h: obsoleted xmlNormalizeWindowsPath
	* win32/libxml2.def.src: added few exports

Wed Feb 19 14:26:51 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: patched to have shared libraries
	  for Python regression tests and static binaries for gdb debug
	  in my development environment
	* relaxng.c: more bugfixes 
	  found 373 test schemas: 296 success 77 failures
	  found 529 test instances: 516 success 8 failures
	* result/relaxng/*: updated the results

Wed Feb 19 01:17:48 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: guess what ! Relax-NG bugfixing, what a surprize...

Tue Feb 18 22:09:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: float/double check bugfix
	* tree.c include/libxml/tree.h: exported a function for NMTOKEN
	  validation
	* xmlreader.c: add a TODO for Jody
	* relaxng.c: bugfix bugfix bugfix
	  found 373 test schemas: 300 success 73 failures
	  found 529 test instances: 507 success 10 failures
	* result/relaxng/*: updated the results

Tue Feb 18 00:33:17 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c check-relaxng-test-suite.py: more RelaxNG bug hunting

Mon Feb 17 18:23:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c check-relaxng-test-suite.py: more work on the
	  RelaxNG implementation conformance testing.
	  found 373 test schemas: 284 success 89 failures
	  found 529 test instances: 448 success 47 failures
	* result/relaxng/*: updated the results

Sun Feb 16 16:48:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* ChangeLog tree.c doc/libxml-doc.el doc/libxml2-api.xml: applied
	  a patch from Kjartan Maraas to fix some typos

Sun Feb 16 16:40:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more bug-hunting
	* testRelax.c include/libxml/relaxng.h: added --tree to dump the
	  intermediate rng tree
	* python/generator.py: patch from Stéphane Bidoul to fix the generator
	  on python < 2.2

Fri Feb 14 17:49:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-relaxng-test-suite.py relaxng.c: more testing on the
	  Relax-NG front, cleaning up the regression tests failures
	  current state and I forgot support for "mixed":
	  found 373 test schemas: 280 success 93 failures
	  found 529 test instances: 401 success 68 failures
	* tree.c include/libxml/tree.h xmlschemastypes.c: finished and
	  moved the Name, NCName and QName validation routine in tree.c
	* uri.c: fixed handling of URI ending up with #, i.e. having
	  an empty fragment ID.
	* result/relaxng/*: updated the results

Thu Feb 13 16:49:24 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py: improved the script accordingly
	  to the XInclude regression tests updates
	* xpointer.c: Implemented XPointer element() Scheme W3C PR of 13
	  November 2002
	* result/XPath/xptr/chapterschildseq result/XPath/xptr/vidchildseq
	  test/XPath/xptr/chapterschildseq test/XPath/xptr/vidchildseq:
	  augmented the Xpointer testsuite for the element() scheme

Thu Feb 13 12:00:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: added TODO for the DTD compatibility spec
	* xinclude.c: more bug fixes driven by the testsuite 

Tue Feb 11 19:01:02 CET 2003 Daniel Veillard <daniel@veillard.com>

	* check-xinclude-test-suite.py xinclude.c: Work on the W3C/NIST
	  regression tests for XInclude, improved the script, improving
	  XInclude error reporting mechanism

Mon Feb 10 17:19:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/* configure.in: preparing release 2.5.3

Mon Feb 10 17:11:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: trying to fix #104934 about some XHTML1 serialization
	  issues.

Mon Feb 10 16:41:13 CET 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c xmlIO.c: fixing bug #104646 about iconv based
	  encoding conversion when the input buffer stops in the
	  middle of a multibyte char

Mon Feb 10 15:24:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* test/relaxng/OASIS/spectest.xml: OASIS RelaxNG testsuite
	* check-relaxng-test-suite.py: python script to run regression
	  against OASIS RelaxNG testsuite
	* relaxng.c: some cleanup tweaks
	* HTMLparser.c globals.c: cleanups in comments
	* doc/libxml2-api.xml: updated the API
	* result/relaxng/*: errors moved files, so large diffs but
	  no changes at the semantic level.

Mon Feb 10 01:00:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixing #105678 problem when dumping a namespace node.

Mon Feb 10 00:30:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed doc comment problems
	* python/generator.py python/libxml_wrap.h python/types.c: adding
	  RelaxNG wrappers
	* python/tests/Makefile.am python/tests/relaxng.py: added a specific
	  test of those early Python RelaxNG bindings

Sun Feb  9 15:18:43 CET 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixes a libtool problem on AMD 64bits builds
	* relaxng.c: found the validation problem I had with interleave
	  when not covering all remaining siblings
	* Makefile.am test.relaxng/* result/relaxng/*: augmented the
	  testsuite and check the RNG schemas against the RNG schemas
	  given in appendix A

Sat Feb  8 18:55:43 CET 2003 Igor Zlatkovic <igor@zlatkovic.com>

	* win32/Makefile.msvc: updates for RelaxNG
	* win32/Makefile.mingw: updates for RelaxNG
	* win32/libxml2.def.src: added RelaxNG exports

Fri Feb  7 14:00:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: applied another bug fix from Sean Chittenden

Fri Feb  7 13:34:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in xmllint.c: I f...ed up the default configuration
	  of schemas and --relaxng option display in xmllint, pointed by
	  Morus Walter.
	* xlink.c: Sean Chittenden pointed a couple of errors in the XLink
	  detection module, fixes bug #105374.

Fri Feb  7 01:43:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: added the boolean base type.

Thu Feb  6 10:23:52 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: started implementing some of the missing
	  default simple types
	* result/relaxng/*: updated the results

Wed Feb  5 15:28:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/*: updated the docs, ready for 2.5.2 release

Wed Feb  5 14:15:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c tree.c xmlIO.c: comments cleanups
	* Makefile.am: use xmllint for doing the RelaxNG tests
	* configure.in: preparing 2.5.2 made schemas support default to
	  on instead of off
	* relaxng.c: removed the verbosity
	* xmllint.c: added --relaxng option
	* python/generator.py python/libxml_wrap.h: prepared the integration
	  of the new RelaxNG module and schemas
	* result/relaxng/*: less verbose output

Wed Feb  5 12:00:36 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: do not run content model validation if the
	  content is not determinist

Wed Feb  5 11:43:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: added the redefinition of namespaced attribute
	  check that was missing as Fabrice Desré pointed out.

Wed Feb  5 11:09:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c include/libxml/HTMLparser.h: applied HTML
	  improvements from Nick Kew, allowing to do more checking
	  to HTML elements and attributes.

Tue Feb  4 23:47:06 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fixing bug #105137 about entities declaration
	  needing to be copied to the including document.

Tue Feb  4 20:26:22 CET 2003 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed bug #104817 with delegateURI
	* xpath.c: fixing bugs #104123 and #104125

Tue Feb  4 17:12:56 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in valid.c xmlreader.c python/libxml_wrap.h 
	  python/types.c: fixing #104096 to compile without regexps

Tue Feb  4 16:31:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing bug #103969 forgot to add an epsilon transition
	  when building the automata for elem*

Tue Feb  4 16:21:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: applied patch from Arne de Bruijn fixing 
	  bug #103827

Tue Feb  4 16:17:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: updating a comment, fixing #103776

Tue Feb  4 16:05:53 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug 105049 for validity checking of content
	  within recursive entities.

Tue Feb  4 15:40:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: try to fix # 105049
	* relaxng.c xmlschemastypes.c: a couple of changes and extensions
	* tree.c: updated a function comment

Tue Feb  4 00:20:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: more work on grammars and refs/defs
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Mon Feb  3 14:16:59 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: more work on name classes, except support
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Mon Feb  3 11:56:05 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: more work on name classes, the "validate all" schemas
	  seems to work now.
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Mon Feb  3 09:50:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: removed an unprotedted debug message Aleksi Suhonen
	* parser.c: put a guard against infinite document depth, basically
	  trying to avoid another kind of DoS attack.
	* relaxng.c: some code w.r.t. nameClasses

Sun Feb  2 17:01:43 CET 2003 Daniel Veillard <daniel@veillard.com>

	* test/relaxng/* result/relaxng/*: check all the namespace support
	  was actually correct based on tutorial section 10.

Sun Feb  2 15:33:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: include seems to work okay now
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Sat Feb  1 19:44:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: a bit of work done in the train back.
	* test/relaxng/*: added one of the include tests

Thu Jan 30 14:06:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng: more work done in the train
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Wed Jan 29 23:44:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: debugging of externalRef
	* test/relaxng/* result/relaxng/*: augmented/updated the
	  regression tests

Wed Jan 29 22:06:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG, implementing externalRef
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests
	* Makefile.am: cleanup to Relaxtests target

Wed Jan 29 00:08:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG, implementing interleave
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Tue Jan 28 21:56:49 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG, implementing interleave
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Mon Jan 27 07:35:29 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/customfo.xsl
	* doc/tutorial/customhtml.xsl
	adding stylesheet customizations used to generate fo
	for pdf and html

Mon Jan 27 13:29:43 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests
	* xmlschemastypes.c: added a number of base type definition but not
	  the associated checks, those are still TODOs

Sun Jan 26 17:37:06 MST 2003 John Fleck <jfleck@inkstain.net>

	in docs/tutorial:
	* apa.html
	* apb.html
	* apc.html
	* apd.html
	* ape.html
	* apf.html
	* apg.html
	* ar01s02.html
	* ar01s03.html
	* ar01s04.html
	* ar01s05.html
	* ar01s06.html
	* ar01s07.html
	* ar01s08.html
	* index.html
	* xmltutorial.pdf
	* xmltutorial.xml
	add index to tutorial

Sun Jan 26 17:02:29 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog.1
	* doc/xmlcatalog_man.html
	* doc/xmlcatalog_man.xml
	belatedly fixing bug #93622 (adds rewriteURI type to
	"--add" option in xmlcatalog man page

Sun Jan 26 20:47:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c xmllint.c: applied patch for NetBSD by
	  Julio Merino, closing #104475

Sun Jan 26 20:38:43 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Sun Jan 26 01:49:58 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Sat Jan 25 18:59:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* README: updated the policy on private mail answers
	* relaxng.c: more work on Relax-NG
	* test/relaxng/* result/relaxng/*: augmented/updated the 
	  regression tests

Fri Jan 24 15:12:44 CET 2003 Daniel Veillard <daniel@veillard.com>

	* error.c parser.c tree.c: applied a documentation patch from
	  Stefan Kost

Fri Jan 24 02:00:50 CET 2003 Daniel Veillard <daniel@veillard.com>

	* relaxng.c: more work on Relax-NG
	* doc/*: regenerated the docs
	* test/relaxng/* result/relaxng/*: updated and augmented the
	  Relax-NG regression tests and results

Thu Jan 23 19:26:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in relaxng.c include/libxml/relaxng.h:
	  First commit of the new Relax-NG validation code, not generally
	  useful yet.
	* test/relaxng/* result/relaxng/*: current state of the regression
	  tests

Thu Jan 23 19:22:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: minimized the memory allocated for GetContent
	  and a bit of cleanup.

Thu Jan 23 17:41:37 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: seems there is no good reasons to
	  not generate bindings for XPointer

Tue Jan 21 13:19:35 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c doc/apibuild.py: applied a new patch from
	  Stéphane Bidoul for cleanups
	* doc/libxml2-api.xml: rebuilt the API description with
	  new entry points

Mon Jan 20 23:25:00 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/drv_libxml2.py python/generator.py
	  python/libxml.c python/libxml.py python/libxml_wrap.h
	  python/types.c: patch from Stéphane Bidoul for better per
	  context error message APIs
	* python/tests/ctxterror.py python/tests/readererr.py:
	  update of the tests

Sun Jan 19 17:09:28 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/guidelines.html
	grammar and spelling cleanup

Fri Jan 17 00:31:30 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h python/generator.py
	  python/libxml.c python/libxml.py win32/libxml2.def.src: applied
	  a patch from Stéphane Bidoul to allow per XMLtextReader error
	  and warning handling
	* python/tests/Makefile.am python/tests/readererr.py: adding the
	  specific regression test

Tue Jan 14 17:00:08 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Alexey Efimov pointed out that concat('a', 'b', )
	  should raise a syntax error

Tue Jan 14 15:39:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: cleanup patch from Stéphane Bidoul

Tue Jan 14 14:41:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fixing bug #103100 with a dummy UTF8ToUTF8 copy

Tue Jan 14 12:40:29 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml_wrap.h python/types.c: applied and fixed a patch
	  from Stéphane Bidoul to provide per parser error handlers at the
	  Python level.
	* python/tests/Makefile.am python/tests/ctxterror.py: added a
	  regression test for it.

Tue Jan 14 01:15:04 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: fixed the streaming property of the reader,
	  it was generating tree faster than consuming it. Pointed out
	  by Nate Myers
	* tree.c: fixed a bug in xmlSaveFormatFileEnc if passed a NULL doc

Sun Jan 12 22:18:02 CET 2003 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: added more xmlreader and other exports

Fri Jan 10 18:04:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix to the XPath implementation for parent and
	  ancestors axis when operating on a Result Value Tree.
	  Fixes bug #100271

Fri Jan 10 17:07:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c nanohttp.c xmlIO.c: patch from Stefano Zacchiroli
	  to fix some URI/file escaping problems

Fri Jan 10 16:20:34 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: fixed a bug raised by Raymond Wiker, 
	  docSetRootElement() should not raise an exception if the
	  return is None

Fri Jan 10 14:13:03 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py python/libxml.c python/libxml2-python-api.xml:
	  fixed bug #102181 by applying the suggested change and fixing
	  the generation/registration problem.

Fri Jan 10 13:47:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed bug #102960 by reusing the XML name parsing
	  routines.

Fri Jan 10 00:16:49 CET 2003 Daniel Veillard <daniel@veillard.com>

	* parser.c: one more IsEmptyElement crazyness, that time in
	  external parsed entities if substitution is asked.
	* python/tests/reader3.py: added a specific test.

Thu Jan  9 22:35:31 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/drv_libxml2.py: update from Stéphane Bidoul: python 2.1
	  support and improved error handler registration

Thu Jan  9 14:16:38 CET 2003 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c: fixes #102920 about namespace handling in
	  HTML output and section 16.2 "HTML Output Method" of XSLT-1.0
	* README: fixed a link

Wed Jan  8 18:32:25 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in doc/* NEWS: preparing 2.5.1 release
	* SAX.c parser.c: fixing XmlTextReader bug

Wed Jan  8 00:13:01 CET 2003 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fuck, I introduced a memory leak on external parsed
	  entities in 2.5.0 :-(

Tue Jan  7 12:12:45 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: another fix needed as pointed by Christophe Merlet
	  for --stream --debug if compiled without debug support.

Mon Jan  6 20:53:08 MST 2003 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1:
	update man page with --stream and --chkregister

Tue Jan  7 01:17:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* globals.c: fixed --with-threads compile
	* xmllint.c: fixed --without-debug compile
	* include/libxml/globals.h: cleanup
	* include/libxml/schemasInternals.h: add a missing include

Mon Jan  6 14:06:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* configure.in NEWS: preparing 2.5.0 release
	* SAX.c: only warn in pedantic mode about namespace name 
	  brokeness
	* globals.c: fix a doc generation problem
	* uri.c: fix #101520
	* doc/*: updated and rebuilt the doc for the release, includuding
	  stylesheet update
	* python/Makefile.am: fix a filename bug

Mon Jan  6 12:05:12 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/tutorial/* : fixed #101894 if doc == NULL xmlFreeDoc 
	  should not be called.

Mon Jan  6 11:59:09 CET 2003 Daniel Veillard <daniel@veillard.com>

	* libxml-2.0.pc.in: applied the patch to fix #101894

Sun Jan  5 23:35:47 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c : applied patch from Lukas Schroeder for register callbacks
	* valid.c: modified patch from Lukas Schroeder to test
	  register callbacks with --chkregister

Sun Jan  5 02:23:20 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: seriously changed the way data are pushed to
	  the underlying parser, go by block of 512 bytes instead of
	  tryng to detect tag boundaries at that level. Changed the
	  way empty element are detected and tagged.
	* python/tests/reader.py python/tests/reader2.py
	  python/tests/reader3.py: small changes mostly due to context
	  reporting being different and DTD node being reported. Some
	  errors previously undetected are now caught and fixed.
	* doc/xmlreader.html: flagged last section as TODO

Sat Jan  4 20:40:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: integrated the Python 2.2 optimizations
	  from Hannu Krosing, while maintaining compatibility with 
	  1.5 and 2.1

Sat Jan  4 17:33:17 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: a bit of cleanup
	* xmlreader.c: small fix
	* doc/xmlreader.html: more work on the XmlTextReader tutorial
	* python/libxml.py: a few fixes pointed out by Hannu Krosing

Sat Jan  4 13:46:14 CET 2003 Daniel Veillard <daniel@veillard.com>

	* python/setup.py.in: patch from Stéphane Bidoul to include
	  drv_libxml2.py in setup.py

Sat Jan  4 01:43:06 CET 2003 Daniel Veillard <daniel@veillard.com>

	* doc/xmlreader.html: starting documenting the new XmlTextReader
	  interface.

Fri Jan  3 17:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added the --stream flag to use the TextReader API
	* xmlreader.c: small performance tweak

Fri Jan  3 13:50:55 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader2py: okay the DTD validation
	  code on top of the XMLTextParser API should be solid now.

Fri Jan  3 02:17:18 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader2py: Fixing some more mess
	  with validation and recursive entities while using the
	  reader interface, it's getting a bit messy...

Thu Jan  2 15:15:26 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: another couple of problem
	  related to IsEmptyElement reported by Stéphane Bidoul needed 
	  some fixes.

Thu Jan  2 13:57:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in python/Makefile.am python/drv_libxml2.py:
	  integrated drv_libxml2.py Python xml.sax driver from Stéphane Bidoul
	  based on the python XmlTextReader interface.

Wed Jan  1 22:05:40 CET 2003 Daniel Veillard <daniel@veillard.com>

	* tree.c: backing out one change in the last patch which broke the
	  regression tests

Wed Jan  1 21:57:28 CET 2003 Daniel Veillard <daniel@veillard.com>

	* global.data globals.c tree.c include/libxml/globals.h: applied
	  an old patch from Lukas Schroeder to track node creation and
	  destruction. Probably missing a lot of references at the moment
	  and not usable reliably.

Wed Jan  1 20:12:07 CET 2003 Daniel Veillard <daniel@veillard.com>

	* NEWS doc/Makefile.am doc/news.xsl: generate the NEWS file
	  from doc/news.html and a stylesheet

Wed Jan  1 16:09:57 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed another couple of
	  xmlreader bugs reported by Stéphane Bidoul and added tests.

Wed Jan  1 15:42:54 CET 2003 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader2.py: fixed another validity
	  checking in external parsed entities raised by Stéphane Bidoul
	  and added a specific regression test.
	* python/tests/reader3.py: cleanup

Tue Dec 31 15:44:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader2.py: fixed a problem with
	  validation within entities pointed by Stéphane Bidoul, augmented
	  the tests to catch those.

Tue Dec 31 12:15:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: modified the generator to allow keeping
	  class references when creating new classes, needed to fix a bug
	  pointed by Stéphane Bidoul where the input buffer of the
	  xmlTextReader instance gets destroyed if the python wrapper for
	  the input is not referenced anymore.

Mon Dec 30 19:39:36 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed another pair of problem
	  pointed by Stéphane Bidoul: depth start at 0 and a parse problem.

Mon Dec 30 13:36:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed another problem
	  pointed by Stéphane Bidoul

Mon Dec 30 12:39:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed a limit case problem
	  with "<a/>"

Mon Dec 30 11:53:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: warn on xmlns:prefix="foo"
	* xmlreader.c python/tests/reader.py: fixed a couple of problem
	  for namespace attributes handling.

Mon Dec 30 00:59:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* entities.c parser.c tree.c include/libxml/entities.h: Fixed
	  a really nasty problem raised by a DocBook XSLT transform
	  provided by Sebastian Bergmann

Sun Dec 29 12:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c python/tests/reader.py: fixed a bug pointed out
	  by Stéphane Bidoul and integrated it into the tests

Sat Dec 28 23:49:12 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml:
	  extended the XmlTextReader API a bit, addding accessors for
	  the current doc and node, and an entity substitution mode for
	  the parser.
	* python/libxml.py python/libxml2class.txt: related updates
	* python/tests/Makefile.am python/tests/reader.py 
	  python/tests/reader2.py python/tests/reader3.py: updated a bit
	  the old tests and added a new one to test the entities handling

Sat Dec 28 22:11:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml2class.txt 
	  python/tests/reader.py python/tests/reader2.py: changed the
	  generator to provide casing for the XmlTextReader similar to
	  C# so that examples and documentation are more directly transposable.
	  Fixed the couple of tests in the suite.

Sat Dec 28 15:55:32 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/guidelines.html: added a document on guildeline for
	  publishing and deploying XML

Fri Dec 27 20:35:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c xmlreader.c: final touch running DTD validation
	  on the XmlTextReader
	* python/tests/Makefile.am python/tests/reader2.py: added a
	  specific run based on the examples from test/valid/*.xml

Fri Dec 27 15:17:20 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.py: added a few predefined xmlTextReader parser
	  configuration values.

Fri Dec 27 12:57:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml_wrap.h: trying to fix #102037

Fri Dec 27 12:18:14 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixing bug #95296, when the predefined entities
	  are redefined in the DTD the default one must be used
	  instead anyway.

Wed Dec 25 19:22:06 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml
	* doc/xmllint.1
	Add discussion of XML_DEBUG_CATALOG to xmllint man
	page - bug #100907

Mon Dec 23 16:54:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c: Fixed the empty node detection to avoid reporting
	  an inexistant close tag.

Mon Dec 23 15:42:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/setup.py.in: patch from Stéphane Bidoul
	  for Python 2.1

Sun Dec 22 11:24:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* testC14N.c vms/config.vms: applied Craig A. Berry patches for VMS

Fri Dec 20 11:27:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml python/tests/reader.py: one really need
	  to provide the base URI information when creating a reader parser
	  from an input stream. Updated the API and the example using it.

Fri Dec 20 01:11:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* testReader.c xmlreader.c valid.c include/libxml/tree.h
	  include/libxml/valid.h include/libxml/xmlreader.h: working on
	  DTD validation on top of xml reader interfaces. Allows to
	  validate arbitrary large instances. This required some extensions
	  to the valid module interface and augmenting the size of xmlID
	  and xmlRef structs a bit.
	* uri.c xmlregexp.c: simple cleanup.

Wed Dec 18 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: more
	  work on the xml reader interfaces.
	* AUTHORS MAINTAINERS doc/* win32/*: updated Igor's mail and the
	  Web page for the Windows binaries.

Tue Dec 17 19:31:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied a patch for VMS following the report by
	  Nigel Hall

Tue Dec 17 11:29:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: the parseStartTag bug fix wasn't complete.

Mon Dec 16 23:00:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Vyacheslav Pindyura managed to trigger a bug in
	  parseStartTag, fixing it.
	* test/att4 result/att4 result/noent/att4: adding the test
	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
	  more methods to XmlTextReader.

Mon Dec 16 19:31:16 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: added more xml reader exports
	* win32/Makefile.msvc win32/Makefile.mingw: added xml reader interface
	  to the build

Mon Dec 16 06:36:54 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	plus generated html and pdf
	Updating tutorial again based on further comments from Niraj
	Tolia on the last iteration

Sun Dec 15 21:27:30 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/includekeyword.c
	* doc/tutorial/includegetattribute.c
	plus generated html and pdf
	Adding fix from Niraj Tolia to tutorial to properly free memory.

Mon Dec 16 00:34:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c include/libxml/xmlreader.h doc/libxml2-api.xml: added
	  more methods of XmlTextReader.
	* python/libxml2class.txt python/tests/reader.py: this increased the
	  methods in the bndings, augmented the test to check those new
	  functions.

Sat Dec 14 23:57:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlreader.c doc/libxml2-api.xml: added the close and getattribute
	  methods of XmlTextReader.
	* python/generator.py python/libxml_wrap.h python/types.c 
	  python/libxml2class.txt: added the reader to the Python bindings
	* python/tests/Makefile.am python/tests/reader.py: added a specific
	  test for the Python bindings of the Reader APIs
	* parser.c: small cleanup.

Fri Dec 13 11:39:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: fallback was only copying the first child not the
	  full child list of the fallback element, closes #89684 as reopened
	  by Bernd Kuemmerlen

Thu Dec 12 13:34:59 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: exported htmlNodeDumpOutput

Thu Dec 12 10:59:11 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release of 2.4.30
	* doc/apibuild.py doc/libxml2-api.xml: fixups to the api builder,
	  gives enum values, fix functype return type, put back fields in
	  structs 
	* doc/*: updated the docs rebuilt

Thu Dec 12 01:09:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: patch from Mark Vakoc
	  about htmlNodeDumpOutput location.
	* xpath.c: removed an undefined function signature
	* doc/apibuild.py doc/libxml2-api.xml: the script was exporting
	  too many symbols in the API breaking the python bindings.
	  Updated with the libxslt/libexslt changes.

Wed Dec 11 20:26:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release of 2.4.29
	* doc/*: rebuilt the docs and API
	* xmlreader.c: a few more fixes for the XmlTextReader API

Wed Dec 11 18:01:15 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: applied mingw patch from Magnus Henoch

Wed Dec 11 16:58:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* catalog.c doc/libxml2-api.xml: a bit more cleanup

Wed Dec 11 14:54:47 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/apibuild.py doc/libxml2-api.xml doc/Makefile.am: new API
	  building Python script, does the C parsing directly, generates
	  a better API description including structure fieds defs and
	  enums. Still a couple of bugs, but good enough for the python
	  wrappers now.
	* DOCBparser.c SAX.c nanohttp.c parser.c parserInternals.c tree.c
	  valid.c xmlIO.c xmlmemory.c xmlreader.c xmlregexp.c xmlschemas.c
	  include/libxml/schemasInternals.h include/libxml/tree.h: more
	  cleanup based on the python analysis script reports.
	* libxml.spec.in: make sure the API XML description is part of the
	  devel package.

Tue Dec 10 16:16:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c debugXML.c encoding.c hash.c
	  nanoftp.c nanohttp.c parser.c parserInternals.c testC14N.c
	  testDocbook.c threads.c tree.c valid.c xmlIO.c xmllint.c xmlmemory.c
	  xmlreader.c xmlregexp.c xmlschemas.c xmlschemastypes.c xpath.c:
	  code cleanup, especially the function comments.
	* tree.c: fixed a small bug when freeing nodes which are XInclude ones.

Mon Dec  9 15:08:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlreader.c include/libxml/Makefile.am
	  include/libxml/xmlreader.h:  Adding a new set of APIs based on
	  the C# TextXmlReader API but converted to C. Allow to parse
	  in constant memory usage, far simpler to program and explain
	  than the SAX like APIs, unfinished but working.
	* testReader.c: test program

Sun Dec  8 18:36:01 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: applied YALDSP from Mark Vakoc

Wed Dec  4 16:08:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Chip turner indicated that XHTML1 serialization
	  rule for style actually break on both IE and Mozilla, 
	  try to avoid the rule if escaping ain't necessary

Wed Dec  4 12:43:28 CET 2002 Daniel Veillard <daniel@veillard.com>

	* nanhttp.c: handle HTTP URL escaping, problem reported by
	  Glen Nakamura and Stefano Zacchiroli

Sat Nov 30 12:19:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c parser.c valid.c xpath.c: code cleanup

Thu Nov 28 12:53:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* uri.c: Johann Richard pointed out some XPointer problems for
	  URN based URI references in XInclude. Modified the URI parsing
	  and saving routines to allow correct parsing and saving of 
	  XPointers, especially when attached to "opaque" scheme accordingly
	  to RFC 2396

Wed Nov 27 20:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: applied the same kind
	  of refactoring to the HTML saving code.
	* doc/libxml2-*.xml doc/API*.html: slight API changes got reflected
	  in the doc.

Wed Nov 27 12:40:16 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: refactored the XML dump of a node
	  to a buffer API to reuse the generic dump to an OutputIO layer,
	  this reduces code, fixes xmlNodeDump() for XHTML, also made
	  xmlNodeDump() now return the number of byte written.

Wed Nov 27 09:00:00 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/setup.py.in: another patch from Stéphane Bidoul for 
	  Python bindings on Windows
	* doc/parsedecl.py: small cleanup

Mon Nov 25 17:28:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in configure.in: add a line in %changelog for releases

Mon Nov 25 14:18:27 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Marcus Clarke fixing a problem in entities
	  parsing that was detected in KDe documentations environment.

Mon Nov 24 14:13:21 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>

	* python/libxml.c (libxml_prev): Return the previous as opposed to
	the next node (I guess this is the result of some cut & paste programming:)

Sat Nov 23 17:22:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: Jan Rafaj pointed a bug in the Makefile.

Sat Nov 23 12:21:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/setup.py.in: trying
	  to fix the Python bindings build on Windows (Stéphane Bidoul)

Fri Nov 22 22:41:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: added option for python bindings
	* win32/libxml2.def.src: added more exports

Fri Nov 22 18:50:34 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.mingw: fixed unresolved symbols when linking with
	  pthreads
	* win32/wince/*: applied updates to Windows CE port from Javier

Fri Nov 22 15:51:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.28
	* libxml.spec.in doc/Makefile.am: some cleanup
	* doc/*: updated the news and regenerated.

Fri Nov 22 14:15:14 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: final touch at closing #87235 </p> end tags
	  need to be generated.
	* result/HTML/cf_128.html result/HTML/test2.html result/HTML/test3.html:
	  this change slightly the output of a few tests
	* doc/*: regenerated

Fri Nov 22 13:26:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixing bug #99190 when UTF8 document are
	  parsed using the progressive parser and the end of the chunk
	  is in the middle of an UTF8 multibyte character.

Fri Nov 22 13:13:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* threads.c: fixed initialization problem in xmlNewGlobalState
	  which was causing crash.
	* globals.c: removed duplicate call to initxmlDefaultSAXHandler
	  in xmlInitializeGlobalState.
	* parserInternals.c: cleaned up ctxt->sax initialisation.

Thu Nov 21 15:05:45 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c include/libxml/tree.h: modified the existing APIs
	  to handle XHTML1 serialization rules automatically, also add
	  xmlIsXHTML() to libxml2 API. Some tweaking to make sure
	  libxslt serialization uses it when needed without changing
	  the library API.
	* test/xhtml1 result/noent/xhtml1 result/valid/xhtml1.xhtml
	  result/xhtml1: added a new test specifically for xhtml1 output
	  and updated the result of one XHTML1 test

Wed Nov 20 14:24:56 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c parserInternals.c encoding.c: fixed #99082
	  for xi:include encoding="..." support on text includes.
	* result/XInclude/tstencoding.xml test/XInclude/docs/tstencoding.xml
	  test/XInclude/ents/isolatin.txt : added a specific regression test
	* python/generator.py python/libxml2class.txt: fixed the generator
	  the new set of comments generated for doc/libxml2-api.xml were
	  breaking the python generation.

Tue Nov 19 23:25:47 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: repair some problem if gtk-doc fail or such
	* configure.in: patch for Solaris on new autoconf closes #98880 
	* doc/parsedecl.py: repair the frigging API building script,
	  did I say that python xmllib sucks ?
	* doc/libxml2-api.xml doc/libxml2-refs.xml: regenerated, reordering
	  and some comment are no more truncated.

Tue Nov 19 09:09:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Martin Stoilov pointed out a potential leak in
	  xmlCreateMemoryParserCtxt

Mon Nov 18 16:05:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed bug #98879 a corner case when 0 is
	  included in HTML documents and using the push parser.

Mon Nov 18 00:11:24 CET 2002 ERDI Gergo <cactus@cactus.rulez.org>

	* configure.in (PYTHON_SITE_PACKAGES): If --with-python is
	  specified, look for the Python interpreter not just in the
	  specified root but also in the specified location. Fixes #98825

Sun Nov 17 23:36:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: fixing bug #98792 , node may have no doc
	  and dereferencing without checking ain't good ...

Sun Nov 17 10:25:43 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing release 2.4.27
	* doc/* : updated and rebuilt the docs
	* doc/Makefile.am libxml.spec.in: try to make sure the tutorial
	  and all the docs are actually packaged and in the final RPMs
	* parser.c parserInternals.c include/libxml/parser.h: restore
	  xmllint --recover feature.

Sat Nov 16 16:30:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c xpath.c: fixing #96925 wich was also dependent on the
	  processing of parsed entities, and XPath computation on sustitued
	  entities.
	* testXPath.c: make sure entities are substitued.

Fri Nov 15 16:22:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #96594, which was totally dependent on the 
	  processing of internal parsed entities, which had to be changed.

Fri Nov 15 12:16:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am python/Makefile.am python/tests/Makefile.am:
	  trying to fix bug #98517 about building outside the source tree
	* doc/xml.html doc/FAQ.html: fixed the link to libiconv #94585

Thu Nov 14 18:41:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: cleanup
	* win32/Makefile.mingw: integrated mingw in JScript configure
	* win32/Makefile.msvc: modified to allow mingw coexistence
	* win32/configure.js: integrated mingw
	* win32/Readme.txt: cleanup

Tue Nov 12 22:06:45 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: strengthen the guard in the Pop macros,
	  like in the XML parser, closes bug #97315

Tue Nov 12 21:56:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h: fixed bug #98338 , fatalError SAX
	  callback is never used.

Tue Nov 12 13:32:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: fixed the initialization of the SAX structure
	  which was breaking xsltproc
	* xpath.c: patch from Petr Pajas for CDATA nodes
	* tree.c: patch from Petr Pajas improving xmlGetNodePath()
	* parser.c include/libxml/parser.h: patch from Peter Jones
	  removing a leak in xmlSAXParseMemory() and adding the
	  function xmlSAXParseMemoryWithData()

Mon Nov 11 20:47:03 MST 2002 John Fleck <jfleck@inkstain.net>

	adding pdf of tutorial, changing web page to link to it
	* doc/tutorial/xmltutorial.pdf
	* doc/xml.html
	* doc/docs.html

Sun Nov 10 20:48:57 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/ar01s08.html
	adding file what I forgot for tutorial

Sun Nov 10 20:33:13 MST 2002 John Fleck  <jfleck@inkstain.net>

	Adding encoding discussion to tutorial
	Added:
	* doc/tutorial/images/*.png: DocBook admonition image files
	* doc/tutorial/apf.html, apg.html: new generated html
	* doc/tutorial/includeconvert.c: conversion code entity file
	changed:
	* doc/tutorial/xmltutorial.xml: DocBook original
	* doc/tutorial/*.html: generated html

Fri Nov  8 17:59:32 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/libxml/*.h: retired xmlwin32version.h
	* doc/Makefile.am: retired xmlwin32version.h
	* win32/configure.js: retired xmlwin32version.h

Fri Nov  8 16:55:47 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: exported additional symbols
	* include/libxml/xmlmemory.h: exported the rest of the xmlMem* 
	  sisterhood

Fri Nov  8 16:08:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* globals.c: fixed a typo pointed out by Igor
	* xpath.c: try to speed up node compare using line numbers
	  if available.

Thu Nov  7 15:16:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: make xmlFreeNode() handle attributes correctly.

Wed Nov  6 23:51:11 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* catalog.c: completed the #96963 fix, as reported by Karl
	  Eichwalder

Wed Nov  6 16:48:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpointer.c: tried to fix bug #97852 reported by Nicolas Noffke

Sun Nov  3 10:43:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: switched the order of a couple of includes
	  to fix bugs #97100

Thu Oct 31 17:11:46 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* catalog.c: fixed bug #96963, reverted to the old behaviour of
	  xmlLoadCatalogs that used to separate directories with a ':'.

Thu Oct 31 16:55:21 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* threads.c: improvements to the Windows-side of thread handling
	* testThreads.c: conditionally excluded unistd.h
	* testThradsWin32.c: broke overlong lines
	* include/win32config.h: adapted thread-related macros to the new
	  scheme and for pthreads on Windows
	* win32/Makefile.msvc: introduced a more flexible thread build, 
	  added testThreads[Win32].c to the build
	* win32/configure.js: introduced a more flexible thread config

2002-10-31  John Fleck  <jfleck@inkstain.net>

	* doc/xml.html (and, by implication, FAQ.html)
	added UTF-8 conversaion FAQ from Marcus Labib Iskander

Tue Oct 29 18:32:33 CET 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* configure.in: removed xmlwin32version.h
	* include/libxml/Makefile.am: removed xmlwin32version.h

Mon Oct 28 14:01:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Brian Stafford to fix a bug
	  in xmlReconciliateNs()

Mon Oct 28 13:51:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Christian Glahn to allow
	  xmlNewChild() on document fragment nodes

Sat Oct 26 15:27:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Christian Glahn found a problem with a recent
	  patch to xmlParseBalancedChunkMemoryRecover()
	* xmlschemas.c: Charles Bozeman fixed some Schemas validation
	  problems
	* result/schemas/elem* result/schemas/seq* test/schemas.elem*
	  test/schemas/seq*: added the test cases from Charles

Wed Oct 23 16:42:29 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am config.h.in libxml.spec.in doc/Makefile.am:
	  serious cleanup of the spec file and associated changes
	  in the Makefiles.
	* valid.c: try to remove some warnings on x86_64

Wed Oct 23 10:53:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/Makefile.am: added winsockcompat.h to EXTRA_DIST to
	  fix bug #96586

Tue Oct 22 21:13:06 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: Mikhail Sogrine pointed out a bug in HTML
	  parsing, applied his patch
	* result/HTML/attrents.html result/HTML/attrents.html.err
	  result/HTML/attrents.html.sax test/HTML/attrents.html:
	  added the test and result case provided by Mikhail Sogrine

Tue Oct 22 19:33:20 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* vms/build_libxml.com vms/config.vms vms/readme.vms
	  include/libxml/parser.h include/libxml/parserInternals.h
	  include/libxml/tree.h include/libxml/xmlIO.h
	  HTMLparser.c catalog.c debugXML.c parser.c parserInternals.c
	  tree.c triodef.h trionan.c uri.c xmlIO.c xpath.c:
	  Applied the VMS update patch from Craig A. Berry
	* doc/*.html: update

Tue Oct 22 16:27:31 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/encoding.h encoding.c: made xmlGetUTF8Char public

Tue Oct 22 16:25:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: adding a grep command to --shell in xmllint
	  for T.V. Raman

Tue Oct 22 16:23:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: tried to fix some of the problem with --sgml

Mon Oct 21 09:57:10 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: tried to fix bug #91500 where doc->children may
	  be overriden by a call to xmlParseBalancedChunkMemory()

Mon Oct 21 09:04:32 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* catalog.c: tried to fix bug #90945 w.r.t. parsing of system
	  identifiers in SGML catalogs containing '&'

Sun Oct 20 23:31:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/types.c: fixed bugs when passing result value tree
	  to Python functions.

Fri Oct 18 13:18:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing the release of 2.4.26
	* doc/*: updated and rebuilt the documentation

Wed Oct 16 20:01:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a XML Namespace compliance bug reported by
	  Alexander Grimalovsky

Wed Oct 16 17:18:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed serialization of script and style when
	  they are not lowercase (i.e. added using the API to the tree).

Wed Oct 16 16:31:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: make xmlValidateDocument emit a warning msg if there
	  is no DTD, pointed by Christian Glahn

Wed Oct 16 16:05:38 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: fixed the validation of sequences
	  content model when some of the blocks have min or max, and a couple
	  of bugs found in the process.
	* result/schemas/list0* test/schemas/list0*: added some specific
	  regression tests

Tue Oct 15 12:41:01 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* README: updated the contact informations

Tue Oct 15 10:35:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: use test -f instead of test -e since Solaris /bin/sh
	  misses it, reported by Peter Bray.

Mon Oct 14 17:37:32 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: investigating xmlNodeGetContent() on namespace nodes
	  and removed a few warnings

Mon Oct 14 13:12:55 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Christian Glahn found a small bug in the push parser.
	* xmlIO.c include/libxml/xmlIO.h: cleaned up and made xmlCheckFilename
	  public

Wed Oct  9 23:11:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c include/libxml/xmlschemas.h: added
	  xmlSchemaNewMemParserCtxt to parse a schemas from a memory area
	* testSchemas.c: added --memory to test the new interface

Wed Oct  9 16:22:54 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/index.py doc/search.php: integrated the XSLT indexing,
	  a few fixed in the indexer, added a scope selection at the
	  search level.

Wed Oct  9 12:18:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: Joe Marcus Clarke reported a segfault on FBsd 
	  this was due to uninitialized parts of the validation context

Tue Oct  8 23:24:20 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: applied patch from Mark Vakoc except the API
	  change, preserved it.
	* doc/*: updated the docs to point to the search engine for
	  information lookup or before bug/help reports.

Tue Oct  8 18:53:31 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/index.py doc/search.php: added mailing-list archives
	  indexing and lookup

Tue Oct  8 10:25:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: patch from Mark Vakoc to fix xmlNodeGetPath()

Mon Oct  7 13:12:03 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/index.py: improved HTML indexing
	* doc/search.php: make the queries also lookup the HTML based indexes

Sun Oct  6 23:50:29 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/index.py: added HTML page indexing 

Fri Oct  4 15:33:55 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* xmlIO.c: extended Windows path normalisation to fix the base
	  problem in libxslt.
	* catalog.c: fixed list handling in XML_CATALOG_FILES

Fri Oct  4 13:43:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: typo/bug found by Christian Glahn

Sun Sep 29 19:44:10 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* xmlIO.c: applied Windows CE patch from Javier.
	* win32/wince: new directory, contains support for the PocketPC
	  with Windows CE from Javier.
	* include/win32config.h: reorganised, removed duplicate 
	  definitions and applied WinCE patch from Javier.
	* include/wsockcompat.h: new file, now contains WinSock
	  compatibility macros.
	* win32/Makefile.msvc: introduced double-run compilation.

Thu Sep 26 19:48:06 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing release
	  of 2.4.25
	* doc/*: updated and regenerated teh docs and web pages.

Thu Sep 26 17:33:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c valid.c include/libxml/valid.h: fixed bug #92518 validation
	  error were not covering namespace declarations.
	* result/valid/dia.xml test/valid/dia.xml: the test wasn't valid,
	  it was missing the attribute declaration for the namespace
	* result/VC/NS3: the fix now report breakages in that test

Thu Sep 26 14:39:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixing bug #94241 on HTML boolean attributes

Thu Sep 26 14:25:33 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*: added the 3 new modules xmlregexp xmlautomata and xmlunicode
	  and regenerated the docs and web site

Thu Sep 26 11:45:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c xmlschemas.c xmlschemastypes.c xpath.c: make sure
	  ATTRIBUTE_UNUSED is always put after the attribute declaration,
	  not before

Thu Sep 26 11:33:28 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml2class.txt: fixed a stupid error
	  breaking the python API

Thu Sep 26 00:31:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* trio.c trio.h triodef.h trionan.c trionan.h triop.h
	  triostr.c triostr.h: applied a trio update patch from 
	  Bjorn Reese which should work with MinGW

Thu Sep 26 00:21:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: improving some documentation comments
	* xmlregexp.c: found and fixed a mem leak with python regression tests
	* doc/*: rebuilt the doc and the API XML file including the 
	  xmlregexp.h xmlautomata.h and xmlunicode.h headers
	* python/generator.py python/libxml2class.txt python/libxml_wrap.h
	  python/types.c: added access to the XML Schemas regexps from
	  python
	* python/tests/Makefile.am python/tests/regexp.py: added a 
	  simple regexp bindings test

Tue Sep 24 08:10:48 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/xml.html:
	  fixing ftp links - thanks to Vitaly Ostanin

Tue Sep 24 16:08:17 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: fixed the data callback on transition functionality
	  which was broken when using the compact form
	* result/schemas/*: updated the results, less verbose, all tests
	  pass like before
	* DOCBparser.c testAutomata.c testC14N.c testSchemas.c testThreads.c
	  testXPath.c valid.c xinclude.c xmllint.c xmlregexp.c xmlschemas.c
	  xmlschemastypes.c xpath.c python/libxml.c: removed a bunch of
	  annoying warnings
	* xpath.c: try to provide better error report when possible

Sat Sep 21 14:56:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: fixed a breakage raised by Jacob

Fri Sep 20 20:08:18 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/win32config.h: added HAVE_ERRNO_H definition for parts
	  which don't use sockets

Fri Sep 20 18:40:50 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: applied zlib patch from Daniel Gehriger
	* win32/configure.js: applied zlib patch from Daniel Gehriger

Fri Sep 20 15:40:14 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: applied the patch from Mark Vakoc for 
	  regexp support
	* win32/libxml2.def.src: applied the patch from Mark Vakoc
	  for regexp support

Fri Sep 20 15:35:33 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: as pointed by Igor Float and Double
	  parsing ain't finished yet

Fri Sep 20 14:00:16 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in: trying to fix #88412 by bypassing
	  all the python subdir if python ain't detected

Thu Sep 19 21:46:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in include/libxml/xmlversion.h.in:
	  made configuring with regexps/automata/unicode the default
	  but without schemas ATM
	* testRegexp.c valid.c xmlregexp.c include/libxml/xmlregexp.h:
	  fixed the regexp based DTD validation performance and memory
	  problem by switching to a compact form for determinist regexps
	  and detecting the determinism property in the process. Seems
	  as fast as the old DTD validation specific engine :-) despite
	  the regexp built and compaction process.

Wed Sep 18 18:27:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: determinism is debugged, new DTD checking code now works
	  but xmlFAComputesDeterminism takes far too much CPU and the whole
	  set usues too much memory to be really usable as-is

Wed Sep 18 00:54:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed another stupid bug in xmlGetNodePath()
	* xmllint.c: --version now report the options compiled in

Tue Sep 17 23:48:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: small cleanup
	* valid.c xmlregexp.c: switched DTD validation to use only regexp
	  when configured with them. A bit of debugging around the determinism
	  checks is still needed

Tue Sep 17 21:22:25 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml_wrap.h: stupid bug found by mattam@netcourrier.com

Tue Sep 17 19:58:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: small portability glitch fixed.

Mon Sep 17 12:38:08 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: incomplete steps for real/double support
	* testAutomata.c include/libxml/xmlautomata.h
	  include/libxml/xmlregexp.h: avoiding a compilation problem
	* valid.c include/libxml/valid.h: starting the work toward using
	  the regexps for actual DTD validation

Fri Sep 13 16:46:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: cosmetic cleanup
	* valid.c include/libxml/tree.h include/libxml/valid.h: started 
	  integrating a DTD validation layer based on the regexps

Thu Sep 12 18:01:29 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c: fixed a bug reported by Jeff Goff,
	  the determinism was tested before eliminating the epsilon
	  transitions :-(

Thu Sep 12 16:57:45 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml2-python-api.xml python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: updated the python
	  bindings, added code for easier File I/O, and the ability to
	  define a resolver from Python fixing bug #91635
	* python/tests/Makefile.am python/tests/inbuf.py
	  python/tests/outbuf.py python/tests/pushSAXhtml.py
	  python/tests/resolver.py python/tests/serialize.py: updated
	  and augmented the set of Python tests.

Tue Sep 10 21:05:28 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: added more readme info for the binary
	  package.

Tue Sep 10 14:15:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fixed a stupid out of bound array error

Tue Sep 10 13:09:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlIO.h xmlIO.c parser.c HTMLparser.c DOCBparser.c:
	  messing around with support for Windows path, cleanups,
	  trying to identify and fix the various code path to the
	  filename access. Added xmlNormalizeWindowsPath()

Thu Sep  5 16:19:18 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* error.c valid.c: working on better error reporting of validity
	  errors, especially providing an accurate context.
	* result/valid/xlink.xml.err result/valid/rss.xml.err: better
	  error reports in those cases.

Thu Sep  5 13:29:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c HTMLparser.c c14n.c entities.c list.c
	  parser.c parserInternals.c xmlIO.c: get rid of all the 
	  perror() calls made in the library execution paths. This
	  should fix both #92059 and #92385

Thu Sep  5 13:13:17 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: memory leak reporting was broken after a change
	  of the preprocessor symbol used to activate it.

Thu Sep  5 13:10:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: try to make the copy function work for node of
	  type XML_DOCUMENT_FRAG_NODE, they are only created by the
	  DOM layers though, not libxml2 itself.

Thu Sep  5 12:57:38 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: try to provide file and line informations, not all
	  messages are covered, but it's a (good) start

Thu Sep  5 12:49:35 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: reimplemented a large part of the XInclude
	  processor, trying to minimize resources used, James Henstridge
	  provided a huge test case which was exhibiting severe memory
	  consumption problems.

Thu Sep  5 10:07:13 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: applied patch from Christophe Merlet to
	  reestablish DESTDIR

Wed Sep  4 14:13:34 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixes libary path for x86_64 AMD

Tue Sep  3 21:14:19 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/includekeyword.c
	* doc/tutorial/xmltutorial.xml:
	(plus resulting generated html files)
	fixing one spot I missed in the tutorial where I hadn't freed
	memory properly

Sat Aug 31 19:31:17 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/includeaddattribute.c
	* doc/tutorial/includeaddkeyword.c
	* doc/tutorial/includegetattribute.c
	* doc/tutorial/includekeyword.c
	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/*.html:
	update tutorial to properly free memory (thanks to Christopher
	R. Harris for pointing out that this needs to be done)
	* doc/tutorial/images/callouts/*.png:
	added image files so the callouts are graphical, making it
	easier to read ( use "--param callout.graphics 1" to generate
	html with graphical callouts)

Wed Aug 28 13:44:54 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Libxml2-Logo-180x168.gif doc/Libxml2-Logo-90x34.gif:
	  nice logos generated by Marc Liyanage
	* doc/site.xsl *.html: changed the stylesheet to show the new
	  logo and regenerated the pages

Sun Aug 25 16:38:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: handle Windows sepecific file://localhost/ semantic ...

Thu Aug 22 22:03:19 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: possible mem leak patch from Jason Adams

Thu Aug 22 17:27:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: integrated xf:escape-uri() from Wesley Terpstra
	  in the XQuery namespace
	* configure.in: preparing 2.4.24
	* doc/*.html: updated the web pages

Thu Aug 22 16:19:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: closing bug #85258 by generating conditional
	  compile check to avoid linking to routines not configured in.

2002-08-22  Havoc Pennington  <hp@pobox.com>

	* autogen.sh: update error message for missing automake

Thu Aug 22 11:45:50 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: typo in target name resulted in libxml2.py
	  to not be rebuilt. fixed DESTDIR similary to the libxslt one.

Thu Aug 22 09:15:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* win32/win32/Makefile.mingw: updated with version from 
	  Elizabeth Barham at http://soggytrousers.net/repository/

Tue Aug 20 16:40:48 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: added the prefix location to the include
	and lib search path.

2002-08-18  Havoc Pennington  <hp@pobox.com>

	* autogen.sh: hardcode aclocal-1.4/automake-1.4 so that users with
	both automake 1.6 and 1.4 installed get the right automake. Means
	compilation from CVS will now require the latest automake 1.4
	release, or manually creating symlinks called "automake-1.4" and
	"aclocal-1.4"

Wed Aug 14 18:54:19 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in python/Makefile.am: more AMD 64 induced changes from
	  Frederic Crozat

Wed Aug 14 16:43:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: oops I was missing the xml:base fixup too
	* result/XInclude/*.xml: this adds xml:base attributes to most
	  results of the tests

Wed Aug 14 16:05:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xinclude.c: quick but apparently working implementation of
	  xi:fallback, should close bug #89684
	* Makefile.am test/XInclude/docs/fallback.xml 
	  result/XInclude/fallback.xml: added a basic test for fallback,
	  and run with --nowarning to avoid a spurious warning
	* configure.in: applied patch from Frederic Crozat for python
	  bindings on AMD 64bits machines.

Wed Aug 14 10:47:46 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: xmlSAXUserParseMemory() really ought to fail if
	  the caller don't pass a SAX callback block.

Wed Aug 14 10:29:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied the same fix for the XML-1.0 namespace to
	  xmlSearchNsByHref() as was done for xmlSearchNs()

Mon Aug 12 16:52:08 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.3: small cleanup of the man page
	* HTMLtree.c: fixed a potential problem raised by Petr Vandrovec
	  when serializing HREF attributes generated by XSLT.

Mon Aug 12 15:24:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c include/libxml/HTMLtree.h: integrated a cleaned up
	  version of Marc Liyanage' patch for boolean attributes in HTML
	  output

Mon Aug 12 14:11:59 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/tests/serialize.py: fixed the test results, indenting
	  behaviour changed slightly

Thu Aug  8 11:00:26 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* win32/dsp/libxml2.def.src win32/libxml2.def.src: added
	new c14n function to Windows def files

Fri Aug  2 16:46:46 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* c14n.c: fixed a memory leak in c14n code

Sat Aug  3 00:15:06 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parser.h: adding a new API for Christian
	  Glahn: xmlParseBalancedChunkMemoryRecover
	* valid.c: patch from Rick Jones for some grammar cleanup in
	  validation messages
	* result/VC/* result/valid/*: this slightly change some of the
	  regression tests outputs

Thu Aug  1 14:50:28 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: trying to fix a problem in namespaced attribute handling
	  raised by Christian Glahn

Thu Aug  1 12:17:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* encoding.c include/libxml/encoding.h: Opening the interface
	  xmlNewCharEncodingHandler as requested in #89415
	* python/generator.py python/setup.py.in: applied cleanup
	  patches from Marc-Andre Lemburg
	* tree.c: fixing bug #89332 on a specific case of loosing 
	  the XML-1.0 namespace on xml:xxx attributes

Wed Jul 31 23:27:42 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* c14n.c include/libxml/c14n.h: fixed one more c14n + namespaces
	corner case from new Merlin's test suite and added a callback
	that will be used to improve xmlsec performance

Mon Jul 29 18:22:00 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: trying to fix the <style> escaping problem in
	  HTML serialization bug #89342

Thu Jul 25 01:33:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/*.html: applied syntax patch from Rick Jones
	  and rebuilt the web site.

Mon Jul 22 11:04:48 PDT 2002  Aleksey Sanin <aleksey@aleksey.com>

	* include/libxml/tree.h: added _private member to xmlNs struct

Sun Jul 21 17:48:47 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixing bug #84876 based on the xml working
	  code.

Sun Jul 21 19:15:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* python/Makefile.am: enhanced to fix bug 72012 (errors
	  when using '-jX' make parameter)

Fri Jul 19 16:35:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: small additional enhancement for booleans
	  compared to nodesets

Wed Jul 17 19:48:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: changed the order of the encoding declaration
	  attributes in the meta tags due to a bug in IE/Mac

Fri Jul 12 08:45:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: enhanced handling of booleans (especially '='
	  and '!=' for nodesets) - fixes bug 85256.  Added new
	  routine xmlXPathNotEqualValues for more proper handling
	  of '!=' when nodesets are involved.

Thu Jul 11 21:45:52 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: fixing Red Hat bug #68614 by adding the
	  doc/xmlcatalog_man.xml to the source distribution

Wed Jul 10 21:26:13 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: Added a copy *.pdb to install, few have
	  asked for this.

Sat Jul  6 21:55:59 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.23
	* doc/*: rebuilt the docs

Sat Jul  6 21:11:20 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixing bug #84169 by fixing the
	  comment of xmlCreatePushParserCtxt to describe the 
	  encoding detection parameters better.

Sat Jul  6 19:44:56 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing bug #79331 in one path the lookup for
	  ID attributes on a namespaced node wasn't handled correctly :-\

Fri Jul  5 20:07:43 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: trying to fix 87235 about discarded white
	  spaces in the HTML parser.
	* result/HTML/*: this changes the output of a number of HTML
	  regression tests

Mon Jul  1 23:23:41 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: applied patch from Richard Jinks for the namespace
	  axis + fixed a memory error.
	* parser.c parserInternals.c: applied patches from Peter Jacobi
	  removing ctxt->token for good.
	* xmlschemas.c xmlschemastypes.c: fixed a few memory leaks
	  popped out by the regression tests.
	* Makefile.am: patch for threads makefile from Gary Pennington

Fri Jun 28 19:38:00 HKT 2002 William Brack <wbrack@mmm.com.hk>

	* xpath.c: enhanced behaviour of position() after usage of
	  expressions involving preceding-sibling (et al).

Tue Jun 18 09:58:48 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: applied a patch from Peter Jacobi to solve a problem
	  when compiling with the Watcom C on Win32 
	* result/schemas/*.err: the change of hashing algo generated
	  permutations in the output

Mon Jun 17 19:02:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: applied patch from Sander Vesik improving the quality of
	  the hash function.

2002-06-14  Aleksey Sanin  <aleksey@aleksey.com>

	* DOCBparser.c HTMLparser.c debugXML.c encoding.c
	nanoftp.c nanohttp.c parser.c tree.c uri.c xmlIO.c
	xmllint.c xpath.c: replaced sprintf() with snprintf()
	to prevent possible buffer overflow (the bug was pointed
	out by Anju Premachandran) 

Thu Jun 13 17:30:25 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed an uninitialized data error popped by valgrind
	  on PE references

Wed Jun 12 21:38:46 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/xml.html
	adding tutorial reference to the web page

Wed Jun 12 21:26:08 MDT 2002 John Fleck <jfleck@inkstain.net>

	* doc/tutorial/xmltutorial.xml
	* doc/tutorial/ar01s07.html
	* doc/tutorial/ape.html
	* doc/tutorial/includegetattribute.c
	adding section to tutorial about retrieving an attribute
	value

Tue Jun 11 12:07:04 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: applied a couple of patches from Peter Jacobi to start
	  to get rid of ctxt->token, with a possible significant speed
	  improvement to be gained once done. Better compliance with PE
	  references constructs in DTDs too.
	* test/valid/t[0-9]* result/valid/t[0-9]*: added a set of tests
	  from Peter too

Tue Jun 11 09:25:12 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Babak Vahedipour-Kunze reported that openTag in 
	  xmlParseElement was likely to have been deallocated at the
	  time of the report, possibly leading to segfault. Just report
	  the tag name now.

Mon Jun 10 18:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks for XPath substring() function
	* result/XPath/expr/strings test/XPath/expr/strings: new set of tests

2002-06-06  Aleksey Sanin  <aleksey@aleksey.com>

	* xmlIO.c: patch from Rachel Hestilow to fix bug #84340

Wed Jun  5 19:14:49 MDT 2002 John Fleck <jfleck@inkstain.net>

	*doc/FAQ.html
	fixing typos in FAQ, thanks to Robert Funnell for the
	editing help

Wed Jun  5 14:50:24 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* NEWS: got complaints from rpmlint that it was empty

Tue Jun  4 09:09:18 MDT 2002 John Fleck <jfleck@inkstain.net>

	* added doc/tutorial, including:
	apa.html
	apb.html
	apc.html
	apd.html
	ar01s02.html
	ar01s03.html
	ar01s04.html
	ar01s05.html
	ar01s06.html
	includeaddattribute.c
	includeaddkeyword.c
	includekeyword.c
	includestory.xml
	index.html
	xmltutorial.xml
	libxml tutorial, including generated html

Mon Jun  3 21:21:26 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* result/c14n/exc-without-comments/merlin-c14n-two-*
	  result/c14n/without-comments/merlin-c14n-two-*
	  test/c14n/exc-without-comments/merlin-c14n-two-*
	  test/c14n/without-comments/merlin-c14n-two-*
	  testC14N.c Makefile.am: added merlin-c14n-two.tar.gz tests for 
	c14n/exc-c14n and slightly modified test script to handle
	these test cases
	* c14n.c: fixed bugs for complicated nodes set (namespace
	without node and others from merlin-c14n-two.tar.gz)
	* include/libxml/xpathInternals.h win32/dsp/libxml2.def.src
	win32/libxml2.def.src: "opened" xmlXPathNodeSetFreeNs() function
	for xmlsec performance patch
	* xpath.c: fixed self::node() for namespaces and attributes

Mon Jun 03 00:04:21 2002 Chema Celorio <chema@ximian.com>

	* tree.h: added xmlDocFormatDump which is just as xmlDocDump
	  but with the format parameter
	* tree.c: made xmlDocDump a wrapper arround xmlDocFormatDump

Fri May 31 12:16:48 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* Makefile.am: updated c14n tests suite
	* c14n.c: performance improvement for previous c14n patch

Fri May 31 11:47:12 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: another peroformance patch from Peter Jacobi, that
	  time on parsing attribute values.

Thu May 30 23:34:27 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* Makefile.am result/c14n/* test/c14n/*: C14N tests integrated
	into LibXML2 test suite

Thu May 30 21:23:06 2002  Aleksey Sanin  <aleksey@aleksey.com>

	* c14n.c: propagating xpath ancesstors node fix to c14n
	plus small performance improvement to reduce number of
	mallocs
	* xpath.c: fixed ancestors axis processing for namespace nodes

Wed May 29 10:21:39 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c tree.c include/libxml/tree.h: performance patch from
	  Peter Jacobi

Mon May 27 23:18:33 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.22

Mon May 27 16:44:04 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c win32/libxml2.def.src win32/dsp/libxml2.def.src
	  include/libxml/HTMLparser.h: fixing #79334 making htmlParseDocument
	  a public entry point.
	* doc/*: rebuilt the API and docs

Mon May 27 14:16:28 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks to fix a problem introduced
	  in the previous patch and pointed by Norm

Fri May 24 13:10:22 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: fixing bug #81112

Fri May 24 13:03:24 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* uri.c: fixing bug #82848

Fri May 24 09:54:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* result/catalogs/mycatalog.full: Aleksey's commit changed the
	  output of one catalog test

Fri 24 May 2002 12:17:45 AM PDT Aleksey Sanin <aleksey@aleksey.com>

	* global.data globals.c tree.c include/libxml/globals.h 
	win32/libxml2.def.src win32/dsp/libxml2.def.src: changed
	default value for global parameter xmlIndentTreeOutput to 1 and
	introduced new global parameter xmlTreeIndentString (the string
	used to do one-level indent) with default value "  " (as it was
	in tree.c)

Thu May 23 13:55:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Merijn Broeren pointed out a problem when compiling
	  with trio and schemas.

Wed May 22 11:57:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks to fix the problem raised in
	  http://mail.gnome.org/archives/xml/2002-April/msg00246.htm

Wed May 22 08:38:19 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: a bit of work on import.
	* xmlschemastypes.c: Charles Bozeman provided a compare function
	  for date/time types so min/max facet restrictions should work,
	  indeterminate comparisons return an error instead of equal.
	* test/schemas/date_0* result/schemas/date_0_0: specific test
	  from Charles Bozeman too

Sat May 18 09:54:12 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.3 doc/buildDocBookCatalog: apply a couple of patches
	  from Christian Cornelssen fixing the man pages and the Catalog
	  building script.
	* xmlschemas.c include/libxml/schemasInternals.h: nothing new yet
	  next step is <xs:import> I now have a reasonable understanding
	  of how it works.

Thu May 16 10:43:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: applied a small buffer performance patch from Gary Pennington

Wed May 15 00:25:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/libxml2.def.src: exported xmlXPathNodeSetAddNs()

Tue May 14 13:00:48 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing an XPath function evalutation bug pointed out
	  by Alexey Efimov where the context was lost when evaluating
	  the function arguments

Mon 13 May 2002 11:37:39 PM PDT Aleksey Sanin <aleksey@aleksey.com>

	* xpath.c include/libxml/xpathInternals.h: maked xmlXPathNodeSetAddNs() 
	  function public for XMLSec performance optimizations

Mon May 13 12:32:22 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml2class.txt : fixed a problem
	  with the HTML parser pointed by Gary Benson
	* python/tests/Makefile.am python/tests/pushSAXhtml.py: sdding the
	  example

Thu 09 May 2002 11:19:00 AM PDT Aleksey Sanin <aleksey@aleksey.com>
	* parser.c: fixed bug #81159 (memory growth in SAX)

Tue 07 May 2002 09:20:21 AM PDT Aleksey Sanin <aleksey@aleksey.com>
	* xpath.c: fixed bug #78858 (the real fix)

Sat 04 May 2002 11:56:31 PM PDT Aleksey Sanin <aleksey@aleksey.com>
	* xpath.c: fixed bug #78858 (quick and durty fix to hide the problem)

Sun May  5 08:57:08 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: modified xmlNodeSetBase to allow changing the
	  base of a document.

Fri May  3 09:20:41 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemastypes.c: patch Charles Bozeman for validation of
	  all the date, time, and duration types
	* test/schemas/dur_0* result/schemas/dur_0*: associated tests
	* configure.in: fixed an error pointed by an user
	* xml2-config.in: fixed an error pointed by an user

Wed 01 May 2002 11:29:27 AM PDT Aleksey Sanin <aleksey@aleksey.com>

	* include/libxml/xmlIO.h win32/dsp/libxml2.def.src
	win32/libxml2.def.src xmlIO.c: exported default
	'file:', 'http:' and 'ftp:' protocols input handlers 
	and maked protocols comparisson case insensitive

Tue Apr 30 16:29:05 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: Neven Has detected a typo

Tue Apr 30 08:48:11 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* AUTHORS HACKING: added Aleksey Sanin <aleksey@aleksey.com>
	  as one of the persons allowed to commit directly to the
	  module.

Mon Apr 29 17:48:26 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.21
	* valid.c: raised a too low limit
	* doc/*: rebuilt the docs 

Wed Apr 24 13:41:03 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* test/XPath/expr/floats test/XPath/expr/functions
	  result/XPath/expr/floats result/XPath/expr/functions
	  xpath.c: another XPath conformance patch from Richard Jinks

Tue Apr 23 19:50:40 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: fixed validation of attribute groups.
	* test/schemas result/schemas: added an example from the primer

Tue Apr 23 09:11:37 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlschemas.c xmlschemastypes.c: more work on Schemas
	* test/schemas result/schemas: updated the test list

Mon Apr 22 17:59:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* TODO: updated a bit
	* parser.c: made a comment more specific
	* xmlregexp.c xmlschemas.c xmlschemastypes.c: more work on the
	  Schemas conformance.
	* test/schemas result/schemas: updated the test list

Sat Apr 20 19:36:39 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h:
	  implementing xs:all with minOccurs = 0
	* tes/schemas/* result/schemas/*: added more tests covering
	  xs:all

Sat Apr 20 09:22:50 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c: first implementation of the all particle, this
	  may need to be revisited for case where not all transitions
	  must be crossed.

Fri Apr 19 18:26:04 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: another entity processing update from Markus Henke

Fri Apr 19 17:14:24 CEST 2002 Bjorn Reese <breese@users.sourceforge.net>

	* trionan.c: fixed crash on OSF/1

Fri Apr 19 09:00:56 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c: more Schemas work
	* test/schemas/* result/schemas/*: added more tests coming
	  from the spec.

Thu Apr 18 23:00:02 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: patch from Aleksey Sanin reflecting a change in the
	  ExcC14N specification

Thu Apr 18 18:38:30 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: patch from Markus Henke, fix for recursive entities.

Thu Apr 18 17:49:24 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fix a problem with string() on a document node.

Thu Apr 18 16:40:42 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlschemas.c: more Schemas work
	* test/schemas/* result/schemas/*: added more tests coming
	  from the spec.

Thu Apr 18 13:52:52 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed & serialization bug introduced in 2.4.20
	* result/HTML/*: this changes a few things in the results

Wed Apr 17 20:34:37 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* include/libxml/tree.h: eliminated 'declaration different than
	 prototype' warning
	* include/win32config.h: "resolved" conflicts with errno.h

Wed Apr 17 18:26:07 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlregexp.c xmlschemas.c include/libxml/xmlautomata.h: more work
	  on the automata interfaces and debug of counted choices
	* test/schemas/* result/schemas/*: added a number of tests

Wed Apr 17 11:03:03 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmlschemas.c xmlschemastypes.c include/libxml/xmlschemas.h:
	  a bit of work on Schemas
	* testSchemas.c: try to make it more useful
	* test/schemas/* result/schemas/* Makefile.am: changed the
	  Schemas regression test procedure, started adding a few samples

Tue Apr 16 19:52:01 CEST 2002 Igor Zlatkovic <izlatkovic@stud.fh-frankfurt.de>

	* include/libxml/encoding.h: Patch for the Borland C++ builder
	* include/libxml/tree.h: Patch for the Borland C++ builder
	* threads.c: Patch for the Borland C++ builder
	* win32/bcb5: New directory for the Borland C++ builder
	 project files       

Tue Apr 16 19:46:55 CEST 2002 Igor Zlatkovic <izlatkovic@stud.fh-frankfurt.de>

	* win32/Makefile.msvc: Update for XML Schema support
	* win32/configure.js: Update for XML Schema support
	* win32/libxml2.def.src: Update for XML Schema support

Tue Apr 16 17:46:43 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am TODO_SCHEMAS configure.in genUnicode.py testAutomata.c
	 testRegexp.c testSchemas.c xmlregexp.c xmlschemas.c xmlschemastypes.c
	 xmlunicode.c include/libxml/Makefile.am
	 include/libxml/schemasInternals.h include/libxml/xmlautomata.h
	 include/libxml/xmlregexp.h include/libxml/xmlschemas.h
	 include/libxml/xmlschemastypes.h include/libxml/xmlunicode.h
	 include/libxml/xmlversion.h.in : merged the current state of
	 XML Schemas implementation, it is not configured in by default,
	 a specific --schemas configure option has been added.
	* test/automata test/regexp test/schemas Makefile.am
	  result/automata result/regexp result/schemas:
	  merged automata/regexp/schemas regression tests

Tue Apr 16 09:48:44 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Gary found a compile time problem, fixes #78823

Mon Apr 15 19:11:36 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: release of 2.4.20
	* doc/*: updated and rebuilt the docs

Mon Apr 15 14:55:53 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: patch from Cristian Gafton to build on
	  Red Hat 6.2, should also fix #75779

Mon Apr 15 12:14:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: first part of fixing #78729

Sun Apr 14 23:44:58 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c uri.c: fixing bug #78662 i.e. add proper
	  escaping of URI when saving HTML files.
	* result/HTML/*: this impacted some tests

Sun Apr 14 14:55:15 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: trying to fix #77441

Fri Apr 12 23:02:16 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlIO.h: Hallski complained it could not be
	  included by itself.

Thu Apr 11 10:23:36 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: applied an IEEE flag patch for OSF/1 #77825

Wed Apr 10 23:31:34 CEST 2002 Igor Zlatkovic <igor@stud.fh-frankfurt.de>

	* win32/configure.js: patch from Nilo for the c14n option
	* win32/Makefile.msvc: fixed libxml2.def generation with threads

Wed Apr 10 21:24:16 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c include/libxml/xmlwin32version.h.in: Silvan Minghetti
	  pointed erroneous use of LIBXML_THREADS_ENABLED instead of
	   LIBXML_THREAD_ENABLED

Wed Apr 10 18:12:52 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: another patch from Richard Jinks for substring conformance
	* test/XPath/expr/floats test/XPath/expr/strings
	  result/XPath/expr/floats result/XPath/expr/strings: update of the
	  test suite to check those.

Wed Apr 10 13:29:49 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: patch from Richard Jinks for .x float parsing.

Tue Apr  9 18:09:31 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Markus Henke when an encoding ain't recognized

Tue Apr  9 15:47:14 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: got a report that #include <string.h> was needed

Tue Apr  9 11:51:25 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied a fix from Anthony Jones for -o /--output

Tue Apr  2 20:27:11 MST 2002 John Fleck <jfleck@inkstain.net>

	* doc/example.html: fixing typo

Mon Apr  1 10:02:57 CEST 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a bug in the nodeset to boolean comparison code
	  pointed out by Melvyn Sopacua.

Fri Mar 29 23:41:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: Frédéric Crozat gave a patch related to the change
	  of Include paths breaking the libxml.m4

Fri Mar 29 18:25:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Fix bug #76927 forgot to save some context
	  when evaluating binary expressions

Thu Mar 28 19:22:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: fixed configure for MPE/iX from Markus Henke
	* xmlmemory.c: fixed initialization problems
	* xpath.c: another set of patches from Richard Jinks this
	  fixes "make XPathtests" on linux

Wed Mar 27 17:09:43 CET 2002 Daniel Veillard <daniel@veillard.com>

	* trionan.c trionan.h xpath.c: more patches from Richard Jinks
	* test/XPath/expr/compare test/XPath/expr/equality
	  test/XPath/expr/floats test/XPath/expr/functions
	  test/XPath/expr/strings result/XPath/expr/compare
	  result/XPath/expr/equality result/XPath/expr/floats
	  result/XPath/expr/functions result/XPath/expr/strings: Updated
	  tests though they show a divergence on Linux

Wed Mar 27 10:06:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c trionan.c: previous commit also included patches
	  from Richard Jinks on some IEEE support corner case

Wed Mar 27 10:03:11 CET 2002 Daniel Veillard <daniel@veillard.com>

	* AUTHORS HACKING: Added Igor Zlatkovic as official maintainer
	* python/Makefile.am python/tests/Makefile.am: Albert Chin pointed
	  that $(datadir) should be used for docs

Tue Mar 26 13:43:16 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: Thomas Steinborn pointed out #76404 that libxml2
	  could leak filedescriptors

Tue Mar 26 08:55:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in nanohttp.c: applied patch from Allan Clark for
	  UnixWare/OpenServer

Mon Mar 25 17:45:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.19
	* doc/*: rebuilt the docs

Mon Mar 25 17:34:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* nanohttp.c: fixing #76043, got fed up with non-portability
	  of that piece of code.

Mon Mar 25 13:08:21 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c SAX.c: Never commit without running "make tests" :-(
	  fix a couple of stupidities in the previous commit
	* result/*: a few changes in some attribute order result of previous
	  commit.

Mon Mar 25 11:46:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c SAX.c: fixed bug #76168, attribute redeclared in
	  the internal subset should not raise duplicate ID errors,
	  also there was a small bug in conjunction to namespace
	  declarations defaulted and xml:xxx attributes DTD definitions.

Fri Mar 22 15:13:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Richard Jinks also raised some rounding problems
	  this tries to fix them

Fri Mar 22 13:22:09 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: Richard Jinks spotted an incoherent memory allocation
	  behaviour in xmlXPathCastToString()

Thu Mar 21 14:25:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* encoding.c: fixed a bug in the ISO-Latin 1 to UTF8 encoder
	  raised by Morus Walter

Thu Mar 21 14:07:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c include/libxml/xmlversion.h.in: applied 2 fixups
	  from Igor

Thu Mar 21 13:30:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing #75619, related to a problem when trying
	  to evaluate condition when the current node set resulting
	  from that sub-step evaluation is empty. Also fixes 2 potential
	  problem with previous-sibling and next-siblings axis.

Thu Mar 21 09:03:59 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: patch from Mark Vakoc to build C14N if DocBook and
	  HTML support is not configured in.

Wed Mar 20 22:42:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c error.c parser.c parserInternals.c tree.c xmlIO.c
	  include/libxml/tree.h: dohh I really didn't intended to commit
	  this test version :-(

Wed Mar 20 20:20:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* testSAX.c: I wanted to see the real speed at the SAX interface
	  after a little too many Ximianer started complaining about the
	  parser speed.
	  added a --quiet option:
	  paphio:~/XML -> ls -l db100000.xml 
	  -rw-rw-r--    1 veillard www      20182040 Mar 20 10:30 db100000.xml
	  paphio:~/XML -> time ./testSAX --quiet db100000.xml 
	  3200006 callbacks generated
	  real	0m1.270s
	  Which means 16MBytes/s and 3Mcallback/s

Tue Mar 19 19:33:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: valgrind spotted another error that time when running
	  on libxslt regression tests

Tue Mar 19 15:24:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: adding "make valgrind" running the full regression
	  tests (except python ones) under Valgrind (using valgrind -q
	  which was kindly added by the author).
	* valid.c: stupid bug pinpointed by Valgrind, the regression tests
	  passes cleanly now except an obcure floating point initialization
	  raised in log10() in one XPath regression test ???
	* tree.c: edited some comments to close #75244

Tue Mar 19 12:15:20 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: pretty insane thing, the xmlXPathFormatNumber()
	  was not serializing 1 as "1" if LC_ALL=sv_SE :-( and in the
	  context of ScrollKeeper, made sure that if the number is
	  an integer, the serialization follows the description at
	  http://www.w3.org/TR/xpath#section-String-Functions

Mon Mar 18 19:18:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.18
	* doc/*: updated and rebuilt the web site
	* *.c libxml.h: implement the new IN_LIBXML scheme discussed with
	  the Windows and Cygwin maintainers.
	* parser.c: humm, changed the way the SAX parser work when
	  xmlSubstituteEntitiesDefault(1) is set, it will then 
	  do the entity registration and loading by itself in case the
	  user provided SAX getEntity() returns NULL.
	* testSAX.c: added --noent to test the behaviour.

Mon Mar 18 12:44:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Wilfried Teiken provided a hackish but working
	  way to get context reported back on entities when parsing
	  with SAX and without breaking the DOM build.

Sun Mar 17 11:31:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: applied a new patch from Aleksey Sanin
	* doc/site.xsl doc/xml.html doc/*.html: updated the documentation
	  to reference Aleksey implementation of XML digital Signatures

Sat Mar 16 23:01:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: small fix to avoid potential problem due to
	  ordering of freeing data
	* python/Makefile.am: people were complaining about 
	  the generated file in python dir not being built

Fri Mar 15 23:21:40 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in python/Makefile.am python/tests/Makefile.am
	  python/generator.py python/libxml.c python/types.c: Cleanup
	  of the python Makefiles based on Jacob and James feedback,
	  fixed the spec file accordingly, fixed the number of warning
	  that passing my pedantic CFLAGS was generating. Conclusion
	  is that Python includes are real crap.

Fri Mar 15 19:41:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure,in: it was reported quite a few times that
	  xml2-config --cflags should not output
	  -I$includeprefix/libxml2/libxml because libxml2 header names
	  clashes with existing names like list.h from C++ stl.
	  Includes should be #include<libxml/xxx.h> so ...

Fri Mar 15 10:41:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: another patch from Aleksey Sanin

Fri Mar 15 08:55:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: applied patch from Aleksey Sanin fixing a problem in the
	  canonicalization algorithm
	* doc/xml.html doc/index.html: added the C14N references on the 
	  index page.

2002-03-13  jacob berkman  <jacob@ximian.com>

	* python/Makefile.am: remove LDADD and CFLAGS as this is broken
	usage, redundant, and gcc specific

Wed Mar 13 11:00:59 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: speedup some node selection operations, this can
	  have a significant impact on DocBook Norm's stylesheets
	* nanohttp.c: someone reported that SOCKLEN_T may not be defined
	  make sure it's always the case
	* debugXML.c: distinguish CDATA and comments in ls operations

Tue Mar 12 19:45:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/*.h: Heiko W. Rupp fixed a lot of comments
	  to generate better API descriptions etc...

Mon Mar 11 10:10:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: Fixing #74186, made sure all boolean expressions
	  get fully parenthesized, ran indent on the output
	* configure.in HTMLtree.c SAX.c c14n.c debugXML.c tree.c xpointer.c
	  include/libxml/tree.h: also #74186 related, removed the
	  --with-buffers option, and all the preprocessor conditional
	  sections that were resulting from it.

Sun Mar 10 17:47:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: applied patch from Dodji Seketeli fixing an
	  uninitailized variable in xmlValidGetValidElements()

Sat Mar  9 15:10:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* c14n.c: fixed a few comments
	* doc/*.html doc/*/*.html: regenerated the docs and added
	  the C14N API
	* doc/api.xsl doc/gnome-xml.sgml: fixups and added IDs

Sat Mar  9 11:16:11 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: fix to adapt varaiations in the
	  bindings
	* configure.in python/setup.py python/setup.py.in: fixed to
	  have the version of the python scripts automatically updated

Fri Mar  8 16:45:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a bug newly introduced and pointed by Uwe Fechner
	  in xmlCopyProp()

Fri Mar  8 15:49:10 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.17 release
	* doc/*: updated and rebuilt the docs
	* xpath.c: fixed a comment
	* python/libxml.c: fixed a possible reentrancy problem

Thu Mar  7 23:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c python/tests/Makefile.am python/tests/attribs.py:
	  fixed xmlHasNsProp() bugs for defaulted from DTD attribs,
	  added a specific regression test
	* python/generator.py: xmlHasNsProp() and xmlHasProp() shall
	  not raise exceptions when failing to find the attribute.

Thu Mar  7 16:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in xmllint.c: owen pointed out a problem with the
	  ftme fix, gettimeofday() was not detected by configure and
	  the ftime header wasn't included, dohhh

Thu Mar  7 12:19:36 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in xmllint.c: trying to fix #71457 for timing
	  precision when gettimeofday() is not availble but ftime() is

Thu Mar  7 11:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in doc/Makefile.am: Fixed #73408 missing images
	  are now copied on install and part of the -devel RPM

Thu Mar  7 09:34:16 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: trying to avoid bug #72150 which was apparently
	  caused by a gcc bug (or a processor problem) as detailed
	  at http://veillard.com/gcc.bug

Thu Mar  7 01:02:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c python/tests/Makefile.am python/tests/cutnpaste.py:
	  fixed xmlReconciliateNs(), added a Python test/example for
	  inter-document cut'n paste
	* python/libxml.py: fixed node.doc on document nodes and added
	  xpathEval() onto node objects

Wed Mar  6 22:38:03 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c: fixed some htmlSetMetaEncoding() problems
	* python/libxml.c python/tests/Makefile.am python/tests/serialize.py:
	  fixup and integrated tests for the serialization stuff

Wed Mar  6 19:40:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am libxml.3 libxml.4 libxml.spec.in: Fixed bug #72570
	  moved the libxml man page to section 3

Wed Mar  6 18:34:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fix bug #72490
	* python/libxml.c python/libxml.py: added methods serialize()
	  and saveTo() to all node elements.

Tue Mar  5 21:27:03 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: closed #73430, don't read from an input source
	  which indicated an end-of-file or an error.

Tue Mar  5 16:33:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: make sure SAX endDocument is always called as
	  this could result in a Python memory leak otherwise (it's
	  used to decrement ref-counting)
	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml2-python-api.xml python/libxml2class.txt
	  python/tests/error.py python/tests/xpath.py: implemented
	  the suggestions made by Gary Benson and extended the tests
	  to match it.

Tue Mar  5 10:35:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py: applied patch fixing #73450

Mon Mar  4 17:59:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing #61290 "namespace nodes have no parent"
	  long standing divergence from the XPath REC. NodeSets
	  simply hold a copy of namespace nodes and those node ->next
	  points to the parent (which may not be the node carrying the
	  definition).
	* include/libxml/xpath.h: flagged but didn't added a possible
	  speedup
	* DOCBparser.c HTMLparser.c: removed some warnings from push
	  parser due to new state being added.
	* tree.c: new fix from Boris Erdmann
	* configure.in c14n.c include/libxml/c14n.h testC14N.c: added
	  the XML Canonalization support from Aleksey Sanin

Sun Mar  3 15:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: patch from Boris Erdmann fixing some namespace odities
	  with xmlCopyNode()

Sat Mar  2 10:33:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: fix bug #72706 when loading a NULL entity

Fri Mar  1 17:14:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: Fixed #72346, about handling of xmlns:foo="", this could
	  actually change in a future XML Namespace revision.

Fri Mar  1 17:12:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/types.c python/tests/Makefile.am python/tests/xpathret.py:
	  added the possibility of returning nodesets from XPath extension
	  functions written in Python

Fri Mar  1 13:56:12 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/*: commiting some Python bindings work done while travelling

Fri Mar  1 10:11:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: close #72663 and #72658, don't memdump unless compiled
	  explicitely with memory debugging switched on

Sat Feb 23 11:08:09 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/types.c:
	  Added wrapper for the xmlURIPtr type, provided accessors, fixed
	  the accessor generator for strings
	* python/tests/Makefile.am python/tests/tstURI.py: added a specific
	  regression test.

Fri Feb 22 23:44:57 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/README python/generator.py python/libxml.c python/setup.py:
	  added the 'usual' setup.py to allow building a libxml2-python
	  module based on the same code. The initialization is however
	  different the 2 .so files fo libxml2 and libxslt are identical and
	  they entry point initialize both libraries. this is done to avoid
	  some possible nasty problem since the Python don't merge the maps
	  of all shared modules.

Wed Feb 20 23:16:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed a push/encoding bug reported by Michael
	  on librsvg

Wed Feb 20 19:54:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parserInternals.h: fixes a misplaced #endif

Wed Feb 20 17:47:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c valid.c: found and fixed a couple of allocation bugs

Wed Feb 20 15:36:03 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xml.html doc/python.html doc/*: added a Python and binding
	  page describing the current state of the Python bindings and 
	  giving pointers to the other languages wrappers.

Wed Feb 20 11:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.16
	* doc/* python/libxml2class.txt: updated and rebuilt the docs,
	  rebuilt the API and web site
	* xpath.c: fixed #71978 portability bugs

Tue Feb 19 22:49:36 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: oops broke automatic defaulting of namespaces attributes.

Tue Feb 19 22:01:35 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parserInternals.h parser.c: had to change
	  2 internal parsing API when processing document content
	  to check the start and end of element content are defined
	  in the same entity
	* valid.c include/libxml/valid.h: attribute normalization can
	  generate a validity error added xmlValidCtxtNormalizeAttributeValue()
	  with the context to report it.
	* SAX.c: fixed the last known bugs, crazy validation constraints
	  when a document is standalone seems correctly handled. There
	  is a couple of open issues left which need consideration especially
	  PE93 on external unparsed entities and standalone status. 
	  Ran 1819 tests: 1817 suceeded, 2 failed and 0 generated an error in 8.26 s.
	  The 2 tests left failing are actually in error. Cleanup done.

Tue Feb 19 15:17:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: implemented E59 spaces in CDATA does not match the
	  nonterminal S

Tue Feb 19 14:44:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c parser.c valid.c: more validation test fixups
	* check-xml-test-suite.py: added duration info for the tests

Mon Feb 18 23:25:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c valid.c: a couple of errors were reported but not
	  saved back as such in the parsing context. Down to 1% failure rate
	  Ran 1819 tests: 1801 suceeded, 18 failed and 0 generated an error

Mon Feb 18 20:16:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlInternald.c: isExtender was missing a char 
	* parser.c include/libxml/parser.h: % are acceptable in the
	  internal subset if within a PUBLIC ID

Mon Feb 18 19:27:32 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c parserInternals.c valid.c: more work on the conformance
	  suite. Took the step to finally block documents with encoding
	  errors. It's a fatal error per the spec, people should have fixed
	  their documents by now.

Mon Feb 18 15:30:14 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: fixed the test script after some discussion
	  on the semantic of TYPE="error"
	* Makefile.am: added the script to the distrib

Mon Feb 18 12:17:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c entities.c: fixed a couple of conformances issues deep
	  into the validation code (standalone and undeclared Notations)

Mon Feb 18 00:17:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed #71741 supid typo an a bug about encoding parsing
	  stayed there for years !

Mon Feb 18 00:06:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c SAX.c: fixed #71740 NotationDecl with a required field
	  missing

Sun Feb 17 23:45:40 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: improved the behaviour a bit as
	  well as the logs
	* parser.c valid.c SAX.c: fixed a few more bugs 
	  "Ran 1819 tests: 1778 suceeded, 41 failed, and 0 generated an error"

Sun Feb 17 20:41:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* check-xml-test-suite.py: python script to run regression tests
	  against the XML Test suite of W3C/OASis
	* SAX.c: fixed a validation bug
	* parser.c: fixed 3 errors pointed by the test suite
	* doc/buildDocBookCatalog: fixed a typo pointed by drake
	* python/Makefile.am: fixed a dependendy

Fri Feb 15 21:47:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: avoid a warning bug #71594

Wed Feb 13 22:13:33 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: Jesse Perry provided a patch to remove a few
	  warning on alpha/Tru64

Wed Feb 13 14:30:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/entities.h: fixing a comment
	* valid.c: fixing some troubles with validity check on namespaces
	* result/VC/NS3 test/VC/NS3: added a specific regression test

Wed Feb 13 14:05:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Fixing #71342 serializing '\n' in attribute values
	* result/noent/att3 result/att3 test/att3: added a specific
	  test.

Tue Feb 12 14:45:32 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c: couple of bug fixes

Mon Feb 11 19:41:29 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/*.py: removed tabs and used spaces.

Mon Feb 11 19:25:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.15
	* doc/news.html doc/xml.html doc/xmlio.html: rebuilt some docs

Mon Feb 11 14:53:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xmlcatalog_man.xml: trying to close Red Hat bug #58707
	  https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=58707

Mon Feb 11 09:53:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/encoding.h include/libxml/entities.h
	  include/libxml/globals.h include/libxml/parser.h
	  include/libxml/threads.h include/libxml/tree.h
	  include/libxml/xmlmemory.h: trying to fix the include mess

Mon Feb 11 08:53:33 CET 2002 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlmemory.h: reverted part of the previous
	  attempt to provide #69655, this was breaking the build.

Sun Feb 10 14:13:34 CET 2002 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c Makefile.am build_glob.py configure.in debugXML.c
	  globals.c parser.c threads.c tree.c valid.c xmlmemory.c
	  xpath.c xpointer.c include/libxml/globals.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/tree.h
	  include/libxml/xmlmemory.h include/libxml/xpathInternals.h:
	  Tentatively fixed #69655 , make compiling with -Wredundant-decls
	  clean.
	* python/libxml.c: fixed a warning.

Sun Feb 10 12:02:59 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c valid.c xinclude.c: fix #68882, cleanup the XInclude
	  copying of node, merge back IDs in the target document.
	* result/XInclude/docids.xml test/XInclude/docs/docids.xml
	  test/XInclude/ents/ids.xml: test case
	* result/VC/ElementValid4: output changed due to a typo fix

Sat Feb  9 23:15:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: seems some version of automake didn't
	  generate the dependencies right as Jacob found out. Add
	  an extra dependency rule.

Sat Feb  9 18:59:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c valid.c: Justin Fletcher found some parts
	  of the code needing cleanup
	* libxml.spec.in python/Makefile.am python/generator.py
	  python/libxml.c python/libxml.py: Fixed the python Makefiles
	  corrected a bug showing up on ia64, changed the name of the
	  python internal module too

Fri Feb  8 15:19:28 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: applied patch from Andris Pavenis for binary
	  name suffixes

Fri Feb  8 14:43:17 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c win32/win32config.h: fixing #68748

Fri Feb  8 14:37:05 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing #70166

Fri Feb  8 14:31:24 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixing #70077

Fri Feb  8 14:24:02 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Copyright Makefile.am README configure.in libxml.spec.in:
	  Changed to the MIT Licence
	* doc/FAQ.html doc/catalog.html doc/intro.html doc/xml.html
	  doc/xmlio.html: updated the doc accordingly
	* include/libxml/xmlwin32version.h configure.in: preparing
	  2.4.14 release
	* python/generator.py python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/types.c:
	  fixed the const xmlChar * wrapper and generator, XPath extension
	  functions now use the context as first argument
	* python/tests/tstxpath.py python/tests/xpath.py
	  python/tests/xpathext.py: Updated the tests accordingly
	* tree.c: fixed bug #70067

Thu Feb  7 17:33:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* debugXML.c: always use stdout if output is NULL
	* xmlIO.c: don't close filedescriptors passed to outputBuffers
	* python/Makefile.am python/generator.py python/libxml2class.txt
	  python/libxml_wrap.h python/types.c: augmented the number of bindings
	  handling FILE * and XPath contexts
	* python/tests/Makefile.am: avoid a stupid problem due to the
	  use of TEST.

Wed Feb  6 23:37:07 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in: fixed stupid bug #70738 found by alfons hoogervorst

Wed Feb  6 17:04:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/libxml.c: cleanup the extension function lookup
	* xmlmemory.c include/libxml/xmlmemory.h: always compile the list

Tue Feb  5 17:33:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in python/Makefile.am: do not install outside
	  of prefix

Mon Feb  4 15:05:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/libxml.c: started adding SAX interfaces
	* python/tests/Makefile.am python/tests/pushSAX.py: added a basic
	  SAX test

Mon Feb  4 01:12:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: hardened the addChild function
	* python/generator.py python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/TODO:
	  added accessors needed for xmlNode, a bit more testing and
	  extension of interfaces
	* python/tests/Makefile.am python/tests/build.py: added a test
	  build from scratch/save/load/check

Sun Feb  3 21:10:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: change a small bit in the way valididy
	  error messages get initialized
	* python/TODO python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt python/libxml_wrap.h python/types.c:
	  added some memory debugging to track leaks at the libxml2 level
	* python/tests/*.py: changed all tests to check for leaks,
	  there is just one left in XPath extension registrations.

Sun Feb  3 17:50:46 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/TODO python/generator.py python/libxml2-python-api.xml
	  python/libxml2class.txt: more accessor classes for the parser
	  context, allow to switch on and check validity
	* python/tests/Makefile.am python/tests/error.py
	  python/tests/invalid.xml python/tests/valid.xml
	  python/tests/validate.py: attded more test and and added error.py
	  which I forgot to commit in the last step

Sun Feb  3 16:03:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/types.c: cleanup
	* python/libxml.c python/libxml.py python/libxml_wrap.h
	  python/generator.py python/libxml2-python-api.xml 
	  python/libxml2class.txt: added class for parser context, added
	  first cut for push mode support. Added a framework to generate
	  accessors functions.
	* python/tests/Makefile.am python/tests/push.py: added a push
	  test

Sun Feb  3 00:17:26 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/TODO python/libxml.py: fixed a small
	  bug a bit of cleanup.

Sat Feb  2 22:47:10 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt: adding error redirections and preformat
	  to a python handler
	* python/tests/Makefile.am python/tests/*.py: cleanup made all
	  tests self checking

Sat Feb  2 13:18:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/libxml.c python/libxml.py: fixed a stupid bug when renaming
	  a function

Sat Feb  2 11:25:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in python/Makefile.am python/TODO python/generator.py
	  python/libxml.c python/libxml2-python-api.xml
	  python/libxml2class.txt: Progressing through the TODOs, class
	  description output, extra XML API, RPM now builds the wrappers
	  for all python installed versions

Sat Feb  2 10:13:52 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.spec.in python/Makefile.am python/TODO
	  python/generator.py python/libxml2class.txt: added more informations
	  in the libxml2-python package including docs. Slightly changed
	  the class hierarchy
	* python/tests/*: added basic regression tests infrastructure too

Fri Feb  1 23:11:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.spec.in example/Makefile.am python/Makefile.am:
	  added libxml2-python as part of the packages installed

Fri Feb  1 18:48:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/generator.py python/libxml.c
	  python/libxml.py: more work, now able to extend the
	  XPath interpreter with functions written in python.

Fri Feb  1 10:28:51 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am: Jacob sent a patch to allow building from
	  tarfile.

Fri Feb  1 00:40:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/Makefile.am python/libxml.c configure.in Makefile.am:
	  inserted the python wrappers build, I hope this won't be too
	  unportable

Thu Jan 31 21:27:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c: minor optimization
	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml_wrap.h: more work on the python bindings,
	  they now support XPath and there is no evident leak

Thu Jan 31 00:48:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py:
	  more work on the python bindings generator.

Wed Jan 30 21:51:26 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml_wrap.h:
	  more work on the python bindings.

Wed Jan 30 17:35:33 CET 2002 Daniel Veillard <daniel@veillard.com>

	* python/generator.py python/libxml.c python/libxml.py
	  python/libxml_wrap.h: commited early version of a python binding
	  for private use only ATM

Sat Jan 26 22:41:13 CET 2002 Daniel Veillard <daniel@veillard.com>

	* entities.c tree.c include/libxml/entities.h: applied patch
	  from Anthony Jones to implement copy of DTD subtree too. Had
	  just to keep 2 function private which really ought to become
	  public ones.

Fri Jan 25 15:14:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: added pointers to the web pages in the usage()

Thu Jan 24 17:04:04 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: more fixes from Petr Kozelka for attribute handling
	  in the tree API to align the semantic with DOM.

Thu Jan 24 16:00:53 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c tree.c entities.c: another set of patches from
	  Anthony Jones for copy operations cleanup and robustness

Wed Jan 23 18:53:55 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/APIchunk*.html doc/parsedecl.py doc/api.xsl: generated
	  an alphabetic index based on comments content
	* doc/*: rebuilt the web site with the new references

Wed Jan 23 15:14:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parserInternals.h: Greg Sjaardema suggested to use an
	  eponential buffer groth policy in xmlParserAddNodeInfo()

Wed Jan 23 13:32:40 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/api.xsl doc/APIconstructors.html doc/APIfiles.html
	  doc/APIfunctions.html doc/APIsymbols.html doc/libxml2-refs.xml
	  doc/parsedecl.py doc/Makefile.am: updated the python extractor
	  to generate cross-references, and added/updated the stylesheets
	  to generate and link API indexes. The generic keyword index
	  is not done yet.
	* doc/*.html: regenerated all the usual docs too

Tue Jan 22 23:11:26 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: added an xpath function to the shell for T. V. Raman

Tue Jan 22 22:42:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: patch from Anthony Jones to catch NULL nodes in
	  debug routines.

Tue Jan 22 22:38:42 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: apply an patch from Petr Kozelka for unlink and replace 
	  support of attribute nodes

Tue Jan 22 19:12:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/parsedecl.py: Build a new version
	  hopefully near complete and fully documented of the API in XML
	* HTMLtree.c SAX.c debugXML.c error.c globals.c parser.c tree.c
	 xmlIO.c xmlmemory.c include/libxml/catalog.h include/libxml/hash.h
	 include/libxml/list.h include/libxml/parser.h include/libxml/tree.h
	 include/libxml/parserInternals.h include/libxml/valid.hi
	 include/libxml/xmlIO.h include/libxml/xmlerror.hi
	 include/libxml/xmlmemory.h include/libxml/xmlversion.h.ini
	 include/libxml/xpath.h include/libxml/xpathInternals.h:
	  Cleaned up the doc comments a lot in the process, the interface
	  coverage is now 100%

Tue Jan 22 00:12:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/libxml2-api.xml doc/parsedecl.py: improved the script to
	  extracts comments from the gtk-doc DocBook output (a bit
	  convoluted but seems to work).

Mon Jan 21 18:29:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* Makefile.am doc/Makefile.am doc/libxml2-api.xml doc/parsedecl.py:
	  added an XML description of the API, moved the script generating
	  it here. Added a "make api" target

Mon Jan 21 14:34:37 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Adam Lounds pointed out a bug in xmlSearchNs()

Mon Jan 21 09:55:21 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xpath.c include/libxml/xpathInternals.h: the change made to
	  xmlXPathFuncLookupFunc was incompatible roll it back

Sun Jan 20 23:03:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* SAX.c: cleanup patch from Anthony Jones
	* doc/Makefile.am: fix the headers to avoid in make scan
	* parserInternals.c xpath.c include/libxml/*.h: cleanup of the
	  includes, * vs Ptr and general cleanup
	* parsedecl.py: first version of a script to extract the
	  module interfaces, the goal will be to provide .decl or XML
	  specification of the interfaces to build wrappers.

Sun Jan 20 13:38:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/xmlcatalog_man.xml xmlcatalog.c: Fixed bug #68830, xmlcatalog
	  now provides return codes in case of errors

Sat Jan 19 16:36:21 CET 2002 Bjorn Reese <breese@users.sourceforge.net>

	* trio.h trio.c triodef.h triop.h trionan.h trionan.c Makefile.am:
	  Upgraded to trio baseline 1.6
	* strio.h strio.c: Replaced by triostr.h and triostr.c

Fri Jan 18 17:22:50 CET 2002 Daniel Veillard <daniel@veillard.com>

	* globals.c xmlIO.c xmlcatalog.c: removed the last occurences
	  of strdup usage in the code

Fri Jan 18 12:47:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c error.c: Keith Isdale complained rightly that 
	  xmlInitParser() did not preserve value set by xmlSetGenericErrorFunc

Thu Jan 17 09:44:44 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed the funxtion to set the xml: attributes
	* debugXML.c: added "setbase" to test it.

Wed Jan 16 16:36:08 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: update xmlNodeSetContent() and xmlNodeSetContentLen()
	  to allow updating an attribute content

Tue Jan 15 18:09:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.h: try to avoid problems when compiling on Windows

Mon Jan 14 18:56:25 CET 2002 Daniel Veillard <daniel@veillard.com>

	* hash.c: patch from Anthony Jones for hash.c allocation size
	* Makefile.am: trying to work around Yet Another Libtool Madness
	  and build the 2.4.13 release finally ...

Mon Jan 14 18:27:19 CET 2002 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: updated to 2.4.13
	* doc/* : update of the documentation

Mon Jan 14 17:53:41 CET 2002 Daniel Veillard <daniel@veillard.com>

	* debugXML.c tree.c: some cleanup after an unsuccessful attempt
	  at fixing #61290 :-(

Sun Jan 13 21:30:54 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed xmlSaveFormatFileEnc() when encoding == NULL
	  Fixes bug #67229

Sun Jan 13 17:14:06 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: trying to avoid troubles when a subtree is copied
	  and coalesced in part with the target tree. Should fix 
	  bug #67407

Sun Jan 13 16:37:15 CET 2002 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed validation of attributes content of type
	  NAME NAMES NMTOKEN and NMTOKENS to accept internationalized
	  values, very old bug. Fixes #67671

Sun Jan 13 15:07:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c include/libxml/parserInternals.h tree.c: integrated
	  a couple of fixes and a new API function xmlSetEntityReferenceFunc()
	  from Keith Isdale and dedicated to xsldbg the XSLT debugger.

Sun Jan 13 14:23:21 CET 2002 Daniel Veillard <daniel@veillard.com>

	* threads.c: applied Serguei Narojnyi's patch to add native
	  thread support on the Win32 platform
	* testThreadsWin32.c Makefile.am: added the test program also
	  from Serguei, Win32 specific
	* include/win32config.h include/libxml/xmlwin32version.h.in:
	  added patch from Igor for the Windows thread specific defines.

Wed Jan  9 12:50:39 CET 2002 Daniel Veillard <daniel@veillard.com>

	* entities.c: Anthony Jones pointed a bug in xmlCopyEntity()

Tue Jan  8 14:23:22 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*.html doc/site.xsl doc/Makefile: renamed XML.html
	  output page into XMLinfo.html. Close bug #66951 and
	  raised by Robert Collins too.

Tue Jan  8 14:13:18 CET 2002 Daniel Veillard <daniel@veillard.com>

	* encoding.c: Paul Keogh pointed out a possibility of segfault
	  on repeted xmlAddEncodingAlias() / xmlCleanupEncodingAlias().
	  Closes bug # 68238

Tue Jan  8 12:48:27 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/*.html: updated the Gdome2 links

Tue Jan  8 11:32:30 CET 2002 Daniel Veillard <daniel@veillard.com>

	* libxml.h: Applied following patches from Robert Collins
	  and make sure IN_LIBXML is defined when compiling it
	-------
	* include/libxml/xmlversion.h.in (LIBXML_DLL_IMPORT): Use on Cygwin
	  as well as Visual C.
	* parser.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
	* parserInternals.c (XML_DIR_SEP): Don't use '\\' for Cygwin.
	* strio.c (PLATFORM_UNIX): Define for Cygwin.
	* triodef.h (TRIO_PLATFORM_UNIX): Define for Cygwin.
	* xmlIO.c (xmlFileOpen): Use unix behaviour for Cygwin.
	  Use binary mode opens for Cygwin (xmlFileOpenW xmlParserGetDirectory
	  xmlSysIDExists xmlNoNetExists).
	* xmllint.c: Don't include winsock2.h for Cygwin.

Mon Jan  7 17:52:48 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: Jirka Kosek pointer out a bug in xmlParseTextDecl()
	  when the version info is not present.

Mon Jan  7 00:03:58 CET 2002 Daniel Veillard <daniel@veillard.com>

	* tree.c: Anthony Jones  pointed out a problem in
	  xmlStringGetNodeList() and provided a fix for it

Sun Jan  6 13:45:49 CET 2002 Daniel Veillard <daniel@veillard.com>

	* parser.c: patch from Frank J Franklin to remove a bug in
	  xmlCreatePushParserCtxt() when the initial buffer passed
	  is large.

Sat Jan  5 19:24:23 CET 2002 Daniel Veillard <daniel@veillard.com>

	* win32/*: big cleanup of the Windows/MSVC project files
	  from Igor Zlatkovic

Wed Jan  2 14:11:35 CET 2002 Daniel Veillard <daniel@veillard.com>

	* doc/Makefile.am: should fix #67674 and avoid troubles if 
	  xsltproc is not available or fails in the prefix provided

Tue Jan  1 17:48:56 CET 2002 Daniel Veillard <daniel@veillard.com>

	* xmlmemory.c: one more doc patch from Charlie Bozeman.

Mon Dec 31 17:35:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c parser.c valid.c include/libxml/parserInternals.h
	  include/libxml/xmlerror.h include/libxml/xpathInternals.h:
	  Fixed a few other problems raised by Charlie Bozeman.
	* result/VC/ElementValid[5-7]: fixed the output

Mon Dec 31 17:13:34 CET 2001 Daniel Veillard <daniel@veillard.com>

	* *.c include/libxml/*.h doc/html/*: applied 42 documentation
	  patches from Charlie Bozeman. Regenerated the HTML docs.

Thu Dec 20 14:59:52 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/debugXML.h win32/dsp/libxml2.def.src: fixes
	  for Windows from Igor

Tue Dec 18 12:13:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Justin Fletcher patch for --output or -o

Tue Dec 18 08:52:32 CET 2001 Daniel Veillard <daniel@veillard.com>

	* win32/libxml2/libxml2.def.src: close #67019

Tue Dec 18 08:08:51 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Justin Fletcher generic timing patch
	  similar to the one already applied to xsltproc.

Mon Dec 17 16:29:08 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h tree.c: applied documentation patches
	  from Charlie Bozeman

Thu Dec 13 21:24:16 MST 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmllint.xml, xmllint.1 - document --dropdtd

Thu Dec 13 23:19:50 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix the xmlStrdup() used in the previous patch.
	* valid.c: added --dropdtd
	* tree.c: fixed xmlUnlinkNode so it also removes the references
	  from the document if the node is a DTD

Thu Dec 13 15:54:35 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c valid.c: cleanup some static declarations

Thu Dec 13 15:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: removed another strdup()
	* doc/FAQ: removed the HP/UX entry

Thu Dec 13 09:44:58 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fix bug #66816 when validating.
	* xmllint.c: don't use sys/time.h if configure did not found it

Mon Dec 10 21:39:55 MST 2001 John Fleck <jfleck@inkstain.net>

	* docs/xmllint.1, xmllint.xml, xmlcatalog.1, xmlcatalog_man.html,
	xmlcatalog_man.xml

Mon Dec 10 22:06:16 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlmemory.h: Hietaniemi Jarkko pointed out that
	  xmlInitMemory() was declared twice

Sun Dec  9 14:59:23 CET 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c: do not reference strdup() !
	* configure.in libxml-2.0.pc.in: trying to fix the libs
	  of the various config extraction modules

Fri Dec  7 15:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in : preparing 2.4.12
	* doc/* : updated and rebuilt the docs

Fri Dec  7 12:32:00 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: closed bug #66159
	* testURI.c: added --escape option
	* configure.in: some cleanup for xml2-config --cflags

Thu Dec  6 15:31:30 CET 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c testThreads.c: removed some misplaced includes
	  of xmlversion.h

Thu Dec  6 09:06:08 EST 2001 Daniel Veillard <daniel@veillard.com>

	* threads.c: patch from Gary Pennington fixing a possible
	  problem at initialization time.

Wed Dec  5 13:01:37 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in libxml.h parser.c testThreads.c macos/: integrated
	  Eric Lavigne contribution to build libxml2 on MacOS using
	  CodeWarrior.

Tue Dec  4 14:13:44 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: applied Geert Kloosterman's patch to fix
	  --repeat --timing output

Thu Nov 29 17:10:22 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: Robin Berjon <robin@knowscape.com> found a case
	  where non-wellformed XML declaractions were not detected.

Wed Nov 28 15:41:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xpointer.c: fixed a compilation bug pointed by Danny Jamshy

Wed Nov 28 10:09:51 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: as robert pointed again, xmlInputCallbackInitialized
	  gets reset by xmlCleanupInputCallbacks() and this makes the
	  function useless. Same for output.

Tue Nov 27 17:22:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: robert pointed out a loop error in callback cleanups

Mon Nov 26 16:56:00 CET 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c debugXML.c include/libxml/tree.h include/libxml/debugXML.h:
	  moved xmlGetLineNo() and xmlGetNodePath() into the main tree module,
	  they are not really tied to debugging

Mon Nov 26 11:31:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.11
	* xmllint.c: better --catalogs description

Sun Nov 25 11:34:24 CET 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: fixed a couple of problems in xmlSetProp()

Thu Nov 22 19:19:10 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c tree.c xmlIO.c xmlmemory.c: some cleanups when chasing
	  unappropriate stdout output.

Thu Nov 22 13:58:14 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: Fixed a couple of macro errors pointed out
	  by Denis Beurive, closes #65111

Tue Nov 20 10:34:01 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: in case of content model validity error, don't
	  print it if validity warnings were not requested.

Tue Nov 20 09:30:02 CET 2001 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: applied a couple of patches from Brian D Ripley.
	* parserInternals.c: removed the last exit() call. Print an
	  unmaskable error on stderr instead (library mismatch detection)

Sat Nov 17 17:16:51 MST 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmllint.xml, doc/xmllint.1 - update xmllint man page with
	shell instructions from Heiko Rupp

Thu Nov 15 14:53:42 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: use the URL notation file:// for default catalog paths

Wed Nov 14 16:03:02 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/tree.h: better comments for _private fields
	* tree.c: removed a problem when copying an entity reference.

Tue Nov 13 16:23:04 CET 2001 Daniel Veillard <daniel@veillard.com>

	* vms/*: updated instructions and diffs from John A Fotheringham

Mon Nov 12 23:43:22 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlerror.h: avoid an include problem if
	  #include <libxml/xmlerror.h> happens first in code
	  seems to be the case in KDE libs

Mon Nov 12 22:32:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/* include/libxml/xmlwin32version.h.in: update
	  from Igor for Windows

Mon Nov 12 10:19:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Gary Pennington pointed out a missing prefix

Sat Nov 10 12:55:42 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: preparing 2.4.10
	* doc/*: upgraded and rebuilt the docs

Sat Nov 10 12:33:38 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fix comment in scripts element parsing.
	* result/HTML/doc3*: updated the results.

Sat Nov 10 11:18:18 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: another URI bug fix #63336, using Joel Young patch.

Sat Nov 10 11:07:26 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h: add xmlGetNodePath()
	  a cleaned up version of the Pwd shell string generation.

Fri Nov  9 00:34:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c include/libxml/tree.h: trying to fix namespaces +
	  validation problems for good, closing #63619 in the process
	* result/valid/dia.xml test/valid/dia.xml: the Dia test was
	  wrong in this respect, fixed it.

Thu Nov  8 18:31:40 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: Morus Walter patch to allow --format and --encode

Thu Nov  8 14:52:18 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: Stefan Kost provided an help command for the shell

Wed Nov  7 14:32:55 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: Heiko Rupp pointed that the shell would crash
	  on empty nodesets returns.

Wed Nov  7 13:52:36 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Weiqi Gao pointed out that xmlcatalog
	  migh need the history libraries

Tue Nov  6 23:49:09 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c test/HTML/lt.html result/HTML/lt.html*:
	  handle the case of < in quoted attributes, Bastian Kleineidam

Tue Nov  6 16:21:33 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in include/libxml/xmlwin32version.h: releasing 2.4.9
	  fixing catalog breakages
	* Makefile.am catalog.c result/catalogs/catal 
	  result/catalogs/mycatalog.* test/catalogs/catal*:
	  fixed more problems in catalog support, added more regression tests
	  for both XML and SGML catalog handling

Mon Nov  5 20:26:41 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c: applied an improvement to xmlGetLineNo() from
	  Keith Isdale

Mon Nov  5 15:20:16 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: dohhhh XML catalog add and remove ops were broken too.
	  Side effect of the progressive catalog loading

Mon Nov  5 12:40:54 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: confexecdir and confexec_DATA were defined twice
	  pointed out by Karl Eichwalder

Sun Nov  4 23:18:34 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlcatalog.c: avoid unlink() and use remove() instead.

Sun Nov  4 23:12:38 CET 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.spec.in: cleanup
	* include/libxml/xmlwin32version.h: updated with 2.4.8

Sun Nov  4 21:17:24 CET 2001 Daniel Veillard <daniel@veillard.com>

	* encoding.c global.data globals.c testThreads.c: fix bug #63752
	  of compiling libxml with a non standard set of options

Sun Nov  4 13:11:41 MST 2001 John Fleck <jfleck@inkstain.net

	* doc/xmllint.xml, xmllint.1 - updating xmllint man page to
	document --sgml option, fixing gnome bugzilla #63382

Sun Nov  4 20:56:53 CET 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c: Fixed SGML catalogs
	  breakage of 2.4.7, added a couple of really needed APIs
	  like xmlCatalogIsEmpty() and xmlNewCatalog()
	* xmlcatalog.c: updated --sgml --noout to be a suitable replacement
	  for install-catalog
	* configure.in: preparing 2.4.8

Thu Nov  1 15:29:31 CET 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c tree.c include/libxml/HTMLtree.h
	  include/libxml/tree.h include/libxml/xmlIO.h: more include
	  cleanups, export cleanly one html output + format function.

Thu Nov  1 14:12:12 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: removed initGenericErrorDefaultFunc call from
	  xmlInitParser() since it could destroy previous calls to
	  xsltSetGenericErrorFunc() effects

Thu Nov  1 09:37:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* debugXML.c include/libxml/debugXML.h: bool can be a reserved
	  keyword.

Wed Oct 31 18:50:08 CET 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: cleanup
	* threads.c: cleanup too
	* xmlIO.c include/libxml/xmlIO.h: added xmlNoNetExternalEntityLoader()
	  from xsltproc
	* include/libxml/tree.h include/libxml/parser.h: trying to break a
	  dependency loop.

Tue Oct 30 18:38:53 CET 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: Justin Fletcher pointed out that xmlParseXMLCatalog
	  was not used anymore !

Tue Oct 30 13:33:13 CET 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.7
	* Makefile.am doc/Makefile.am: switched to the latest xmllint
	  manual page from John
	* doc/*: updated the doc and rebuilt the generated pages

Tue Oct 30 11:31:19 CET 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: closing bug #62711, the library should never
	  close stdin or stdout.

Tue Oct 30 10:46:12 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: second pass at fixing #63336, using Joel Young
	  final patch. looks okay.

Tue Oct 30 00:56:05 CET 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c include/libxml/uri.h: trying to clear #63336
	  allowing the escaping routine to parse unconformant
	  URI-References.

Mon Oct 29 19:09:46 CET 2001 Daniel Veillard <daniel@veillard.com>

	* vms/readme.vms vms/build_libxml.com nanoftp.c 
	  include/libxml/xmlversion.h.in: a few VMS updates from
	  John A Fotheringham
	* include/libxml/xmlIO.h xmlIO.c: added xmlCleanupInputCallbacks()
	  and xmlCleanupOutputCallbacks() for the Perl binding people.

Mon Oct 29 12:44:17 CET 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c globals.c DOCBparser.c HTMLparser.c error.c:
	  apply fixes to close #63271 and avoid segfaults when
	  the error routine gets callbed before xmlInitParser()
	  get called.
	* nanoftp.c error.c: Applied patches from Justin Fletcher
	  correcting some xmlGenericError misuses.

Sat Oct 27 14:04:45 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmllint.xml, doc/xmllint.1
	New and improved man page for xmllint - .xml is the original, .1
	is the generated man page

Wed Oct 24 14:34:25 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* doc/site.xsl doc/*.html doc/Makefile.am: now autogenerate
	  the web site from the main HTML document.

Tue Oct 23 14:32:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: fixed an erroneous validation bug when PE refs
	  occurs in external parsed entities referenced from the
	  internals subset
	* test/valid/index.xml test/valid/dtds/nitf-2-5.dtd
	  test/valid/dtds/NewsMLv1.0.dtd result/valid/index.xml*:
	  added the associated testcase, it's a nice one.
	* HTMLparser.c: generate the DTD node as HTML still ...
	* HTMLtree.c: fixed errors in Set/GetMetaEncoding 

Mon Oct 22 14:20:17 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: fixed a bug in htmlNewDoc()

Mon Oct 22 11:32:36 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* test/threads/*: added entities testing to the Thread test
	* testThreads.c: make the test reasonable
	* DOCBparser.c: fix the DTD public and system ID
	* xmllint.c: added --sgml for SGML DocBook importing
	* Makefile.am: added Docbtests target

Fri Oct 19 11:47:13 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* nanoftp.c: use only "anonymous@" string for anonymous passwds
	* testThreads.c: removed bogus include

Thu Oct 18 16:56:23 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c valid.c result/valid/rss.xml result/valid/rss.xml.err:
	  fixed a very serious (looping) validation bug

Wed Oct 17 11:56:25 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h include/libxml/threads.h threads.c
	  testThreads.c: far more testing, cleaning up bugs
	* *.c : make sure globals.h is always included.

Wed Oct 17 17:41:41 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c: try to get rid of parser loops for good.

Wed Oct 17 13:29:02 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: fixed some bugs in CFLAGS passing.
	* test/threads Makefile.am testThreads.c: added a specific
	  threaded test case (really nasty, guaranteed).

Tue Oct 16 23:01:49 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: serious cleanup on the management of the
	  XML catalog tree, more tests done, especially with
	  the catalog PI.

Tue Oct 16 08:43:43 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: avoid a problem in catalog cleanup on SMP if
	  catalogs were not initialized.

Tue Oct 16 14:33:19 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xpath.c: trying to cleanup the not thread safe
	  parts of the library.

Mon Oct 15 14:30:11 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/globals.h configure.in global.data: make
	  the allocation be per-thread a configure option
	* encoding.c include/libxml/parser.h: fixed compilation
	  errors

Mon Oct 15 12:45:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/parser.h: Norm reported that a few lines
	  added were breaking libxslt compile, removed them for now

Sun Oct 14 05:55:01 EDT 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c parserInternals.c threads.c: debugged and fixed
	  initialization problems which were giving troubles on SMP
	  boxes.

Sat Oct 13 16:17:13 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: missing globals.h

Sat Oct 13 14:15:00 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* globals.c: added a couple of standard includes.

Sat Oct 13 11:08:20 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/SAX.h include/libxml/globals.h include/libxml/parser.h
	  include/libxml/parserInternals.h include/libxml/tree.h
	  include/libxml/xmlerror.h HTMLparser.c SAX.c error.c globals.c
	  nanoftp.c nanohttp.c parser.c parserInternals.c testDocbook.c
	  testHTML.c testSAX.c tree.c uri.c xlink.c xmlmemory.c:
	  Applied the last patches from Gary, cleanup, activated threading
	  all user accessible global variables are now handled in globals.[ch]
	  Still a bit rought but make tests passes with either 
	  --with-threads defined at configure time or not.
	* Makefile.am example/Makefile.am: added globals.[ch] and threads
	  linking options

Fri Oct 12 19:25:55 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am include/libxml/Makefile.am
	  include/libxml/globals.h globals.c  include/libxml/threads.h
	  threads.c build_glob.py global.data xmlcatalog.c acconfig.h
	  configure.in: started integrating the core of the thread support
	  not activated yet but half integrated. The code should still
	  compile and work anyway.

Fri Oct 12 00:53:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLtree.c catalog.c debugXML.c entities.c nanoftp.c
	  parser.c valid.c xmlmemory.c xpath.c xpointer.c: started
	  integrating the non-controversial parts of Gary Pennington
	  multithread patches
	* catalog.c: corrected a small bug introduced

Thu Oct 11 20:58:15 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c include/libxml/catalog.h: very serious cleanup,
	  isolating unportable code and as much as possible the accesses
	  to the global shared catalog. May need more testing !

Thu Oct 11 11:10:31 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/debugXML.h debugXML.c tree.c: integrating
	  Keith Isdale patches for the XSLT debugger interfaces. Some
	  cleanup

Thu Oct 11 08:44:01 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/Makefile.mingw: update from Tobias Peters for 2.4.5
	* DOCBparser.c: generate line nubers in elements

Wed Oct 10 11:35:45 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing 2.4.6 release
	* doc/xml.html doc/html/*: updated and rebuilt the docs
	* include/libxml/*.h *.c: fixed a number of teh/the widht/width typos

Mon Oct  8 20:38:27 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog.1, xmlcatalog_man.html
	adding documentation for DV's supercatalog support

Mon Oct  8 17:00:16 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c xmlcatalog.c: adding SGML
	  super catalog support adding one API and one flag --sgml to
	  xmlcatalog

Sun Oct  7 16:43:57 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog.1
	One more crack at
	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392 

Sun Oct  7 18:47:02 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* xpath.c: implemented xmlXPathObjectCopy for external objects
	* include/libxml/xpathInternals.h: added xmlXPathStackIsExternal

Sat Oct  6 16:25:52 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
	finishing up fix to
	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392, making
	the xmlcatalog man page display more elegantly

Sat Oct  6 15:27:12 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: closing bug #61832
	* HTMLparser.c: removed a warning

Sat Oct  6 15:07:14 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixing #61673 part I, do not loose doc information
	  when copying result value trees.

Sat Oct  6 11:58:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: trying to harden the XPath interpreter

Fri Oct  5 20:37:51 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog.1 updated using a new stylesheet to address, in
	part, https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=54392

Fri Oct  5 23:35:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* HTMLparser: repaired another loop problem

Fri Oct  5 11:16:21 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* uri.c: applied fix from Mathias Hasselmann about a bug in URI
	  parsing.
	* xpath.c: fix bug #61291 the default XML namespace node is
	  missing from the namespace axis.
	* tree.c: refuse to create namespaces nodes with prefix "xml"

Thu Oct  4 16:47:44 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: ouch a non-defined namespace could lead to a crash,
	  fixed #61215

Thu Oct  4 16:24:26 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: closed bug #61054

Wed Oct  3 15:19:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/Makefile.am: closing #60708

Tue Oct  2 15:52:05 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src include/libxml/parser.h parser.c:
	  adding xmlSAXParseFileWithData following Marco Stipek suggestion

Tue Oct  2 11:27:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: close bug #61550 when xml: wasn't considered a namespace

Tue Oct  2 11:18:32 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: Igor Zlatkovic patches
	* DOCBparser.c HTMLparser.c parser.c: fixed typos

Mon Oct  1 09:34:51 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: Justin Fletcher provided cleaup code in case
	  HAVE_STAT is not defined
	* include/win32config.h: Igor Zlatkovic suggested to have
	  HAVE_STAT defined there

Sat Sep 29 00:15:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* catalog.c - fixed typing error reported by M. Barros

Sun Sep 23 21:02:39 MDT 2001 John Fleck <jfleck@inkstain.net>

	* xmllint.c - fixing typo

Sat Sep 22 10:00:00 HKT 2001 William Brack <wbrack@mmm.com.hk>

	* HTMLparser.c: small enhancement to prevent loop on
	  unrecognizable data

Fri Sep 21 11:45:53 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parserInternals.c: applying patch from bug #60757 this
	  should close it

Thu Sep 20 15:54:29 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xmlcatalog.c: removed a couple of warning
	* xpath.c: try to solve the linking problem on platforms
	  needing trio to compile

Wed Sep 19 10:01:37 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am libxml.spec.in: backing up non-documented changes
	  commited without review or aproval by Jens Finke <jens@gnome.org>
	* HACKING: made 100% clear that no commit should be done directly

Mon Sep 17 18:52:37 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: Joe Orton provided a patch fixing a problem
	  when iconv is specified to be in a non-standard directory
	  but wasn't exported in xml2-config --cflags

Fri Sep 14 19:32:43 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: let's ship 2.4.5 before getting too much
	  troubles with 2.4.4 errors.

Fri Sep 14 12:26:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* encoding.c entities.c: do not output hexadecimal charrefs
	  when serializing HTML since some version of Netscape can't
	  grok it, generate decimal ones.
	* result/HTML/doc3.htm: output changed due to previous test
	* parserInternals.c: repair xmlKeepBlanksDefault() broken in 2.4.4

Thu Sep 13 13:34:27 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml-2.0.pc.in: dohh generated the wrong include path :-(
	* doc/Makefile.am libxml.spec.in: re-dohh forgot the new manpage :-(

Wed Sep 12 22:14:55 CEST 2001 Daniel Veillard <daniel@veillard.com>
	Released 2.4.4

	* config.h.in configure.in libxml.spec.in include/libxml/Makefile.am
	  libxml-2.0.pc.in: moved includes to includedir/libxml2/libxml,
	  updated the configuration scripts systems accordingly

Wed Sep 12 20:49:32 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* configure.in: preparing for 2.4.4
	* doc/xml.html doc/html/*: updated and rebuilt the docs

Wed Sep 12 16:58:16 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: tried to incorporate comments
	  from bug #59220

Tue Sep 11 11:25:36 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c result/noent/wml.xml: fixed bug #59981 related
	  to handling of '&' in attributes when entities are substitued

Mon Sep 10 22:14:42 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.h include/libxml/xmlversion.h.in
	  include/libxml/xmlwin32version.h include/libxml/xmlwin32version.h.in:
	  Tried to close bug #60131

Mon Sep 10 20:46:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixed a bug in the HTML parser introduced Sep  9

Mon Sep 10 20:13:09 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: fixing bug #59946 on xmlns=""

Mon Sep 10 16:39:42 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/xmlerror.h SAX.c: fixing bug 59732, simple
	  but allocates a new error code.

Sun Sep  9 10:33:15 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: John Fleck fixed typos in the options output
	* parser.c SAX.c: fix ignorable white space SAX selection

Sat Sep  8 11:43:53 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* entities.c: Steve Underwood found the possibility of an
	  ininite loop in case of error.

Fri Sep  7 11:35:00 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am: Need $(ICONV_LIBS) in libxml2_la_LIBADD

Wed Sep  5 17:47:43 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* parser.c: warn if version is not 1.0 but it's not
	  strictly speaking an error after analyzing the spec

Mon Sep  3 10:07:03 MDT 2001 John Fleck <jfleck@inkstain.net>

	*doc/catalog.html - add link to the html version of the
	man page, other linguistic cleanups

Mon Sep  3 09:10:08 MDT 2001 John Fleck <jfleck@inkstain.net>

	* doc/xmlcatalog_man.xml, xmlcatalog_man.html, xmlcatalog.1
	adding documentation for xmlcatalog. Note: xmlcatalog.1, the man
	file, has not yet been included in the build.

Sat Sep  1 18:17:47 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: removed a duplicate affectation Justin Fletcher

Fri Aug 31 22:02:10 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: Armin Sander pointed a possible text coalescing 
	  problem, completed his patch.

Fri Aug 31 18:30:28 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* trionan.c: Fixed const and volatile re-definition problem

Fri Aug 31 16:51:28 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.4 parser.c: doc updates from Heiko Rupp
	* parserInternals.c: 2 sanity checks from Heiko Rupp

Tue Aug 28 22:38:45 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* tree.c: applied patch from Armin Sander to make some pointers
	  const in xmlCopyNode()
	* include/libxml/tree.h: added fix to the header

Mon Aug 27 16:24:47 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: hum, restrict the integer usage gcc bug workaround
	  to only gcc compilers so that other architecture don't get
	  penalized by this limitation.
	* include/libxml/xpath.h: small typo fix from Heiko W. Rupp

Sun Aug 26 20:45:04 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* valid.c: fixed a Windows compiler warning (Chris Poblete)
	* xpath.c: fix for mod when dividend is 0 (Chris Poblete)

Sat Aug 25 15:30:17 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c xmlcatalog.c: added a 
	  --convert option to xmlcatalog to convert SGML ones to
	  the XML syntax.
	* xmllint.c: small cleanup for $SGML_CATALOG_FILES support.

	2.4.3 got released at that point
Thu Aug 23 23:16:32 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c xmlIO.c: started some serious testing and fixed
	  a few bug and optmization needs.

Thu Aug 23 17:26:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am configure.in include/libxml/xmlwin32version.h:
	  preparing for a 2.4.3 release even if it may not be ready yet
	* catalog.c parser.c xmlIO.c include/libxml/catalog.h: redirected
	  all file parsing lookup to go through the entity resolver, add
	  to add an API to bypass it (needed to load catalogs themselves),
	  some cleanup on the catalog code too.
	* nanoftp.c: small cleanup
	* doc/catalog.html: small update

Thu Aug 23 12:22:26 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed bugi #59406 in SGML catalog parsing reported by
	  Jun Kuriyama

Thu Aug 23 02:51:29 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* doc/catalog.html: finished the catalog documentation

Thu Aug 23 01:38:42 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* doc/catalog.html doc/xml.html: added documentation about
	  Catalog support, misses an API description 
	* doc/html/*: reextracted the API pages

Wed Aug 22 18:27:47 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h catalog.c xmlIO.c HTMLparser.c:
	  Added the part about section 7.2 on URI resolution,
	  fixed a side effect in the HTML parser, look complete
	  and ready to rock except the URI/SystemID part!

Wed Aug 22 16:27:03 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/catalog.h include/libxml/parser.h
	  include/libxml/xmlerror.h catalog.c parser.c parserInternals.c
	  xmlIO.c: added support and APIs needed for the catalog PI
	* include/libxml/xmlIO.h: cleanup

Wed Aug 22 02:03:31 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c parser.c xmlIO.c xmlcatalog.c xmllint.c 
	  include/libxml/catalog.h: starts to look okay, really
	  plugged the new framework, cleaned a lot of stuff,
	  added some APIs, except the PI's support missing this
	  should be mostly complete
	* result/catalogs/* test/catalogs/*: added new test, enriched
	  the existing one with URN ID tests

Tue Aug 21 14:56:18 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* catalog.c: fixed nextCatalog
	* result/catalogs/docbook test/catalogs/*: started adding
	  a small regression test

Tue Aug 21 12:52:38 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am catalog.c xmlcatalog.c include/libxml/catalog.h:
	  more work on the XML catalog support.
	* parser.c include/libxml/parser.h: small cleanup seems using
	  list as a public parameter name can give portability troubles
	* trionan.c trionan.h xpath.c include/libxml/trionan.h
	  include/libxml/xpath.h include/libxml/Makefile.am: removed
	  trionan from the libxml API, added xmlXPathIsInf and xmlXPathIsNaN
	  wrappers

Tue Aug 21 11:18:45 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* Makefile.am trio.c triodef.h trionan.c xpath.c
	  include/libxml/Makefile.am include/libxml/trionan.h:
	  Re-worked Not-A-Number and Infinity support.
	* xmlcatalog.c: added readline include files

Mon Aug 20 02:04:13 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* Makefile.am xmlcatalog.c libxml.spec.in: renaming 
	  testCatalog as xmlcatalog, making it an installed app
	  adding a shell, and preparing it to be a /etc/xml/catalog
	  management tool, though not ready yet
	* catalog.c include/libxml/catalog.h: adding support for
	  XML Catalogs http://www.oasis-open.org/committees/entity/
	  not finished, there is some interesting tradeoffs and a
	  few open questions left.

Sun Aug 19 14:59:56 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: fixed a line formatting problem

Fri Aug 17 11:35:31 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: removed a couple of unused variable (Albert Chin)

Fri Aug 17 01:25:21 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HTMLparser.c HTMLtree.c include/libxml/HTMLparser.h:
	  trying to fix some troubles w.r.t. function returning
	  const xxxPtr.

Thu Aug 16 21:33:20 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: another set of symbols conditionally
	  defined

Thu Aug 16 21:31:14 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpointer.c: removed unused var

Thu Aug 16 18:26:40 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* testXPath.c: another small cleanup closing bug #59110

Thu Aug 16 17:59:18 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* win32/dsp/libxml2.def.src: small cleanup closing bug
	  #59108

Wed Aug 15 22:46:01 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* example/gjobread.c: add xmlCleanupParser() before leaving

Wed Aug 15 14:57:08 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* config.h.in configure.in include/libxml/xmlwin32version.h:
	  released 2.4.2

Wed Aug 15 13:56:22 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* include/libxml/valid.h debugXML.c valid.c: deprecate
	  the non-boundchecking Sprintf functions, add Snprintf
	  this should close bug #57984

Wed Aug 15 10:46:07 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmlIO.c: xmlOutputBufferCreateFilename() didn't unescaped
	  URIs before doing the lookups (pointed by Mark Vakoc)

Tue Aug 14 18:37:23 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: serious changes on Result Value Trees and NodeSets
	  w.r.t. deallocation and collect operations. Probably not
	  100% clean (merge of allocated trees smells like a problem).
	  Seems sufficient to close #58943

Tue Aug 14 16:12:00 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xmllint.c: adding a --format option

Tue Aug 14 14:16:24 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: count() was broken on Result Value Tree
	* xmlIO.c: fixed file:/// accesses on _WIN32

Mon Aug 13 13:22:53 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* libxml.m4: s/LIBXML_VERSION_NUMBER/LIBXML_VERSION/ seems the
	  macro was renamed, this should close bug #58683

Mon Aug 13 12:33:40 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: small fix fixing bug #58539 reported by coolo, in
	  entity substitution mode text at the end of the entity might
	  be added due to text coalescing.
	* nanoftp.c parser.c: small cleanup

Wed Aug  8 22:57:05 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* HACKING: added John Fleck right to commit in the doc subdir

Tue Aug  7 03:05:58 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c testXPath.c valid.c xmllint.c include/libxml/valid.h:
	  allow to inherit attributes from the DTD directly in the
	  tree, this is needed for XPath and can be a useful feature.
	  Inherited namespaces are always provided at the tree level now
	* test/defattr* result/defattr* result/noent/defattr*: added a couple
	  of tests for this feature (XSLT being the prime user).

Fri Aug  3 14:02:20 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* DOCBparser.c Makefile.am nanohttp.c parser.c testHTML.c
	  testSAX.c xmlIO.c xmllint.c include/win32config.h
	  include/libxml/xmlversion.h.in include/libxml/xmlwin32version.h
	  include/libxml/xmlwin32version.h.in win32/README.MSDev
	  win32/dsp/*: applied Win32 Facelift No.2 patches from 
	  Igor Zlatkovic for Windows/MSC

Wed Aug  1 23:21:06 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* SAX.c: unparsedEntityDecl() the URI computation of the
	  entity wasn't done breaking XSLT unparsed-entity-uri()

Wed Aug  1 17:44:57 CEST 2001 Daniel Veillard <daniel@veillard.com>

	* xpath.c: fixed a bug when walking the descendants and
	  the current node has no children
	* debugXML.c: show up when a text node is supposed to not be escaped

Wed Aug  1 01:33:35 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* xpath.c: fixed a bug in xmlXPathNodeTrailingSorted (for now it
	  worked like the set:leading() function)
	* include/libxml/xpathInternals.h: added xmlXPathNodeSetContains

Tue Jul 31 18:24:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* nanohttp.c: protected an use of EAGAIN, Brian Stafford

Tue Jul 31 17:48:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xmlIO.h: apply change to close #58141 
	* win32/libxml2/*: update of the MSC projects from Igor  Zlatkovic

Tue Jul 31 17:09:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: when the internal subset uses a PE, then the
	  included entity can use conditional sections.

Mon Jul 30 12:58:39 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c include/libxml/xpath.h: fixed a serious memory problen
	  when walking the namespace axis showing up in
	  libxst/tests/general/bug-12
	* xmlmemory.c: added the possibility to trace a given block
	  defined by its address

Sun Jul 29 07:18:53 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: don't override existing encoding specified before
	  starting xmlParseDocument()

Sat Jul 28 13:33:10 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xmlwin32version.h: reinserted, needed for
	  Windows users of CVS

2001-07-27  Darin Adler  <darin@bentspoon.com>

	* encoding.c: (xmlIconvWrapper): Add cast to fix warning.
	* testCatalog.c: Add include of <libxml/parser.h>.

2001-07-27  Darin Adler  <darin@bentspoon.com>

	* include/libxml/.cvsignore:
	* include/libxml/xmlwin32version.h:
	Remove this file from CVS because it's generated.

Fri Jul 27 10:03:56 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c include/libxml/parser.h: applied const patches from
	  Tom Moog #58002

Thu Jul 26 18:55:52 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* xpath.c include/libxml/xpath{,Internals}.h: added a function
	  lookup framework

Fri Jul 27 01:50:20 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlCopyNode() for documents

Thu Jul 26 12:40:35 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed bugs #58073 reported by Greg Shtilman

Thu Jul 26 11:38:37 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixes bug #57652 reported by Morus Walter

Thu Jul 26 10:24:34 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* nanohttp.c: John Kroll provided a small fix to xmlNanoHTTPSave

Thu Jul 26 07:16:04 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parserInternals.c: fixed the xmlLineNumbersDefault()
	  errors, lesson don't add new functions at 1am before a release
	* xpath.c: integrated fix from Bjorn to avoid divide by zero
	  from XPath initialization when possible.

Tue Jul 24 15:39:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* result/scripts/base*: removing history/readline changed
	  this slightly
	* include/libxml/parser.h SAX.c parser.c parserInternals.c
	  xmllint.c: make element content line number generation
	  optionnal to avoid breaking old apps added interface to switch

Tue Jul 24 15:06:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: get rid of the readline and libhistory
	  dependencies by default, release 2.4.1 with IA64 fix
	* nanohttp.c tree.c xmlIO.c include/libxml/nanohttp.h
	  include/libxml/tree.h include/libxml/xmlIO.h: incorporated
	  John Kroll fixes to allow saving to HTTP via PUT (or
	  POST of needed).
	* doc/html/*.html: regenerated the docs

Sun Jul 22 05:56:16 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* hash.c include/libxml/hash.h: added xmlHashScannerFull,
	  xmlHashScanFull and xmlHashScannFull3 to get passed the
	  three keys as arguments to the callback function

Thu Jul 19 15:29:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in Makefile.am: removed libxml softlink for good
	* include/libxml/*.h *.c doc/Makefile.am: cleanup to get
	  100% coverage by gtk-doc

Tue Jul 17 17:36:46 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlmemory.c include/libxml/xmlmemory.h: debugging on IA64,
	  fixed serious troubles due to size_t vs. int mismatch

Tue Jul 17 16:04:36 EDT 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c xmlIO.c: cleaned up some warning on the Alpha

Mon Jul 16 06:32:44 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* include/libxml/xpath{,Internals}.h xpath.c: added a more
	  convenient extension API for value and context managing
	  Now handles external objects through xmlXPathPopExternal,
	  xmlXPathWrapExternal and xmlXPathReturnExternal.
	  Added functions for sets operations (intersection, etc.)

Mon Jul 16 20:05:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/parserInternals.h include/libxml/HTMLparser.h
	  xmlIO.c tree.c parserInternals.c entities.c encoding.c
	  HTMLparser.c: cleanup of global variables, marking some
	  const or private.

Mon Jul 16 00:17:15 CEST 2001 Thomas Broyer <tbroyer@ltgt.net>

	* include/libxml/xpath.h: exported xmlXPath{NAN,PINF,NINF}
	  fixed xmlXPathNodeSetItem when passing index=0

Sun Jul 15 17:58:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xmlwin32version.h.in: added xmlCheckVersion()

Sat Jul 14 19:31:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.c: fixed compilation under Cygwin #57503
	* TODO: update

2001-07-13  Peter Williams  <peterw@ximian.com>

	* config.h.in: add #undef HAVE_DLFCN_H

	* example/Makefile.am (INCLUDES): Compile fix when srcdir !=
	builddir.

Fri Jul 13 11:09:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* win32/libxml2/libxml2.def.src: added a couple of exported entries
	  raised by #57348 and #57381

Thu Jul 12 21:20:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c HTMLparser.c HTMLtree.c SAX.c debugXML.c parser.c
	  tree.c xpointer.c: store the line numbder in element->content,
	  may break some software, need a configuration mechanism

2001-07-10  Darin Adler  <darin@bentspoon.com>

	* .cvsignore:
	* example/.cvsignore:
	* include/.cvsignore:
	* include/libxml/.cvsignore:
	Various things that are generated and should be ignored.

Tue Jul 10 17:47:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in include/libxml/xmlwin32version.h: release of 2.4.0
	* doc/xml.html doc/html/*:  updated the docs

Mon Jul  9 22:06:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed "Internal: MIXED struct bad" when #CDATA elements
	  validation occured on content with element child

Mon Jul  9 17:59:08 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed XML Base computation which was broken
	* debugXML.c: added a base function to the shell
	* Makefile.am result/scripts/* test/scripts/*: added scripts
	  based regression tests, and adding 2 XML Base tests

Mon Jul  9 12:31:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: set properties doc and call xmlSetListDoc for properties
	  content when grafting them in a different tree.
	* aclocal.m4: remove from CVS

Sun Jul  8 23:09:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* win32/libxml2/libxml2.def.src: added some missing entry point
	  for XPath (Mark Vakoc)

Sun Jul  8 20:34:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: fixed an old bug raised by Bernhard Zwisch, the I/O
	  layer should URI-Unescape before trying to open resources.

Sun Jul  8 16:26:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fix the name() bug for elements in the default 
	  namespace reported by Charlie Bozeman

Sun Jul  8 15:11:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c parser.c testXPath.c xpath.c: trying to fix #56948, this
	  led to an XPath fix, improvements of SAX initialization, and
	  an added option --nocdata to testXPath

Sat Jul  7 21:09:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: Felix Natter provided anew version working
	  with XEmacs too

Sat Jul  7 02:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/xpath.h: small cleanup
	* doc/xml.html: update

Fri Jul  6 01:40:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am configure.in include/libxml/xmlwin32version.h:
	  released 2.3.14

Fri Jul  6 00:47:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/html/*: rebuilt the docs for the release
	* doc/xml.html: added 2.3.14 release.

Thu Jul  5 22:01:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: a bug reported by Stephan Kulow empty nodesets
	  were not equal to empty strings

Thu Jul  5 00:52:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c: fixed a URI-Reference computation problem when validating
	* xmlIO.c: small cleanup

Thu Jul  5 00:04:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: improved the description of a couple of interfaces
	  upon Larry Stamper suggestion

Wed Jul  4 21:42:24 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c entities.c parser.c: changed completely the way entities
	  are handled when running the parser in entity substitution mode.
	  This fixes a bug reported by Stephan Kulow and nearly divides
	  by 3 the amount of memory required by libxslt to load and process
	  DocBook TDG.

Wed Jul  4 18:02:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: fixing a too early root closing problem raised
	  byt Prashanth Naidu

Wed Jul  4 01:42:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a missing copy in xmlXPathVariableLookupNS() 
	  raised by Mark Vakoc.

Tue Jul  3 18:35:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* example/Makefile.am: fixed the include path to add srcdir/include
	* Makefile.am configure.in: fix from Albert Chin for iconv detection
	  and some cleanup

Tue Jul  3 10:12:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c include/libxml/xpath.h include/libxml/xpathInternals.h:
	  lot of optimization work, results in significant improvements
	  when handling really complex XPath queries. Add a small optimizer
	  for unions, improve [n] and [last()], avoid some costly ops.

Fri Jun 29 23:26:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/parser.h parser.c: xmlStrstr args are both const
	* xpath.c: small cleanup
	* xmlGetNsList: reformated, fixed problems if used on Entities

Thu Jun 28 18:19:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: added 1.8.14 and 2.3.13 releases

Thu Jun 28 18:16:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in include/libxml/xmlwin32version.h: released 2.3.13
	* Makefile.am example/Makefile.am: workaround automake generating
	  erroneous deps

Thu Jun 28 15:08:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: bug #56801 Yon Derek provided a patch
	  to the windows config file.

Thu Jun 28 14:51:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpointer.c include/win32config.h win32/libxml2/libxml2.def.src
	  libxml.h : Yon Derek provided a set of changes to compile from
	  CVS on Windows/MSC

Thu Jun 28 14:11:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed UTF8 BOM support in push mode
	* test/utf8bom.xml result/utf8bom.xml result/noent/utf8bom.xml:
	  added a specific testcase

Wed Jun 27 18:33:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: added --push regression tests
	* parserInternals.c: the XML parser segfaulted in --push mode

Wed Jun 27 13:09:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: moved the symlinks detection within a CVS
	  check, this is not portable and will be removed soon.
	* xpath.c: small cleanup/speedup

Tue Jun 26 18:05:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in doc/xml.html include/libxml/xmlwin32version.h:
	  release of 2.3.12
	* parser.c: make an error message if unknow entities in all cases

Tue Jun 26 09:46:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.c: fixed 2 uri normalization bugs on '//' reduction

Mon Jun 25 18:06:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/libxml/Makefile.am: Laszlo Peter pointed out that
	  includes were installed in the wrong dir

Mon Jun 25 17:07:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/html.xml: warn against sending code to exhibit bugs.

Sun Jun 24 23:31:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: patch to xmlXPathFormatNumber for the optimizer on
	  Tru64 from Thomas Leitner

Sun Jun 24 14:05:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* AUTHORS: added William and Bjorn
	* include/libxml/*.h *.c README doc/*.html etc.: changed old email to
	  daniel@veillard.com hopefully I won't have to do this again
	* doc/Makefile.am doc/html/*.html: cleanup makefile, checked that
	  docs can be rebuilt cleanly now
	* include/libxml/xml*version.h*: removed include/libxml/xmlversion.h
	  from CVs it's generated, added include/libxml/xmlwin32version.h
	  also generated but which should change far less frequently.
	* catalog.c nanoftp.c: made sure to include libxml.h not
	  libxml/xmlversion.h directly
	* include/libxml/*.h: include xmlwin32version.h instead of xmlversion.h
	  when compiling on WIN32 and MSC

Sat Jun 23 23:54:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/Makefile.am include/libxml/Makefile.am configure.in:
	  fixed make distcheck and rebuilding the rpms

Sat Jun 23 20:50:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: should finish the migration of exported includes
	  into a real include/libxml in CVS, at least for CVS users.
	* removed the exported headers, added in include/libxml (as well
	  as xmlversion.h.in).

Sat Jun 23 20:37:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed the way to detect symlink

Sat Jun 23 20:30:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: updated, include/libxml is now a real CVS dir

Sat Jun 23 19:36:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: a new version of libxml-doc.el. This new
	  version works with both libxml1 and libxml2 (it autodetects
	  the prefix of the html-files) from Felix Natter.
	* doc/xml.html: updated doc accordingly

Sat Jun 23 18:30:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed the bug generating a template loop in libxslt
	  when using docbook-xsl-1.4, * should filter out document nodes
	* HACKING: added William
	* TODO: updated

Fri Jun 22 18:02:37 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/FAQ.html: added a warning about gcc-3.0
	* doc/xml.html: added reference to gdome2 and removed a confusing
	  sentence

Fri Jun 22 17:02:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h: okay this is a generated file, but Windows
	  users need it and they can't generate it, and I want CVS
	  Windows users ...
	* win32/libxml2/libxml2_so.dsp: Windows project file for 
	  the shared lib version of libxml2
	* win32/libxml2/libxml2.def.src: bug #56527 set of exported
	  resources needed for libxslt/xsltproc by Yon Derek

Fri Jun 22 16:39:36 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* trio.c: MSVC fix (provided by Igor Zlatkovic)

Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: another small fix for ATTRIBUTE_UNUSED

Fri Jun 22 12:42:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* include/win32config.h: Yon Derek provided a first fix
	  to be able to compile libxslt/xsltproc on Windows

Fri Jun 22 00:04:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: attempt to work around what seemed a gcc optimizer
	  bug when handling floats on i386 http://veillard.com/gcc.bug
	* tree.c entities.c encoding.c: doing some cleanups while
	  chasing it

Thu Jun 21 13:13:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: cleanup when --without-debug is specified
	* xinclude.c xpath.c xpathInternals.h xpointer.c: cleanup
	  w.r.t. --without-debug and other include points
	* catalog.h testCatalog.c: a bit of cleanup and prepare for XML
	  Catalogs
	* configure.in entities.h tree.h HTMLparser.c: removed
	  --without-corba, made the _private field mandatory

Wed Jun 20 19:37:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parserInternals.c encoding.c: Since Notepad on Win2k
	  outputs a BOM in UTF8, an errata has been issued to avoid the
	  problem, that was the most reasonable solution... Add support
	  for a leading UTF8 BOM in entities.

Wed Jun 20 15:38:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed a bug found when post validating an entity ref
	* xmllint.c: added --loaddtd and sligly changed --postvalid to
	  activate it too

Tue Jun 19 20:03:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c xinclude.c xpointer.c: bug #56402 exposed a number of
	  weakness in the node copy the XPointer and the XInclude
	  implementations. Serious cleanup.

Tue Jun 19 14:50:18 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: Kjartan Maraas provided a small patch to
	  add xml2-config.in to EXTRA_DIST

Tue Jun 19 13:04:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c tree.c parserInternals.c parser.c: Stephan Kulow
	  provided another failing case found in KDE, the way the
	  ctxt->vctxt.nodeTab was allocated and freed changed over
	  time but it wasn't completely cleaned up. This should fix it.

Sun Jun 17 19:56:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: Stephan Kulow also raised the fact that line number
	  could get miscounted making debug harder, fixed the problem
	  in xmlParseCharData()

Sun Jun 17 19:17:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: Stephan Kulow pointed out a problem when validating
	  and using an empty entity, forgot a 'break' in a case.

Sun Jun 17 16:47:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlHasNsProp() accordingly to bug #55683
	* doc/xml.html: updated with 2.3.11

Sun Jun 17 12:24:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* TODO: updated adding cleanup of generated doc
	* configure.in: prepared to release 2.3.11
	* xmllint.c: added --version for bug reporting
	* doc/html/*.html: rebuilt the doc

Sat Jun 16 23:23:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: first part of the work on selecting namespace to
	  fix bug #56115 

Sat Jun 16 00:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am example/Makefile.am: Laszlo PETER provided a fix
	  when using -liconv
	* TODO: updated

Fri Jun 15 07:08:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.[ch]: more work on the HTML serialization routnes,
	  cleanup, encoding support.

Thu Jun 14 10:31:17 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Thomas Broyer suggested a better patch for the / arg

Thu Jun 14 01:01:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: bug detected by Ankh when / is used as a function arg

Wed Jun 13 23:08:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.[ch] HTMLtree.c: stored the inline/block property
	  of element and use it to avoid outputting formatting spaces at
	  the wrong place. Implemented the format parameter for HTML save.
	* result/HTML/doc2.htm result/HTML/doc3.htm result/HTML/fp40.htm
	  result/HTML/script.html result/HTML/test2.html result/HTML/test3.html
	  result/HTML/wired.html: of course this impact the result of a
	  number of HTML tests

Thu Jun 14 09:49:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.[ch]: started augmenting the HTML save API with
	  encoding and formatting parameters

Wed Jun 13 09:44:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.h: cleanup and started evaluating the work needed on
	  revamping the HTML output code

Mon Jun 11 19:29:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: handling of PIs and <?sgml-declaration in entities.

Tue Jun 12 08:46:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed bug #56049, forgot one check in the
	  validation routine

Tue Jun 12 08:09:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch]: grrr ... namespace is a C++ reserved keyword

Tue Jun 12 06:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.h: fixed an error in last commit
	* doc/FAQ.html: added an entry for compilation from CVS

Mon Jun 11 10:07:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h.in libxml.h: Cygwin patches
	* tree.c: xmlFreeNodeList patch similar to xmlFreeNode one
	* tree.h: cleanup

Sat Jun  9 19:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: patched xmlFreeNode() to avoid freeing() a static
	  memory block in a strange case where libxml is linked twice
	  in the binary.

Sat Jun  9 18:39:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: (a? , b? , c? , ... , z?) was storing/restauring
	  state far too often, simple fix used to avoid it.

Sat Jun  9 16:10:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: Raphael Hertzog had a trouble with DTD nodes
	  being processed, applied his patch
	* tree.c: fixed a bug raised in xmlStaticCopyNodeList()

Sat Jun  9 15:50:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* nanoftp.c nanohttp.c uri.c include/win32config.h: Igor  Zlatkovic
	  provided fixes to compile on MSCC again
	* win32/libxml2/libxml2.def.src win32/libxml2/libxml2*.dsp: he
	  also provided an update for the project files.

Thu Jun  7 21:52:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: applied Steve Tinney patch to xmlNewNsProp to fix
	  bug #55810

Thu Jun  7 21:29:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlGetNsProp() to close bug #55683
	  Note this requires libxslt to use it's own function instead.

Thu Jun  7 18:06:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: when in a pre element no formatting space should
	  be added.
	* test/HTML/pre.html result/HTML/pre.html*: added a regression test

Thu Jun  7 17:29:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: added tests for signal() and signal.h

Fri Jun  8 10:17:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: robert pointed out xmlXPathNINF was not initialized

Fri Jun  8 10:01:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/libxml-doc.el: Felix Natter provided a new version for
	  libxml2

Fri Jun  8 07:20:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: when in a pre element no formatting space should
	  be added.

Wed Jun  6 18:07:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: add -mieee to CFLAGS when compiling on Linux/alpha

Thu Jun  7 06:44:01 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: implemented the <?sgml-declaration encoding="xxx"?>
	  hack
	* tree.[ch]: added xmlHasNsProp as suggested in bug report #55653 
	* uri.c: fixed a warning

Tue Jun  5 22:54:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: trying to close bug #55772 escaping in script
	  elements
	* doc/xml.html: suggest to send mail to the list

Tue Jun  5 19:11:02 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: attempt to fix the xmlGetVarStr breakage once and for
	  good. Use a macro and based on the solution provided in 
	  vsnprintf manual page from GNU.

Tue Jun  5 14:46:10 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* error.c: Workaround for non-preserving variadic list.
	* trio.c trio.h triop.h strio.c strio.h: Upgraded to trio baseline 1.4

Sat Jun  2 06:12:33 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: added 2.3.10 release

Fri Jun  1 11:27:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: releasing 2.3.10

Thu May 31 20:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: Gary Pennington spotted a few troubles with file:///

Thu May 31 20:18:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* encoding.c: Robert Collins provided a patch to add the
	  "US-ASCII" encoding alias

Wed May 30 21:12:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c encoding.[ch]: William M. Brack provided a set of UTF8
	  string oriented functions and started cleaning the related areas
	  in xpath.c which needed fixing in this respect

Wed May 30 20:30:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: applied patch from Jaroslaw Kolakowski to close bug
	  #55380
	* tree.c: patch to xmlNodeGetContent() to get CDATA section content

Mon May 28 12:56:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* TODO: updated
	* nanohttp.[ch] : started adding APIs to get the redirected URL
	  when this occurs (needed for further base computation
	* tree.h: cleanup
	* encoding.c: cleanup
	* SAX.c: minor change around ctxt->loadsubset

Fri May 25 09:36:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am include/Makefile.am: small change to have
	  include/libxml rebuilt if working from CVS.
	* uri.c: applied another patch from Carl Douglas for URI escaping,
	  this should close bug #51876

Wed May 23 15:40:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: fixed XInclude recursive behaviour bug #54678
	* result/XInclude/recursive.xml test/XInclude/docs/recursive.xml
	  test/XInclude/ents/inc.txt test/XInclude/ents/sub-inc.ent:
	  added specific regression test
	* parser.h: preparing for the XSLT mode where DTD inherited
	  attributes are added to the tree.

Wed May 23 13:59:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.[ch]: Updated the namespace for the Last Call version
	* result/XInclude/include test/XInclude/include: updated the
	  testsuite accordingly

Wed May 23 12:27:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.[ch]: applied a patch from Carl Douglas for URI escaping,
	  related to bug #51876

Tue May 22 18:46:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed a gross mistake in base computation, xml:base is
	  not completely correct yet (need cascade).
	* xpath.[ch]: added the few things needed to find a function name
	  and URI from the XPath context when it is called.

Tue May 22 17:00:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* catalog.[ch]: fixes and add xmlLoadCatalogs()
	* DOCBparser.c: small cleanup
	* xmllint.c: added a --catalogs option to load catalogs from
	  $SGML_CATALOG_FILES
	* tree.c: cleanup
	* configure.in: iconv library fixup, ICONV_LIBS 

Mon May 21 16:05:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* catalog.c: handling of CATALOG entries. detection of recursion,
	  and a few bugfixes
	* xpath.c: fixing bug #54951 QNAME with no prefix should not match
	  against the default namespace

Mon May 21 10:14:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Joe Orton reported a bug found with IRIx compiler.

Sun May 20 15:15:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed propagation context info when parsing an
	  external entity.
	* doc/html/*.html: regenerated a couple of docs

Sat May 19 17:11:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: update with 2.3.9 informations

Sat May 19 16:50:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.h debugXML.h parserInternals.h tree.h valid.c
	  xmlversion.h.in xpathInternals.h xpath.h: some cleanup for gtk-doc
	* doc/html/* : rebuilt the docs
	* valid.c: small patch which may improve some case when
	  validating.

Sat May 19 15:20:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: Closed bug #54891
	* result/HTML/cf_128.html* test/HTML/cf_128.html: added the test
	  to the suite

Thu May 17 14:15:07 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* encoding.h hash.c nanoftp.h parser.h tree.h uri.h xlink.h xpointer.c:
	  applied a documentation patch from LotR and filled in a few missing
	  descriptions

Wed May 16 23:02:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c tree.c parser.c: speed optimizations at the parser level
	  document tree freeing and xpath evaluation

Wed May 16 12:55:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parser.h parserInternals.h: fixed a couple of
	  interfaces for handling memory buffer input to const char *
	  upon suggestion of JamesH.

Tue May 15 17:22:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: LoTR sent a patch fixing the previous commit 

Tue May 15 14:40:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: trying to deal again with the stoopid -R linking
	  flag of Solaris

Tue May 15 12:49:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.h: two nodeset access macros from Thomas Broyer

Tue May 15 11:42:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c xpath.h xpathInternals.h: apply an XPath API cleanup
	  patch from Thomas Broyer

Tue May 15 10:52:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c test/VCM/v2[34].xml: Fixed bug #54631 added specific test
	  case
	* INSTALL: was empty added stuff from the FAQ

Fri May 11 19:37:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch]: fixing bug #54446, by cleaning some bugs in the
	  attributes handling and #54433 by adding xmlUnsetProp()
	  and xmlUnsetNsProp()

Fri May 11 16:07:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: Patch from Jonas Borgström
	(htmlGetEndPriority): New function, returns 
	the priority of a certain element.
	(htmlAutoCloseOnClose): Only close inline elements if they 
	all have lower or equal priority.
	* result/HTML: this of course changed a number of tests results.

Thu May 10 17:30:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c catalog.c: plugged in the default catalog resolution
	* doc/gnome-xml.sgml: linked in the Docbook parser and catalog
	  documentations
	* doc/html/libxml-*.html: rebuild added the missing ones to CVS

Thu May 10 16:14:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am xmlversion.h.in configure.in include/Makefile.am:
	  integrating catalogs
	* catalog.[ch] testCatalog.c: adding a small catalo API
	  (only SGML catalog support).
	* parser.c: restaured xmlKeepBlanksDefault(0) API

Wed May  9 12:50:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: zb@bisp.com reported an error in xmlNodeGetLang()

Tue May  8 12:31:40 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: added xmlParseExternalEntityPrivate() to allow
	  propagation of ctxt->_private when parsing external entities

Tue May  8 10:26:22 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: fixed the bug reported by Bjorn in htmlNodeDump

Tue May  8 09:30:12 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed a small portability problem with AM_CONDITIONAL

Mon May  7 22:44:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: warn when indeterminist content model is detected
	* result/VC/ElementValid8: this adds a message
	* Makefile.am: add --novalid for VCM tests
	* parserInternals.c: added a call to Init memory 

Fri May  4 19:51:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: fixed htmlNewDoc SYSTEM and PUBLIC ID inversion
	  when both parameters are NULL.

Fri May  4 17:19:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: applied small patch from Gary Pennington, reindented
	  some part of the code.

Thu May  3 13:10:43 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in doc/xml.html doc/html/*: preparing for 2.3.8
	  release, updated and regenerated the docs

Thu May  3 12:47:46 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c result/XPath/expr/floats : clarified and cleanup
	  printing of abnormal floats in tests.

Thu May  3 10:25:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: trying to fix the problem reported by Jonas Borgström
	* results/HTML/ : a few changes in the output of the HTML tests as
	  a result.
	* configure.in: tying to fix -liconv where needed

Wed May  2 19:10:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: fixed a stupid error

Wed May  2 18:39:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in Makefile.am: make the inclusion of the trio
	  modules in the library conditional

Wed May  2 14:39:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: patche from  László Kovács, fixed entities refs
	  in attributes handling

Wed May  2 12:56:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: Bjorn Reese provided a fix for a problem on buffer
	 flushing

Mon Apr 30 22:29:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fix of an XSLT namespace bug reported on the list
	  general/bug-8-

Mon Apr 30 19:42:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* strio.h trio.c: Dan McNichol suggested a couple of small
	  fixes for AIX 4.3.3 using Visual Age 5.0.2 compiler

Mon Apr 30 13:44:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c parser.c encoding.c: spent a bit more time looking
	  at the parsing speed and DOM handling. Added a few more
	  speedups.

Sun Apr 29 21:53:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: small but effective parsing speed improvement

Sun Apr 29 19:02:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: default on the DocBook parser inclusion (for Gnome)
	* DOCBparser.h: fixed a header reference

Sat Apr 28 19:00:39 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in xpath.c: applied Bjorn patches for FPE on the
	  alpha

Sat Apr 28 18:54:28 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch] xmlIO.h: applied patch from Joe McAlerney to add
	  xmlSaveFormatFileTo()

Sat Apr 28 16:33:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: simple and efficient optimization, XPath functions
	  aways bind to the same code, cache this
	* TODO: updated (by saying some is obsolete)

Sat Apr 28 14:23:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: more cleanup work on XPath name parsing routines

Fri Apr 27 19:06:13 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parserInternals.c xpath.[ch]: some UTF8 cleanup on
	  xmlXPathParseName
	* xpath.c: Igor Zlatkovic suggested a change for NAN and MSC
	* debugXML.c: avoid compilation problems if compiling without
	  HTML support, Igor Zlatkovic
	* win32/libxml2/libxml2.def.src: being able to compile without
	  XPath on Windows

Thu Apr 26 22:53:03 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.m4: yet another patch from Toshio Kuratomi

Thu Apr 26 21:27:43 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.m4 libxml2-spec.in: new patches from Toshio Kuratomi

Thu Apr 26 20:53:48 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch]: added xmlSaveFormatFile interface for saving
	  and indenting a file.

Thu Apr 26 16:35:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed bug #53689 related to processing-instruction()

Thu Apr 26 12:57:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c: patche from  László Kovács

Thu Apr 26 11:31:54 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: applied fixes from Christian Glahn bug report #53391

Thu Apr 26 11:14:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: Jean François Lecomte provided a complete description
	  and a fix to bug #53537

Thu Apr 26 09:42:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* libxml.m4: added AM_PATH_XML2 provided by Toshio Kuratomi

Wed Apr 25 21:05:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c SAX.c: a bit more work on entities processing.
	  Still Need to cleanup XML output and references in attributes

Wed Apr 25 17:52:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c include/Makefile.am: two patches from László Kovács

Wed Apr 25 14:56:26 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: trying to fix #53574, not completely complete,
	  I would like xmllint --copy --debug test/ent1 and
	  xmllint --debug test/ent1 to show the same result.
	* xpath.c: fix a bug when trying to sort namespace nodes

Wed Apr 25 12:28:57 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: real fix for  #53402

Tue Apr 24 17:36:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c HTMLtree.h : closing #53402 i.e. output of
	  PIs when using xsl:output
	* valid.c: closing #53537 some case generate segfaults if there
	  is validity errors

Tue Apr 24 15:19:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c testDocbook.c DOCBparser.c: more work on the support
	  of external parsed entities, added --noent to testDocbook
	* valid.c: Garry Pennington found an uninitialized variable
	  access in xmlValidateElementContent()

Tue Apr 24 14:41:25 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c : HTML parsing still sucks ... trying to deal
	  with madness
	* result/HTML/ : this modified the result of the regression tests
	  a lot.

Tue Apr 24 14:10:38 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* entities.c: xmlEncodeEntitiesReentrant fixed a few accesses
	  to doc where it wasn't checked against NULL reported by
	  Jens Laas

Tue Apr 24 13:21:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: Jonas Borgström patch, the <td>, and <th> elements
	  now means the end of any open <span>,<font>,<a>,<b>,<i>,<u>.

Mon Apr 23 15:40:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* DOCBparser.c DOCBparser.h testDocbook.c configure.in Makefile.am
	  xmlversion.h.in: started (re)integrating the DocBook SGML parser.
	* SAX.[ch]: cleanup and updates for DocBook
	* debugXML.c parser.h tree.[ch] valid.c xpath.c: small macro or
	  ex SGML identifier changes
	* valid.c: removed a static unused function.

Mon Apr 23 11:05:56 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLtree.c: applied change for Paul Sponagl on script saving
	* Makefile.am: the warning about entity title.xml are normal.

Sun Apr 22 22:09:35 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: release of 2.3.7
	* Makefile.am: fixing make distcheck

Sun Apr 22 21:29:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/html/* doc/xml.html: updated and regenerated the docs

Sun Apr 22 21:11:45 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed the XPointer problem introduced in 2.3.6

Sun Apr 22 14:11:58 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed #53388 with the provided patch

Sun Apr 22 12:34:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: Bjorn detected an invalid memory access. Fixed
	  vstateVPush()

Sun Apr 22 10:49:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed xmlXPathCompile to detected unproperly ended expr

Sat Apr 21 18:27:51 CEST 2001 Bjorn Reese <breese@users.sourceforge.net>

	* libxml.h: new header used only for the compilation of libxml
	* HTMLparser.c HTMLtree.c SAX.c debugXML.c encoding.c entities.c
	  error.c hash.c list.c nanoftp.c nanohttp.c parser.c
	  parserInternals.c testHTML.c testSAX.c testURI.c testXPath.c
	  tree.c uri.c valid.c xinclude.c xlink.c xmlIO.c xmllint.c
	  xmlmemory.c xpath.c xpointer.c: libxml.h integration
	* trio.[ch] triop.h strio.[ch]: upgraded to the latest trio
	  baseline (version 1.2 plus a single patch).
	* xpath.c result/XPath/expr/floats test/XPath/expr/floats: parses
	  scientific notation for numbers. Tests added.
	* xpath.c: formatting of numbers changed to use sprintf
	  (contribution from William Brack)

Sat Apr 21 16:12:59 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: cleanup, more useful debugging
	* parserInternals.c: cleanup vctxt.nodeTab (de)allocation
	* xmlIO.c: entity loading is printed as an error when validating

Sat Apr 21 12:25:49 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: fixed to validate within entities
	* test/VCM/v22.xml: added a specific testcase

Fri Apr 20 17:45:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: forgot an epsilon transition in for ()+
	* test/VCM/v21.xml : added a specific test case

Fri Apr 20 15:46:04 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: removed a state explosion exhibited by RSS
	* test/valid/rss.xml result/valid/rss.xml*: added the testcase
	  from bug #51872

Fri Apr 20 14:52:44 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.[ch] tree.h: worked *hard* to get non-determinist content
	  validation without using an ugly NFA -> DFA algo in the source.
	  Made a specific algorithm easier to maintain, using a single
	  stack and without recursion.
	* Makefile.am test/VCM/*.xml: added more tests to "make Validtests"
	* hash.c: made the growing routine static
	* tree.h parser.c: added the parent information to an
	  xmlElementContent node.

Wed Apr 18 23:33:11 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c parser.c xpath.c: generating IDs when not validating
	  from an external parsed entity was poisoning the ID has table
	  with removed values. This was killing XSLT on the KDE help
	  browser.

Wed Apr 18 17:09:15 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* entities.h: andrew@ugh.net.au detected a double declaration

Wed Apr 18 15:06:30 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* debugXML.c hash.c tree.h valid.c : some changes related to
	  the validation suport to improve speed with DocBook
	* result/VC/OneID2 result/VC/OneID3 : this slightly changes
	  the way validation errors get reported

Wed Apr 18 11:42:47 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c HTMLtree.c: applied part of the patches provided
	  by P C Chow and William M. Brack for XSLT HTML output

Mon Apr 16 19:44:36 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlversion.h.in win32config.h win32/libxml2/*: applied 
	  Igor Zlatkovic patches for MSC compilation and added his
	  updates

Tue Apr 17 10:08:19 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed xmlXPathNodeCollectAndTest() to do proper
	  prefix lookup.
	* parserInternals.c: fixed the bug reported by Morus Walter
	  due to an off by one typo in xmlStringCurrentChar()

Thu Apr 12 17:41:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c result/HTML/*: revamped the way the HTML
	  parser handles end of tags or end of input

Thu Apr 12 10:50:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch] : added xmlDocCopyNode for gdome2 support

Wed Apr 11 16:37:50 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.h: include xmlmemory.h this seems to havoid a nasty glibc
	  bug where the linktime verions of free() won't work ...

Wed Apr 11 14:21:31 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* config.h.in configure.in xmlversion.h.in: added ansidecl.h test

Wed Apr 11 13:50:42 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: added 2.3.6 release

Wed Apr 11 13:26:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlStringGetNodeList() to handle charrefs
	* result/wml.xml: resulted in a small output change

Wed Apr 11 09:47:55 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: xmlNewDoc was missing the charset initialization
	* xmllint.c: added --auto to autogenerate a doc, allow to
	  reproduce the problem fixed on xmlNewDoc

Tue Apr 10 18:13:10 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: trying to get 52979 solved
	* tree.c result/ result/noent/: trying to get 52712 solved, this
	  also made me clean up the fact that XML output in general should
	  not add formating blanks by default, this changed the output of
	  a few tests

Tue Apr 10 16:30:20 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Bill Brack pointer an error in detecting a null nodeset

Sun Apr  8 15:07:16 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: finally released 2.3.6

Sun Apr  8 11:39:21 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: checking for null pointer generated by new code

Fri Apr  6 12:53:05 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a [] evaluation problem reported
	* test/XPath/tests/simpleaddr: extended test
	* result/XPath/simpleaddr: updated result

Wed Apr  4 02:07:53 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.c: Dan Timis reported a portability problem
	  on Macs without mmap, fixed it.

Tue Apr  3 20:20:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* testXPath.c : added a --tree option allowing to display the
	  tree dump of the XPath expression

Mon Apr  2 17:13:51 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a memleak when comparing nodesets
	* HTMLtree.c: don't invent the HTML doctype if not available (XSLT)
	* tree.c: added a TODO

Tue Mar 27 14:32:06 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in Makefile.am config.h.in xmlversion.h.in: detect if
	  we need string functions
	* trio.[ch] strio.[ch]: embedded the Trio-0.23 string functions
	  to be able to use them where needed. Applied some changes
	  to reduce name linking pollution and compile in only what's
	  needed.
	* HTMLtree.c debugXML.c entities.c error.c nanoftp.c valid.c
	  xlink.c xmlversion.h.in xpath.c: got rid of the #ifdef 
	  for the string manipulation functions
	* xmlmemory.[ch]: removed DEBUG_MEMORY_FREED and added it automatically
	  to the free() function of xmlmemory.c
	* entities.c HTMLtree.c parserInternals.c tree.c uri.c valid.c
	  xinclude.c xmlIO.c xpath.c xpointer.c: removed the MEM_CLEANUP
	  usage.

Tue Mar 27 02:30:23 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: applied the context output patch of the error
	  handling submitted by Chuck Griffith
	* error/VC/*: this slightly change some error logs

Tue Mar 27 00:51:27 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed line number reporting on error

Mon Mar 26 23:21:41 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: Sullivan and Darin found a parser bug,
	  applied the patch.

Mon Mar 26 18:24:52 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c HTMLtree.c SAX.c debugXML.c error.c parserInternals.c
	  testHTML.c testSAX.c tree.c valid.c xmlIO.c xmlmemory.c
	  xmlversion.h.in xpointer.c: of course the way I defined
	  UNUSED breaks on old gcc version. Try to be smart and
	  also define it directly in xmlversion.h
	* configure.in: removed -ansi flag from the pedantic set

Sat Mar 24 17:45:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
	Huge cleanup, I switched to compile with
	-Wall -g -O -ansi -pedantic -W -Wunused -Wimplicit
	-Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat
	-Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow
	-Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return
	-Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline
	* HTMLparser.[ch] HTMLtree.c SAX.c debugXML.c encoding.[ch]
	  encoding.h entities.c error.c list.[ch] nanoftp.c
	  nanohttp.c parser.[ch] parserInternals.[ch] testHTML.c
	  testSAX.c testURI.c testXPath.c tree.[ch] uri.c
	  valid.[ch] xinclude.c xmlIO.[ch] xmllint.c xmlmemory.c
	  xpath.c xpathInternals.h xpointer.[ch] example/gjobread.c:
	  Cleanup, staticfied a number of non-exported functions,
	  detected and cleaned up a dozen of problem found this way,
	  avoided a lot of public function name/typedef/system names clashes
	* doc/xml.html: updated
	* configure.in: switched private flags to the really pedantic ones.

Thu Mar 22 22:44:15 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: 2.3.5
	* doc/html/*: rebuilt the docs

Thu Mar 22 15:36:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed a reported bug in NOTATION parsing
	* uri.c: accepted but not fixed bug 51876, added TODO 
	* Makefile.am: fixed bug 51876

Thu Mar 22 13:41:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* config.h.in configure.in error.c: fix a compilation problem
	  on platforms without vsnprintf (xml@thewrittenword.com)

Wed Mar 21 19:04:34 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed a function name header typo
	* SAX.c: notations can also occur in external subset.

Tue Mar 20 14:21:28 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* error.c: removed a C++ like comment

Tue Mar 20 12:22:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixing bug 52299 strange condition leading
	  to a parser crash due to a buffer overflow
	* result/noent/attrib.xml result/attrib.xml test/attrib.xml:
	  added the specific test case

Mon Mar 19 16:50:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch]: still a lot of cleanup based on XSLT, added
	  xmlXPathConvert{String,Number,Boolean} to be able to make
	  type casts without a context stack, fixed some implementation
	  problems related to the absence of context at parse-time,
	  added xmlXPathEvalPredicate() and xmlXPathFreeCompExpr()
	  in the public API too
	* xpointer.c xpathInternals.h: we need to know at parse time
	  whether we are compiling an XPointer

Mon Mar 19 11:54:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch] xpointer.c: restaured the Binary and API compatibility
	  cleaned up the parser internals, refactored XPath code, added
	  new compilation based APIs and cleanly separated public and
	  private APIs.

Mon Mar 19 00:59:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.h: the comp field must be added at the end to avoid
	  killing binary compat.

Mon Mar 19 00:11:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: detect XPath memleaks in regreson tests
	* error.c: fixed and error w.r.t. error reporting still using
	  stderr
	* hash.c: added new line at end of file
	* tree.h: minor cleanup
	* xpath.[ch] xpointer.[ch]: Major changes ! Separated XPath
	  expression parsing from evaluation, resulted in a number of
	  changes internally, and in XPointer. Likely to break stuff
	  using xpathInternals.h but should remain binary compatible,
	  new interfaces will be added.

Wed Mar 14 20:34:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed a couple of problems reported by 
	  okiddle@yahoo.co.uk and allanc@chickenandporn.com when compiling
	  without gcc on non linux platforms.

Wed Mar 14 20:13:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/Makefile.am configure.in: yearke@eng.buffalo.edu suggested
	  a fix for --with-html-dir= configure support. I hope it won't
	  break rpm generation

Wed Mar 14 17:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: one function comment cleanup.

Wed Mar 14 14:55:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* SAX.c: external subset notations were improperly registered
	  in the internal subset.

Tue Mar 13 10:28:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* README.cvs-commits: added, pointing to HACKING
	* HACKING: updated

Mon Mar 12 22:09:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: and Matt Sergeant found one in the XML push
	  parser (erroneous check I forgot to remove when I fixed the
	  main parser).

Mon Mar 12 19:19:04 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: ptittom found a small bug in UnaryExpr

Sat Mar 10 13:09:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.4
	* error.c: fixed bug #51860
	* tree.c: fixed bug #51861
	* valid.c: cleanup, more debug, failed to fix one bug crap ...
	* tree.[ch] : added xmlDefaultBufferSize
	* nanoftp.c: typo in function name header block
	* doc/xml.html : updated, added link to XML::LibXSLT
	* doc/html/* : rebuilt the docs

Wed Mar  7 20:43:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c SAX.c: the new content parsing code raised an
	  ugly bug in the characters() SAX callback. Found it
	  just because of strangeness in XSLT XML Rec ouptut :-(

Wed Mar  7 16:50:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: Martin Baulig suggested to add -lm
	* tree.c: found another bug in xmlNodeGetContent()

Tue Mar  6 09:21:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: Bjorn found the error related to strictness of comparison.

Mon Mar  5 21:47:31 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: trying to fix the Dtd parsing problem reported
	  by Gary, side effect of last week speed optimizations.

Sat Mar  3 19:45:59 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xml2Conf.sh.in: fixes pointed out by Fredrik Hallenberg
	* parserInternals.c: removed unneeded test raised by Stric

Sat Mar  3 13:04:37 CET 2001 Bjorn Reese <breese@users.sourceforge.net>

	* xpath.c: Fixed xmlXPathNodeCollectAndTest (problem reported
	  and fixed by William Brack). Added xmlXPathFormatNumber.
	  Changed the sorting slightly.
	* configure.in Makefile.am example/Makefile.am: Added -lm.
	  Please note that applications linking with libxml2, must
	  also like with the math library from now on.

Sat Mar  3 07:38:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: fixed loop reported by Marc Sanfacon

Sat Mar  3 02:10:24 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: one must report spaces even if the Dtd element
	  content proves that this is not part of the element content.
	* result/valid/*.xml: this changed the ouptu slightly

Thu Mar  1 17:53:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.3
	* doc/xml.html: updated

Wed Feb 28 00:43:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: minor doc fix
	* xpath.c: deallocation issues when a result tree has been
	  converted to a node-set

Mon Feb 26 22:09:45 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: oops corrected dates s/2000/2001

Mon Feb 26 12:48:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: new patch from Gary Pennington

Mon Feb 26 09:30:23 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: applied patch from Ankh

Mon Feb 26 03:34:43 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xinclude.c: fixed a problem building on Mac

Sun Feb 25 21:52:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: more work on increasing parsing ferformances

Sun Feb 25 18:03:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlmemory.h HTMLparser.c HTMLtree.c entities.c parser.c
	  xpath.c xpointer.c tree.c uri.c valid.c xinclude.c xmlIO.c:
	  avoiding memcpy in production builds MEM_CLEANUP macro use
	* parser.[ch] parserInternals.c: optimizations of the tightest
	  internal loops inside the parser. Better checking of I/O
	  flushing/loading conditions
	* xmllint.c : added --timing

Sun Feb 25 05:48:51 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: bumped to 2.3.2
	* doc/xml.html: updated for release

Sat Feb 24 14:07:52 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: found a memleak and fixed a nasty bug

Sat Feb 24 03:35:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.[c1] : added return code errors for xmllint
	* xpath.c: specific debug dump function for result value trees

Thu Feb 22 07:52:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: finally implemented xmlXPathCompareNodeSets
	* test/XPath/expr/floats results/XPath/expr/floats: added 
	  a test for float expressions

Tue Feb 20 18:57:54 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed xmlNodeGetContent, it was not recursing on child
	* parserInternals.[ch]: trying to speed up parsing
	* xpath.c : speeded up node set equality op

Mon Feb 19 19:01:57 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am valid.c list.[ch]: Gary Pennington provided a
	  better handling of ID/IDREF and the list modules associated
	* configure.in: small CFLAGS cleanup

Mon Feb 19 16:13:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: fixed iconv detection on AIX (stric)

Mon Feb 19 10:59:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed "*" (unbelievable !) and a couple of warnings

Sun Feb 18 17:52:37 MET 2001 Bjorn Reese <breese@users.sourceforge.net>

	* xpath.c: fixed whitespace handling in xmlXPathStringEvalNumber,
	  and optimized xmlXPathNodeSetSort

Sat Feb 17 14:18:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: bug fix when context size is 0
	* parser.c: I like Norm's Dtd because they still manage to break
	  the parser occasionally

Fri Feb 16 14:20:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: xmlXPathEqualNodeSetFloat the arg is really a double now

Fri Feb 16 01:10:06 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.[ch] parser.c xpath.c: fixed the problem of addressing
	  attributes within the XML-1.0 namespace

Thu Feb 15 16:53:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpathInternals.h: exported a few axis functions
	* doc/xml.html: updated the doc

Thu Feb 15 15:57:14 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: applied patch from Daniel van Balen for OpenBSD
	  and bumped version to 2.3.1
	* HTMLtree.c result/HTML/doc3.htm result/HTML/wired.html: the
	  attempt to find autoclosing was simply broken, removed it,
	  updated the examples, this is better

Wed Feb 14 11:35:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* hash.[ch]: added Paolo Casarini patch to provide Delete from
	  hash functionnalities.
	* doc/html/* : rebuild the doc

Tue Feb 13 18:01:48 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c result/XPath/tests/chaptersprefol: bugfixes on order and
	  on predicate
	* HTMLparser.[ch] HTMLtree.c result/HTML/doc3.htm.err
	  result/HTML/doc3.htm.sax result/HTML/wired.html: sometimes one
	  really want to have tags closed on output even if we accept
	  unclosed ones on input

Mon Feb 12 18:33:20 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: ouch don't free NULL, rare case fixed
	* tree.c: don't coalesce text nodes if they don't have the
	  same behaviour wrt escaping on output

Sun Feb 11 21:15:41 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: small fixup
	* SAX.c: don't warn on empty namespaces.

Thu Feb  8 11:28:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* README: a bit of cleanup
	* configure.in: preparing for 2.3.0 release

Thu Feb  8 10:37:00 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* hash.[ch]: added a first version of xmlHashSize()
	* valid.c: another bug fix from Gary Pennington

Wed Feb  7 19:22:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* valid.c: couple of bug fixes pointed by Gary Pennington
	* HTMLtree.c: #if 0 cleanup

Tue Feb  6 14:02:56 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: started profiling XSLT, added xmlXPathNodeSetAddUnique()
	  which removes a time consuming check of xmlXPathNodeSetAdd()
	  and use it in places where we are sure to not break unicity

Mon Feb  5 18:51:36 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: bug fixes found from XSLT
	* tree.c: preserve node->name special values when copying nodes.
	* parserInternals.[ch] parser.[ch] SAX.c : added a mode where
	  external subset are fetched when available but without full
	  validation. Added xmlLoadExtDtdDefaultValue, need a function.
	* HTMLtree.c: add support for xmlStringTextNoenc for XSLt HTML
	  output with encoding disabled.

Sat Feb  3 09:50:29 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmliO.c: Harry Blundell pointed out that xmlCheckFilename
	  xmlCheckFilename should not be called from xmlFileOpenW
	  and xmlGzfileOpenW

Fri Feb  2 18:04:35 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.c: rewrite of xmlNormalizeURIPath from Paul D. Smith
	* test/URI/smith.uri result/URI/smith.uri Makefile.am:
	  added the new tests for URI normalization
	* testURI.c: fixed stoopid bugs
	* result/VC/OneID3 result/VC/UniqueElementTypeDeclaration:
	  the URI in the error messages are now properly normalized

Fri Feb  2 09:18:53 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* uri.c: applied Marc Sanfacon's patch for xmlNormalizeURIPath

Thu Feb  1 05:28:55 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed a number of problems in XPATH_XSLT_TREE processing

Wed Jan 31 21:45:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed mod operator

Wed Jan 31 16:50:42 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c: fixed xmlStrcat doc
	* tree.c: 2 fixes form Anders Carlson for copying nodes and
	  trees.

Wed Jan 31 14:19:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c result/XPath/tests/chaptersbase
	  result/XPath/tests/simplebase: fixed XPath node() 
	* tree.c: small fix in xmlNewNs()
	* Makefile.am: removed extraneous xml2Conf.sh rule

Sun Jan 28 08:37:03 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am configure.in libxml.spec.in example/Makefile.am:
	  Changed the library name, in order to get libxml-devel and
	  libxml2-devel to coexist on a single system
	* xml-config.1 xml-config.in xmlConf.sh.in: renamed
	* xml2-config.1 xml2-config.in xml2Conf.sh.in: new files

Sat Jan 27 19:58:22 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am configure.in libxml-2.0.pc.in: started working on getting
	  libxml2-devel installable in // as libxml-devel.

Sat Jan 27 18:49:02 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/Makefile.am: fixed make rebuild in doc
	* doc/html/*.html: rebuilt the docs

Fri Jan 26 10:30:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: patch from Bjorn Reese on xmlBufferCCat

Thu Jan 25 19:22:25 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am doc/Makefile.am libxml.spec.in: painful work to get
	  the HTML doc to go into the -devel RPM ...
	* aclocal.m4 config.h.in: some updates due to auto* magic

Thu Jan 25 19:11:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.h: added a hook in the context structure allowing to
	  link to extra support, needed for XSLT

Thu Jan 25 13:34:11 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch] xpointer.c: added xmlXPathCmpNodes, changed
	  xmlXPtrCmpPoints to use it.
	* propagated the following patch from Alejandro Forero
	* include/win32config.h xmlIO.c: applied further suggestions
	  from Igor Zlatkovic <igorz@dialup.nacamar.de> and cleanup
	* example/gjobread.c: fixed warnings, now that it builds

Wed Jan 24 20:27:28 COT 2001 Alejandro Forero <bachue@bachue.com>

	* xmlIO.c (xmlFileOpen, xmlFileOpenW): Removed unnecesary checks.

	* xmlIO.c (xmlCheckFilename): Function added to know whether a given
	  filename points to a valid file (not a directory).
	* xmlIO.c (xmlFileOpen, xmlFileOpenW, xmlGzfileOpen, xmlGzfileOpenW):
	  Added calls to xmlCheckFilenameDir.

	* xmlIO.c (xmlGzfileOpen, xmlGzfileOpenW, xmlFdOpen, xmlFdOpenW): Pass
	  `path' (rather than `filename') as the parameter to gzopen and open.

Tue Jan 23 16:26:30 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: fixed a problem with EXTRA_DIST

Mon Jan 22 23:42:17 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am example/Makefile.am: finally found the trick
	  to build the example, i.e. add "." in SUBDIRS before example
	  in the list <grin/>

Mon Jan 22 16:30:37 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* doc/xml.html: updated with an XSLT section, removed pointer to
	  W3C CVS base.

Mon Jan 22 11:43:21 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: when copying a XSLT tree object teh tree need to be copied
	  too, and deallocation need to occur the same way.

Mon Jan 22 10:35:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpathInternals.h xpath.[ch] debugXML.c: added the XPATH_XSLT_TREE
	  type correponding to an XSLT result tree fragment. Share most
	  of the data format with node set, as well as operators.
	* HTMLtree.c: added a newline at the end of the doctype output
	  whe this one is not present initially.
	* tree.c: make sure taht the parent and doc pointers are properly
	  set when copying attributes (lists).

Sun Jan 21 10:47:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* htmlTree.[ch] xmlIO.h: exported htmlDocContentDumpOutput

Fri Jan 19 18:15:50 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: seems I finally killed that ugly path evaluation
	  context bug (tagged 9999 in case is is wrong)

Fri Jan 19 06:30:38 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.[ch] xpathInternals.h: added xmlXPathRegisterVariableLookup()
	  for XSLT

Thu Jan 18 16:19:47 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: Gary Pennington <Gary.Pennington@uk.sun.com> fix
	  for xmlGzfileOpen() bug

Thu Jan 18 13:11:50 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: removed an error found by XSLT usage
	* tree.c parserInternals.h: use a predefined static string
	  for text and comment nodes, avoid freeing them in xmlFreeNode,
	  exported the string name in parserInternals.h and added
	  another value to disable encoding at output (for XSLT),
	  gain memory, time.

Wed Jan 17 09:15:16 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* win32/README.MSDev win32/libxml2/libxml2_a.dsp
	  win32/libxml2/libxml2_so.dsp: new makefiles and update
	  provided by Igor Zlatkovic <igor@stud.fh-frankfurt.de>

Tue Jan 16 18:24:46 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c : xmlSaveFile, xmlSaveFileEnc, applied patch from 
	  Gary Pennington

Mon Jan 15 20:24:18 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xpath.c: fixed the comaprision of values and nodelists,
	  need to compare nodelist still ...
	* debugXML.c: avoided a possible core dump
	* HTMLparser.c: cleanup
	* nanohttp.c: contributed fix.
	* tree.c: fixes in properties handling added xmlSetNsProp
	  needed by libxslt
	* xpathInternals.h: exported xmlXPathBooleanFunction, added a 
	  comment
	* TODO: updated

Sat Jan  6 22:05:09 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* parser.c parserInternals.c: applied Bjorn Reese optimization
	  patch

Sat Jan  6 19:13:27 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* Makefile.am: applied patch fro make check from Martin Vidner

Thu Jan  4 19:07:49 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* configure.in: preparing 2.2.11
	* doc/html/*: rebuild the HTML files
	* doc/xml.html : updated

Thu Jan  4 14:09:58 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* tree.c: fixed a stupid bug
	* valid.c: applied "Paul D. Smith" <pausmith@nortelnetworks.com>
	  patches related to validation of an XInclude processing result
	* TODO: updated

Thu Jan  4 11:46:40 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* encoding.c xmlIO.c: Fixing the problem reported by Marc Sanfacon
	  on large files

Wed Jan  3 21:51:13 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmlIO.c: fixed xmlParserInputBufferCreateMem doc

Wed Jan  3 18:56:00 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* HTMLparser.c: htmlCheckParagraph to check htmlOmittedDefaultValue,
	  reported by Jonas Borgström
	* nanohttp.c: Applied Bjorn Reese' IPV6 first patch

Wed Jan  3 16:19:39 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* testXPath.c xpath.c: fixing the XPath union expressions problem
	  reported by  Martin Vidner <martin@artax.karlin.mff.cuni.cz>

Wed Jan  3 14:22:33 CET 2001 Daniel Veillard <Daniel.Veillard@imag.fr>

	* xmllint.c: Made is so if the file name is "-" is will read form
	  standard input. Sven Heinicke  <sven@zen.org>
	* tree.c: fixed a problem when growing buffer
	* tree.h: fixed the comment of the node types following andersca
	  comment
	* TODO: updated

Wed Dec 27 12:35:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch]: added a way to avoid adding automatically
	  omitted tags. htmlHandleOmittedElem() allows to change the
	  default handling.
	* tree.[ch] xmllint.c: added xmlDocDumpFormatMemory() and 
	  xmlDocDumpFormatMemoryEnc(), uses memory functions for output
	  of xmllint too when using --memory flag, added a memory test
	  suite at the Makefile level.
	* xpathInternals.h xpath.[ch] xpointer.c: fixed problems
	  with namespace use when encountering QNames in XPath evalation,
	  added xmlns() scheme in XPointer.
	* nanoftp.c : incorporated a fix
	* parser.c xmlIO.c: fixed problems raised with encoding when using
	  the memory I/O
	* parserInternals.c: closed bug 25934 reported by 
	  torsten.landschoff@innominate.de
	* TODO: updated

Sat Nov 25 11:46:27 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in doc/html/* doc/xml.html: made a 2.2.9 release
	  on a non-updated tree :-(, made a 2.2.10 release to correct the
	  situation

Sat Nov 25 10:41:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c parser.[ch] tree.[ch] xmlIO.[ch] xmllint.c xpath.c
	  parserInternals.h vms/build_libxml.com vms/config.vms Makefile.am:
	  integrated a set of OpenVMS changes from Howard Taylor
	  <Howard.Taylor@pacoast.com>

Sat Nov 25 01:21:01 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] xmlIO.c: added xmlDocDumpMemoryEnc() from John Kroll
	* error.c: applied fix suggested by "Leo Davidson" <leo@ox.compsoc.net>

Sat Nov 25 00:24:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: some fixes on auto-open of html/head/body
	* encoding.c: fixed a compilation error on some gcc env
	* xpath.c xpointer.[ch] xpathInternals.h: improved the
	  XPointer implementation
	* test/XPath/xptr/strpoint test/XPath/xptr/strrange3: added
	  related XPointer tests and associated results

Fri Nov 24 14:01:44 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xmldtd.html doc/xml.html: following a short step by step
	  guidance on IRC to help maciej with DTDs I started a small
	  page on the subject.

Fri Nov 17 17:28:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: fixed handling of broken charrefs
	* xmlmemory.h libxml2.dsp include/win32config.h: reporting Windows
	  patches

Mon Nov 13 19:17:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html doc/html/* : rebuilt the docs after adding
	  xinclude and updated page for 2.2.7 and 2.2.8
	* configure.in: releasing 2.2.8

Mon Nov 13 12:39:38 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] parserInternals.c: applied the conditional
	  section processing fix from Jonathan P Springer
	  <jonathan.springer2@gte.net>
	* xmlversion.h.in win32/libxml2/libxml2.dsp : Updated MS
	  project file, fixed iconv default non support
	* xpath.c: fixed the problem of evaluating relative expressions
	  when a node context is provided.

Sun Nov 12 16:31:19 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c: fixed gcc 2.95 new warnings
	* SAX.c: fixed a stupid bug
	* tree.c: fixed a formatting problem when round-tripping
	  from/to memory
	* xinclude.c: chased memleak, fixed a base problem
	* xpointer.c: added xmlXPtrBuildRangeNodeList(), finished ? 
	  xmlXPtrBuildNodeList()
	* TODO: updated
	* Makefile.am test/XInclude/docs test/XInclude/ents result/XInclude:
	  adding a first small set of regression tests for XInclude

Tue Nov  7 15:11:34 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.[ch]: applied Wayne Davison patches to access
	  the WWW-Authorization header.
	* parser.c: Closed Bug#30847: Problems when switching encoding
	  in short files by applying Simon Berg's patch.
	* valid.c: fixed a validation problem
	* hash.c parser.h parserInternals.h testHTML.c testSAX.c tree.h
	  xmlerror.h xmlmemory.h xmlversion.h.in: applied a DLL patch from
	  Wayne Davison
	* xpointer.[ch]: added first version of xmlXPtrBuildNodeList()
	  need to be extended to non full nodes selections.
	* xinclude.c: starts to work decently

Mon Nov  6 17:22:46 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] xinclude.[ch] xmllint.c configure.in valid.c
	  debugXML.c xmlversion.h.in: Started adding XInclude support,
	  this is a new xmllint option
	* tree.c xpath.c: applied TOM patches for XPath
	* xpointer.c: fixed a couple of errors.
	* uri.c: added an escaping function needed for xinclude
	* testXPath.c hash.c HTMLtree.c: minor cleanups raised by
	  new warning from RH70 gcc's version

Tue Oct 31 14:14:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: fixed loop on invalid char in scripts
	* parser.c: update to description of xmlIOParseDTD()
	* libxml.m4 xmlversion.h.in: changes contributed by
	  Michael Schmeing <m.schmeing@internet-factory.de>
	* configure.in: preparing for 2.2.7
	* Makefile.am: trying to avoid  config.h and acconfig.h
	  being included in the distrib
	* configure.in: released 2.2.7

Mon Oct 30 17:08:10 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] debugXML.c parserInternals.c xpath.c: Deprecated Pi's
	  like namespaces for good. Unified xmlNs and xmlNode somewhat.

Mon Oct 30 16:26:49 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch]: added xmlIOParseDTD()
	* xpointer.c: added support for the 2 extra parameters of
	  string-range, fixed a stoopid error when '0' was present
	  in XPointer expressions
	* test/XPath/xptr/strrange2 result/XPath/xptr/strrange2: added
	  testsuite for the above

Mon Oct 30 10:26:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: improved package descriptions

Sun Oct 29 19:03:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c xpathInternals.h: applied a large cleaning patch
	  from TOM <ptittom@free.fr>, it also add namespace support
	  for function and variables registration.

Sun Oct 29 18:51:46 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c: Wayne Davison's patch fixing xmlBuildURI()
	* Makefile.mingw: Wayne Davison's update adding hash.c

Sun Oct 29 18:38:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c: fixed the root evaluation problems
	* HTMLparser.c result/HTML/doc3.htm: fixed the problem of non
	  ignorable spaces with <b> <bold> <em>
	* tree.c: fixed a loop in xmlSearchNsByHref()

Fri Oct 27 18:57:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c: applied another XPath patch from TOM 
	* xpath.c include/makefile.am: applied another patch from 
	  china@thewrittenword.com (cleanup on IRIX).

Fri Oct 27 13:45:28 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.1: received a fixed version from Fredrik Hallenberg
	  <hallon@lysator.liu.se>

Thu Oct 26 16:05:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c textXPath.c xpathInternals.h: applied TOM <ptittom@free.fr>
	  cleanup patch for XPath

Wed Oct 25 21:31:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* patched to redirrect all "out of context" error messages to
	  a reconfigurable routine. The changes are:
	* xmlerror.h : added the export of an error context type (void *)
	  an error handler type xmlGenericErrorFunc there is an interface
	  xmlSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
	  to reset the error handling routine and its argument
	  (by default it's equivalent to respectively fprintf and stderr.
	* all the c files: all wild accesses to stderr or stdout within
	  the library have been replaced to calls to the handler.

Wed Oct 25 15:27:19 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: release 2.2.6
	* xpath.[ch] xpointer.c xpathInternals.h: added xpathInternals.h
	  exporting the inner functions of xpath for extension modules
	* doc/*: updated and rebuilt the doc

Wed Oct 25 12:48:55 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c : applied Wayne HTTP cleanup patch
	* tree.[ch]: applied TOM <ptittom@free.fr> for xmlNodeSetBase()
	  and xmlNodeSetSpacePreserve()

Wed Oct 25 12:11:03 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c: closing bug #29260

Tue Oct 24 18:49:34 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* hash.[ch] debugXML.c: expanded/enhanced the API, added
	  multikey tuples, made hash structure opaque
	* valid.[ch]: moved elements, attributes, notations decalarations
	  as well as ID and refs to hash tables.
	* entities.c: hash cleanup
	* xmlmemory.c: fixed a dump problem in debug mode
	* include/Makefile.am: problem passing in DESTDIR= values patch
	  from Marc Christensen <marc@calderasystems.com>
	* nanohttp.c: removed debugging remains
	* HTMLparser.c: the bogus tag should be ignored (Wayne)
	* HTMLparser.c parser.c: fixing a number of problems with the
	  macros in the *parser.c files (Wayne).
	* HTMLparser.c: close the previous option when opening a new one
	  (Marc Sanfacon).
	* result/HTML/*: updated the HTML results accordingly

Sun Oct 22 18:39:19 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.[ch] xpath.[ch] hash.[ch] debugXML.c tree.h: added/hacked
	  hash tables from Bjorn Reese <breese@mail1.stofanet.dk>. Switched
	  XPath functions and XML entities table to them. More to come...
	* xmlIO.c: fixed libxml closing FILEs it didn't open.

Sun Oct 22 13:59:50 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: coalesce adjacent text nodes
	* valid.c: handling of blank nodes in DTd validation (raised
	  by problems with a posteriori validation).
	* nanohttp.c: changing behaviour on HTTP write stuff.
	* HTMLtree.c: forced body and html to be explicitely closed.
	* xpath.h: exported more XPath functions.

Sun Oct 15 22:28:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Release of 2.2.5
	* xpointer.c: range() range-inside and other helper functions
	* parserInternals.c: fixed perf problem raised by rolf@pointsman.de

Sun Oct 15 16:21:27 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c: HTML attributes need normalization too (Bjorn Reese)
	* HTMLparser.[ch]: addded htmlIsScriptAttribute()

Sun Oct 15 13:18:36 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/*: rebuilt docs preparing for 2.2.5 release, added URI
	  and XPointer modules

Sun Oct 15 12:13:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.h: closed #25107

Sun Oct 15 12:06:16 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testSAX.c: fixed problem with cdata reporting
	* SAXresult/* : updated

Sun Oct 15 12:00:24 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c test/wap.xml result/noent/wap.xml result/wap.xml:
	  Closed bug #27499, added to regression tests
	* TODO: updated

Sun Oct 15 01:34:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c HTMLtree.[ch] SAX.c testHTML.c tree.c: fixed HTML
	  support for SCRIPT and STYLE with help from Bjorn Reese
	* test/HTML/* result/HTML/*: added simple testcase and updated
	  the existing ones.

Fri Oct 13 18:24:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c xpointer.c: XPointer reorder of ranges start/end and
	  string-range for empty strings
	* test/XPath/docs/str test/XPath/xptr/chaptersrange
	  test/XPath/xptr/strrange: augmented the XPointer testsuite

Fri Oct 13 12:21:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html doc/xmlmem.html: added a module describing memory
	  interfaces and use, updated the main page.

Fri Oct 13 01:23:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c xmlIO.c: Wayne Davison Win32 patch
	  nanoftp code work on Windows too now

Fri Oct 13 00:54:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testXPath.c xpath.[ch]: moved some debug functions to xpath core
	* xpointer.c: implemented string-range() at least a good first version
	* test/XPath/docs/str test/XPath/xptr/strrange
	  result/XPath/xptr/strrange: the string-range() tests

Thu Oct 12 10:02:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am include/Makefile.am include/win32config.h
	  win32/Makefile.mingw: fixed problems reported by Wayne Davison
	  and make distcheck

Thu Oct 12 01:44:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c: added xmlNanoHTTPTimeout(int delay), removed a bug
	  xmlNanoHTTPMethod on input MimeType Tony Lam <Tony.Lam@eng.sun.com>
	* xpointer.c: slight extension of xmlXPtrLocationSetMerge

Thu Oct 12 01:37:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* config.h.in configure.in nanoftp.c nanohttp.c xmlversion.h.in :
	  patch for socklen_t detection by
	  Albert Chin-A-Young <china@thewrittenword.com>

Wed Oct 11 17:53:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c valid.c xmllint.c: Fixed a few postvalidation bugs
	  and added a --dtdvalid option to xmllint used to test it

Wed Oct 11 15:01:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.1 Makefile.am libxml.spec.in: adding a man page for
	  xml-config by Fredrik Hallenberg <hallon@lysator.liu.se>

Wed Oct 11 12:41:30 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] xpointer.[ch]: worked on XPath functions and variable
	  handlings (registration, lookup, cleanup)

Wed Oct 11 01:46:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in Makefile.am include/makefile.am: adding XPointer
	  and XPtrtests target
	* xpointer.[ch] : new files for XPointer support
	* test/XPath/xptr result/XPath/xptr: added XPointer testsuite and
	  more XPath tests

Wed Oct 11 01:23:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: fixed, very broken, make distcheck works again

Wed Oct 11 02:53:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* More work toward 2.2.5, integrated a number of patches
	* configure.in Makefile.am win32config.h.in: trying to cleanup
	  make distcheck .... huh ...
	* include/Makefile.am include/win32config.h: new directory
	  for includes
	* win32/Makefile.mingw win32/README.MSDev win32/libxml2/libxml2.dsp
	  updated teh makefiles and instructions for WIN32
	* xpath.c: small fixes
	* test/XPath/ results/XPath: updated the testcases and results
	* HTMLparser.c nanohttp.c testXPath.c: incorporated provided or
	  suggested patches
	* valid.c: fixed an ID bug

Mon Oct  9 14:28:56 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* moved xml-error.h to xmlerror.h: seems this allowed to bypass
	  the automake bug where wrong dependencies were generated.
	* xpath.[ch]: worked on XPointer

Fri Oct  6 12:58:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in Makefile.am: 2.2.5, ship the include in an
	  include/libxml subdirectory, use symlinks when using CVS
	* testSAX.c: fixed small bug
	* testXPath.c: changed the way testfiles are parsed
	* debugXML.c: same kind of cleanup when parsing an argument expression
	  XPath/XPointers can have blanks embedded
	* xpath.[ch]: more cleanup, reorgs for XPointer work
	* parserInternals.c parser.c HTMLparser.c: fixed wrong include
	* win32/README.MSDev win32/libxml2/libxml2.dsp: Windows stuff

Thu Oct  5 18:13:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* debugXML.c testXPath.c xpath.[ch]: got pissed by some nastyness
	  in the XPath engine, rewrote large parts of it, now it's far
	  cleaner and in sync with the REC not an old WD. Fixed a parsing
	  problem in the interactive XML shell found when testing XPath.

Wed Oct  4 15:25:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* debugXML.c testXPath.c xpath.[ch]: More work on XPath/Xpointer,
	  incorporated "(TOM)" <ptittom@free.fr> patches rebuilt the XPath
	  examples with the extra test

Wed Oct  4 14:39:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c xmlIO.c xmlIO.h: fixed bug 26650, and improved
	  the global init function.

Tue Oct  3 11:28:52 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: Doohhh, attribute name parsing was still case
	  sensitive ! Fixed this ...
	* result/HTML/* : updated the tests results accordingly

Mon Oct  2 23:47:32 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] debugXML.c testXPath.c: fixed the XPath evaluation
	  engine, should be far more stable, incorporated a new version of
	  preceding/following axis, need testing
	* uri.c: fixed file:///c:/a/b/c problem
	* test/XPath/tests/idsimple: augmented the XPath tests

Sun Oct  1 22:33:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* rebuilding docs for 2.2.4 release

Sun Oct  1 22:16:33 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: releasing 2.2.4
	* parser.[ch]: added xmlStrEqual()
	* HTMLparser.c HTMLtree.c SAX.c debugXML.c entities.c parser.c
	  tree.c valid.c xlink.c xpath.c: converted all !xmlStrcmp to
	  use xmlStrEqual instead
	* TODO: updated
	* added an XPath test

Sun Oct  1 20:19:39 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: fixed htmlStartCloseIndexinitialized init
	* entities.h: exported xmlInitializePredefinedEntities
	* parser.[ch] : added xmlInitParser()
	* parserInternals.h : had to export htmlInitAutoClose()

Sun Oct  1 16:28:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] : fixed some serious XPath Predicate evaluation
	  problems
	* Makefile.am : added XPath regression tests to normal tests
	* uri.c: fixed a problem with local paths, cleanup
	* parser.c: fixed a problem with large CData sections

Sat Sep 30 16:35:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in xml-config.in: patch from "Ben Taylor"
	  <sol7x86@hotmail.com> for solaris shared libs lookup

2000-09-30  Martin Baulig  <baulig@suse.de>

	* libxml-2.0.pc.in: Provide pkg-config script.

	* configure.in: Create the libxml-2.0.pc script from the
	libxml-2.0.pc.in templates.
	* Makefile.am (pkgconfig_DATA): Install the libxml-2.0.pc
	script in `$(libdir)/pkgconfig'.

Mon Sep 25 16:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.c tree.c tree.h: Avoiding a few warning
	  when compiling with MSC

Sun Sep 24 20:32:52 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c: patch for normalize-string() substring-before(),
	  substring-after() and translate() functions from Bjorn Reese
	  <breese@mail1.stofanet.dk>
	* libxml.m4 Makefile.am: added libxml.m4 from Debian ?
	  Fredrik Hallenberg <hallon@lysator.liu.se>
	* TODO: updated

Sun Sep 24 10:00:49 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlversion.h.in nanoftp.c nanohttp.c: traying to work out the
	  problem of socklen_t being undefined on a number of platforms
	* debugXML.c: fixed a compilation problem when without snprintf

Sat Sep 23 12:19:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c uri.c: Another patch from Wayne Davison, correcting
	  an URI bug and a fix for the control-character-induced infinite loop
	* nanohttp.c: preventive fix for compiling on WIN32

Fri Sep 22 18:06:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlint.c: closing bug #25000

Fri Sep 22 14:17:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlIO.h tree.h: made xmlNodeDump() and xmlNodeDumpOutput() public
	* parser.[ch] nanohttp.c HTMLtree.c HTMLparser.c tree.c: applied and
	  modified slightly Wayne Davison patch adding xmlStrcasecmp and
	  related function, fixing xmlStrncmp(), and associated cleanup
	* result/HTML/entities.html.sax: updating result

Tue Sep 19 14:20:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c: applied patch for URI escaping from Wayne Davison
	  <wayned@blorf.net>
	* tree.c parserInternals.c HTMLparser.c: memset checks patches
	  from Denis Barbier <barbier@imacs.polytechnique.fr>
	* HTMLparser.c: UTF8 characters in HTML tag-attribute values
	  patch from Wayne Davison

Sun Sep 17 18:37:03 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : updated with new releases, adding "how to help"

Sun Sep 17 17:58:37 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c debugXML.c parser.c parserInternals.c tree.c valid.c xpath.c:
	  removed a few warnings in pedantic mode ...
	* parserInternals.c parser.c: moved encoding switching function
	  to parserInternals.c
	* configure.in, doc/Makefile.am libxml.spec.in: released 2.2.3

Sat Sep 16 20:12:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.c: set ctxt->errNo before calling the
	  error or warning handlers

Wed Sep 13 22:03:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parserInternals.c parserInternals.h parser.c Makefile.am:
	  created a new module parserInternals.c, moved most of the
	  code shared by the various parsers there, as well as
	  deprecated  code from parser.c. More cleanup of parser.c
	* uri.c: fixed a problem when URI is NULL
	* valid.c: speedup when looking for an attribute declaration

Sun Sep 10 17:53:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c tree.c SAX.c parser.c entities.c debugXML.c: finished
	  the cleanup of the computation of URI references when seeking
	  external entities. The URI reference string and the resulting
	  URI are both stored now.
	* parser.c HTMLparser.c valid.c nanoftp.c nanohttp.c xpath.c:
	  large s(n)printf checks and cleanup from Denis Barbier
	  <barbier@imacs.polytechnique.fr>
	* xmlversion.h.in tree.h: couple of SGML declarations for a
	  possible docbook module.
	* result/VC/ : a couple of test output changed due to the change
	  of the entities URI

Sun Sep 10 15:59:58 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.h: added a _private field for linking user's data

Sun Sep 10 15:14:43 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c parserInternals.h: demacroified most of the IS_XXX
	  the gain in size is significant so ...

Fri Sep  8 20:48:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.c: cases where looking up entities with doc==NULL
	  covered

Tue Sep  5 12:41:15 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c: applied Wayne Davison patch
	* Makefile.in test/URI/uri.data result/URI/uri.data: updated URI tests

Mon Sep  4 13:01:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c testUri.c: applied Wayne Davison patches
	* test/URI/uri.data result/URI/uri.data: first set of tests/results
	* Makefile.in: added URItest and included thenin "make tests"

Sun Sep  3 19:19:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlversion.h.in: closed bug 22941

Thu Aug 31 16:55:55 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xmlio.html: added doc and example for entity loader
	  redefinition.

Thu Aug 31 14:59:28 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xmlio.html doc/xml.html: added a doc on the I/O mechanism
	  used by libxml

Tue Aug 29 20:22:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Fixed bug on invalid ontent characters and when using
	  push.
	* xmllint.c: fixed xmllint endling of errors in push mode

Tue Aug 29 11:24:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c testHTML.c: applied two new patches from
	  Wayne Davison <wayned@users.sourceforge.net>
	* result/HTML/*.sax: regenerated HTML SAX output
	* parser.c: more cleanup.

Mon Aug 28 11:58:12 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch] testHTML.c: applied the second set of
	  patches from Wayne Davison <wayned@users.sourceforge.net>,
	  adding htmlEncodeEntities()
	* HTMLparser.c: fixed an ignorable white space detection bug
	  occuring when parsing with SAX only
	* result/HTML/*.sax: updated since the output is now HTML
	  encoded...

Mon Aug 28 00:38:31 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch]: applied some of Wayne Davison
	  <wayned@users.sourceforge.net> patches

Sun Aug 27 22:14:01 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c tree.c debugXML.c: fixed bogus behaviour when an
	  undeclared namespace prefix was used, added a warning.
	  Cleaned up support w.r.t. entities, spilling out a warning
	  and being pedantic on lookups.
	* test/warning/ent9 : added testcase for previous example.
	* TODO: updated
	* parserInternals.h parser.c: changed the way names are parsed
	  now allow infinite size and decrease penalty for normal use
	* parser.c: Started a big cleanup/check of the parser code,
	  fixed some of the most tortuous entity code, spotted code
	  unused anymore
	* test/*: added tests for very long names and related nasty
	  things.

Sat Aug 26 23:31:04 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html: added encoding aliases doc
	* doc/xml.html: updates
	* encoding.[ch]: added EncodingAliases functions
	* entities.[ch] valid.[ch] debugXML.c: removed two serious
	  bottleneck affecting large DTDs like Docbook
	* parser.[ch] xmllint.c: added a pedantic option, will be
	  useful
	* SAX.c: redefinition of entities is reported in pedantic mode
	* testHTML.c: uninitialized warning from gcc
	* uri.c: fixed a couple of bugs
	* TODO: added issue raised by Michael

Wed Aug 23 01:50:51 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html: propagated Martin Duerst suggestions

Wed Aug 23 00:23:41 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Fixed Bug#21552: libxml fails to decode &amp;
	* uri.c testUri.c patches, by Marc Sanfacon (1 left)
	* parser.c HTMLparser.c: HTML/encoding push problems reportedi
	  by Wayne Davison

Sun Aug 20 17:03:38 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c: small cleanup
	* TODO: updated

Sat Aug 19 22:57:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* added an old VC testcase and updated title.xml entity

Sat Aug 19 21:02:08 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c SAX.c tree.c HTMLtree.h result/HTML/*: work
	  done on auto-opening of <p> tags and cleanup of SAX output

Sat Aug 19 18:45:40 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.4  xmllint.1 Makefile.am libxml.spec.in: added man pages

Sat Aug 19 18:38:53 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html libxml.* structure.*: updated the doc a bit

Thu Aug 17 15:50:00 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testSAX.c testHTML.c result/HTML/: cleanup of the output
	  of SAX tests

Mon Aug 14 13:56:33 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Albert Chin-A-Young <china@thewrittenword.com>:
	* xmllint.c: workaround a MAP_FAILEd definition bug in DU-4.0

Mon Aug 14 11:10:20 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Dave Yearke <yearke@eng.buffalo.edu>:
	* testHTML.c: fix core dump on Solaris 2.x systems
	* HTMLparser.c: fix segfault if ctxt->sax->characters() is NULL
	* result/HTML/*.sax: previous bug fix lead to new results

Mon Aug 14 10:26:09 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* Patch from Albert Chin-A-Young <china@thewrittenword.com>:
	* configure.in: added --with-readline=DIR to accept alternate
	  path for readline include/library
	* configure.in: added AM_C_PROTOTYPES to add -Aa -D_HPUX_SOURCE
	  for ANSI under HP-UX
	* config.in: Removed @LIBS@ from xml-config because @XML_LIBS@
	  includes @LIBS@

Sat Aug 12 23:19:42 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the docs
	* getting ready for 2.2.2 release

Sat Aug 12 16:42:37 EDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch]: added xmlGetFeaturesList() xmlGetFeature()
	  and xmlAddFeature()
	* tree.[ch]: added xmlAddChildList()
	* xmllint.c: MAP_FAILED macro test
	* parser.h: added xmlParseCtxtExternalEntity()
	* valid.c: applied bug fixes removed warning
	* tree.c: added CDATA block to elements content
	* testSAX.c: cleanup of output
	* testHTML.c: added SAX testing
	* encoding.c: better error recovery
	* SAX.c, parser.c: fixed one of the external entity processing
	  of the OASis testsuite
	* Makefile.am: added HTML SAX regression tests
	* configure.in: bumped to 2.2.2
	* test/HTML/ result/HTML: added a few of HTML tests, and added the
	  SAX results

Fri Aug  4 11:21:50 PDT 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: patch for HP compiler

2000-08-04  Sven Heinicke  <sven@zen.org>

	* xmllint.c: Was coredumping sometimes when the file given didn't
	exist.

Sat Jul 22 05:59:05 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c xmlIO.[ch]: fixed the problem of encoding support

	  when using in memory parsing. Need some cleanup.
	* xmllint.c configure.in: added a --memory flag to test memory
	  parsing

Fri Jul 21 17:09:57 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c: fixed socklen_t replacement to unsigned int
	* parser.c: fixed a space handdling missing at the end of
	  production 28 DOCTYPE.
	* xmlmemory.c: fixed a stupid bug on the routine to override
	  allocation functions
	* TODO: updated

Fri Jul 14 17:01:14 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/ regenerated the docs

Fri Jul 14 16:12:20 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/encoding.html doc/xml.html: added I18N doc
	* encoding.[ch] HTMLtree.[ch] parser.c HTMLparser.c: I18N encoding
	  improvements, both parser and filters, added ASCII & HTML,
	  fixed the ISO-Latin-1 one
	* xmllint.c testHTML.c: added/made visible --encode
	* debugXML.c : cleanup
	* most .c files: applied patches due to warning on Windows and
	  when using Sun Pro cc compiler
	* xpath.c : cleanup memleaks
	* nanoftp.c : added a TESTING preprocessor flag for standalong
	  compile so that people can report bugs more easilly
	* nanohttp.c : ditched socklen_t which was a portability mess
	  and replaced it with unsigned int.
	* tree.[ch]: added xmlHasProp()
	* TODO: updated
	* test/ : added more test for entities, NS, encoding, HTML, wap
	* configure.in: preparing for 2.2.0 release

Mon Jul 10 16:17:18 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c: fixed the way the control connection is handled
	* libxml.spec.in: fixed the dependencies and cleanup

Mon Jul  3 14:37:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html: changed the xmlsoft.org structure, updated the
	  examples w.r.t. root and childs

Sun Jul  2 20:51:43 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: fixed bug #7419, dependencies fouled for libxml-devel

Sun Jul  2 09:52:45 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: Work on character encoding support for the HTML parser
	* HTMLparser.c: Fixed some autoopen/autoclose probs for the HTML parser
	* encoding.c: Fixed a potential memleak in the encoding stuff

Sat Jul  1 13:44:22 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/FAQ.html doc/Makefile.am : added a FAQ

Fri Jun 30 20:29:08 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c HTMLtree.c SAX.c valid.c tree.h : more cleanup
	  of the HTML parser to force it to not bypass SAX

Fri Jun 30 11:19:59 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* win32config.h.in: updated
	* xmlversion.h.in: crap forgot to update this, this mean 2.1.0
	  lacks iconv support :-( need to release 2.1.1
	* configure.in: release 2.1.1
	* HTMLparser: fixed bug #14784
	* xpath.c HTMLparser.c encoding.c parser.c: fix warning raised
	  by Windows compiler
	* HTMLparser.c SAX.c HTMLtree.h tree.h: create HTML document in
	  the SAX startDocument() callback.
	* TODO: updated

Thu Jun 29 12:06:48 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* added xmlStopParser()

Wed Jun 28 23:10:26 MEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: 2.1.0 prerelease
	* Large resync between W3C and Gnome tree
	* nanoftp, nanohttp.c: fixed stalled connections probs
	* HTMLtree.c SAX.c : support for attribute without values in
	  HTML for andersca
	* valid.c: Fixed most validation + namespace problems
	* HTMLparser.c: start document callback for andersca
	* debugXML.c xpath.c: lots of XPath fixups from Picdar Technology
	* parser.h, SAX.c: serious speed improvement for large
	  CDATA blocks
	* encoding.[ch] xmlIO.[ch]: Improved seriously saving to
	  different encoding
	* example/Makefile.am example/gjobread.c tree.h: work on 
	  libxml1 libxml2 convergence.
	* config.h.in parser.c xmllint.c: added xmlCheckVersion()
	  and the LIBXML_TEST_VERSION macro

Fri Jun 23 22:26:07 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html: various patches and improvements typo fixed by
	  Felix Natter
	* doc/libxml-doc.el: Emacs module to lookup the libxml documentation
	  from Felix Natter <fnatter@gmx.net>

Sat May  6 10:09:45 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/upgrade.html: updated with instructions for support of both
	  libxml-1.x and libxml-2.x
	* doc/gjobread.c : applied Todd Dukes <tdukes@ibmoto.com> patch
	  for 2.x support and also fixed includes

Wed May  3 14:21:25 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* encoding.[ch], xmlIO.[ch], parser.c, configure.in : revamped
	  the encoding support, added iconv support, so now libxml if
	  compiled with iconv automatically support japanese encodings
	  among others. Work based on initial patch from Yuan-Chen Cheng
	  I may have broken binary compat in the encoding handler
	  registration scheme, but that was so utterly broken I don't
	  expect anybody to have used this feature until now.
	* parserInternals.h: fixup on the CHAR range macro
	* xml-error.h, parser.c: catch URL/URI errors using the uri.c
	  code.
	* tree.[ch]: added xmlBufferGrow(), was needed for iconv
	* uri.c: added xmlParseURI() I can't believe I forgot to
	  implement this one in 2.0 !!!
	* SAX.c: moved doc->encoding update in the endDocument() call.
	* TODO: updated.

Mon Apr 24 13:30:13 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h: removed extraneous xmlRemoveProp definition
	* TODO: added item about --disable-corba configure switch
	* tree.c parser.c: fixed problems for xmlCopyDoc and postvalidation
	* nanoftp.c: fixed include problems giving troubles on AIX and 
	  slowlaris
	* xmlIO.[ch] valid.h tree.[ch] xlink.c xmlmemory.c uri.c 
	  parser.c nanoftp.c nanohttp.c SAX.c testSAX.c :
	  comment and headers changes to lower gtk-doc number of warnings
	* doc/html/*: rebuilt docs

Sun Apr 16 11:23:29 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* HACKING: documented the tag for 1.x and instructions

Wed Apr 12 15:47:22 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlIO.[ch] parser.[ch]: More interfaces for new I/O functions
	  xmlNewIOInputStream, xmlParserInputBufferCreateIO,
	  xmlCreateIOParserCtxt
	* parser.c parserInternals.h: speedup of IS_CHAR like macros,
	  significant overall improvement
	* xmllint.c: added I/O test to xmllint
	* testSAX.c: added a speed test
	* doc/* : updated/regenerated

Sat Apr  8 14:54:54 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.c uri.h parserInternals.h: cosmetic changes from
	  "Timur I. Bakeyev" <timur@bat.ru>, including making 
	  xmlCreateURI() public

Fri Apr  7 18:35:02 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlIO.[ch] parser.c: cleane up the xmlParserInputBuffer mess
	  and the code at the same time. Added a clean mechanism for
	  overload or added input methods: xmlRegisterInputCallbacks()
	* tree.c: fixed xmlPrevSibling and xmlNextSibling per 
	  Christophe Le Gal (Christophe.Le-Gal@imag.fr) input
	* TODO: updated
	* doc/* : updated/regenerated
	* doc/Makefile.am: tweaks to avoid problem with libxml link in the
	  source dir

Wed Apr  5 21:11:35 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* testURI.c: yet another forgotten commit, I should get some sleep !

Wed Apr  5 20:36:46 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmllint.c: forgot to commit this too ?

Wed Apr  5 16:22:44 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlversion.h.in : forgot to commit this previously

Mon Apr  3 21:47:10 CEST 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: preparing libxml-2.0.0 version looks Ok so far
	* README TODO: updated for release
	* uri.c uri.h: added authority parsing/saving
	* uri.c testURI.c Makefile.am: moved the testing code to testURI.c
	* xmlversion.h.in configure.in nanoftp.[ch] nanohttp.[ch] encoding.h
	  debugXML.[ch] xpath.[ch] xmlIO.c tester.c testXPath.c testHTML.c
	  tree.c HTMLtree.c HTMLparser.c tree.c tree.h parser.c
	  Makefile.am : added compile-time customization of libxml
	  --with-ftp --with-http --with-html --with-xpath --with-debug
	  --with-mem-debug
	* *.[ch] autoconf.sh : moved to an absolute adressing of includes : 
	  #include <libxml/xxx.h> I hope it won't break too much stuff
	  and will be manageable in the future...
	* xmllint.c Makefile.am libxml.spec.in : renamed tester.c to xmllint.c
	  and added xmllint to the installed programs
	* uri.h: added xmlFreeURI()

Fri Mar 24 14:35:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* uri.c uri.h: finished the escaping handling, the base support
	  and the URI path normalization. Looks good just lacks the
	  authority content parsing code.
	* Makefile.am: added instructions to generate testURI
	* TODO: updated
	* doc/xml.html, doc/smallfootonly.gif doc/w3c.png: updated,
	  added links and icons for W3C and Gnome

Mon Mar 20 14:05:26 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.[ch] : seems I forgot to actually update the files in
	  the last commit :-)
	* doc/xml.html doc/html/* : updated and uploaded the docs

Mon Mar 20 12:33:51 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* test/valid/dtds/xhtml*: removed RCS infos (pain with CVS)
	* TODO: updated
	* xmlmemory.[ch] : added xmlMemSetup() and xmlMemGet() to override
	  libxml default allocation function with another set (like gmalloc/
	  gfree).
	* Makefile.am, uri.c, uri.h: added a set of functions to do
	  exact (litteraly copied from the RFC 2396 productions) parsing
	  and handling of URI. Will be needed for XLink, one XML WFC, 
	  XML Base and reused in the nano[ftp/http] modules. Still work
	  to be done.

Tue Mar 14 20:52:35 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, libxml.spec.in : libxml2
	* doc/* : updated the doc page, rebuilt the docs

Tue Mar 14 19:11:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* all: tagged LIB_XML_1_X
	* *.c *.h : updated from W3C CVS tree
	* configure.in : 2.0.0-beta
	* libxml.spec.in : libxml2 package nam
	* result/* : new version of the tests output

Mon Mar  6 09:34:52 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html, doc/update.html: updated docs, 1.8.7

Sat Mar  4 16:14:42 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the docs
	* parser.c: final patch on #6766
	* valid.c: small patch on validity checks.

Sat Mar  4 12:38:41 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/upgrade.html: instruction on how to upgrade from 1.x to 2.x
	  added
	* parser.c: adding xmlKeepBlanksDefault() as a way to manage
	  compatibility w.r.t. XML spec and existing code.

Thu Mar  2 04:45:15 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: seems a better solution to <a>   </a> exists,
	  will try it for a while

Thu Mar  2 02:26:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: tried to remove the <a>   </a> generating <a/>
	  this is hard. Left a flag for that purpose. Fixed bug #6766
	* configure.in: prepared 1.8.7 not released, due to previous
	  problem

Thu Mar  2 03:03:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : applied second patch from Paul DuBois

Tue Feb 29 23:55:13 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : applied patch from Paul DuBois

Thu Feb  3 16:36:39 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c HTMLparser.c: do a bit of bufferization in push mode.

Thu Feb  3 15:59:37 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c tree.c HTMLtree.[ch] debugXML.c xpath.c: Fixed
	  compilation warnings on various platforms.
	* parser.c: Fixed #5281 validity error callbacks are now desactived
	  by default if not validating.

Thu Feb  3 13:46:14 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c, win32config.h.in: patches to compile on WIN32

Wed Feb  2 22:51:16 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c: snprintf/sprintf patch courtesy George Katsirelos
	  <gkatsi@cs.toronto.edu>

Mon Jan 31 18:58:21 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when
	  processing URLs

Mon Jan 31 14:25:57 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch]: cleanup, bug fixes, integration in rpmfind, added
	  xmlNanoFTPUpdateURL for persistent control connections.
	* configure.in: 1.8.6

Thu Jan 27 17:52:29 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.[ch], nanoftp.[ch]: cleanup, added proxy support
	* tree.[ch] : added xmlSaveNoEmptyTags

2000-01-29  James Henstridge <james@daa.com.au>

	* nanoftp.c: include <netinet/in.h> for IPPROTO_TCP.

	* Makefile.am: added nanoftp.[ch] to the build.

Wed Jan 26 18:14:55 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch]: cleanup, comments, API
	* debugXML.c : fixed a bug in the cat command
	* doc/*: regenerated the docs

Wed Jan 26 16:52:50 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanoftp.[ch] parser.c xmlIO.[ch]: added a Nano FTP implementation
	* debugXML.c : fixed a bug in the cat command
	* valid.c: fixing some small probs
	* libxml.spec.in: get rid of the SNAP suffix
	* doc/xml.html: updated the status

Mon Jan 24 14:31:09 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.in: xml-config --version to just return the
	  version number
	* xpath.c: some cleanup w.r.t. axis when the current node is
	  an attribute.
	* TODO: updated

Tue Jan 18 18:46:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: prepared for libxml-1.8.5
	* doc/* recompiled the documentation

2000-01-17  Jody Goldberg <jgoldberg@home.com>

	* configure.in : WARNING autoconf subtlety alert :
	  Use AC_CHECK_HEADERS rather than AC_CHECK_HEADER
	  when looking for zlib.h so that HAVE_ZLIB_H is defined.
	* config.h.in : Have a #undef for HAVE_ZLIB_H so that it will
	  get defined by AC_CHECK_HEADERS.

Mon Jan 17 17:04:12 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: fixed a hideous bug in xmlGetProp() thanks to
	  Rune.Djurhuus@fast.no

Sat Jan 15 15:09:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* TODO: updated
	* tree.c, parser.c: made sure that only memory alloc problems
	  and internal parser errors are allowed to write to stdout or
	  stderr.

Thu Jan 13 11:49:11 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c : restored xmlNewGlobalNs since this seems used by
	  a lot of existing code :-(, fixed a bug in xmlNewNs
	* nanohttp.c: fixed a problem with INCLUDE_WINSOCK
	* HTMLparser.c, parser.c, entities.c, valid.c : removed all calls
	  to exit() from the library code.
	* xpath.c, parser.c: removed bugs or unused code detected by 
	  Windows compilers
	* parser.c: started adding interfaces for parsing well balanced
	  XML fragments
	* configure.in: releasing 1.8.4
	* doc/* : rebuilt the docs

Sun Jan  9 23:03:20 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] : added xmlNewDocFragment() for DOM
	* testHTML.c: uninitialized variable.

Wed Jan  5 17:29:17 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuild the docs

Wed Jan  5 17:08:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* acconfig.h: readline and history patch
	* valid.[ch]: added xmlRemoveID() and xmlRemoveRef()
	* tree.c: added check and handling when possibly removing an ID
	* tree.c, HTMLparser.h, HTMLtree.h: fixed entities parsing
	     and saving.
	* test/HTML/entities.html result/HTML/entities.html* : test for
	     various entities reference cases
	* result/HTML/* : as a result output of some testcase have
	     changed
	* HTMLparser.c, parser.c: fixed a bug in the push mode triggered
	     by previous example. added xmlParseTryOrFinish().
	* xpath.h tree.h parser.h valid.h xmlIO.h xlink.h encoding.h
	  entities.h debugXML.h HTMLparser.h: changed the way struct are 
	  declared to allow gtk-doc to expose those
	* parser.c: closed bug #4960  
	* Makefile.am configure.in: Applied patch from 
	  Albert Chin-A-Young <china@thewrittenword.com> for better zlib
	  and math/socket libs detection

Mon Jan  3 18:29:43 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, Makefile.am: link tester against readline
	* doc/xml.html doc/*/*: updated and rebuilt the documentation pages

Mon Jan  3 11:58:05 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: added xmlRemoveProp
	* win32config.h.in nanohttp.c: avoid including the Windows
	    socket stuff in every C files
	* parser.c: removed an indetermination xmLDecl/PI(xml...) in
	    the XmL parser(s)
	* test/ns4 result/ns4 etc...: added test case for previous prob    
	* tree.c: xmlNewNs wasn't checking for double definition
	* Makefile.in: fixed a problem with dist-hook duplicates
	* parser.[hc], xmlIO.c: fixed the loading of external entities
	    APIs, now xmlLoadExternalEntity() is used everywhere and
	    setting up an app specific front-end using the 
	* SAX.c parser.c: some fixes, now the xhtml spec validates
	    with the xhtml DTD.
	* error.c: fixed crashes in case of no input stream    
	* test/valid/[dtds/]/xhtml* : added the xhtml spec and dtds
	    to the validation tests and results

Wed Dec 29 15:29:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch] testHTML.c: added push mode for the HTML parser
	  too htmlCreatePushParserCtxt() and htmlParseChunk()
	* parser.c: a bit of cleanup.
	* SAX.c, HTMLparser.c: some attributes may not have values (contrary
	  to XML) removed the last mem leak known
	* HTMLtree.c: output message cleanup
	* xmlmemory.c: display content info about memory blocks
	* result/HTML/wired.* : missing att value warning change

Tue Dec 28 17:42:41 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/* : rebuilt the documentation

Tue Dec 28 18:44:22 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] parserInternals.h: Push parser for XML,
	     seems to work fine now
	* tester.c debugXML.[ch]: Added an XML shell debug facility and
	     --push for push testing
	* xpath.[ch] : cleaned up for Shell usage, added missing APIs
	* testSAX.c: added --push
	* HTMLtree.[ch] tree.[ch]: new functions for dumping parts of the
	     subtree
	* xmlIO.[ch] : enriched API + fixes for push mode     
	* entities.[ch]: added the entity content length to the struct.
	* xmlmemory.[ch]: new API to show the last entries for the shell
	* valid.c: added required attribute testing
	* SAX.c: the cdata callback now merge contiguous fragments
	* HTMLparser.c: cleanup of some macros

Wed Dec 22 12:20:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: fix for PIs name starting with xml
	* tree.c: fixed a potential problem with || and && ops
	* *.c, configure.in win32config.h.in : generate win32config.h for
	  those on the Other Side !

Tue Dec 21 17:22:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: fixed a stupid = vs. == bug :-(
	* doc/gnome-xml.sgml: s/glade/xml/

Tue Dec 21 14:29:34 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, doc/xml.html : bug fix release 1.8.2
	* debugXML.h nanohttp.h xml-error.h xmlmemory.h xpath.h : 
	  Hopefully the end of that silly C++ include problem
	* tree.[ch]: Added a few functions: xmlReplaceNode, xmlAddPrevSibling,
	      xmlAddNextSibling, xmlNodeSetName and xmlDocSetRootElement
	* HTMLparser.c HTMLparser.h HTMLtree.c: When saving HTML try to avoid 
	      troubles with autoclosed elements when the stree shape doesn't
	      follow the DtD specs. Added htmlIsAutoClosed() and
	      htmlAutoCloseTag()
	* result/HTML/*.htm*: Updated the HTML examples regression tests output
	* SAX.c tree.c: fixed bug on defaulting namespaces on attributes
	* debugXML.c: fixed a bug on printing default namespaces.
	* HTMLtree.c: fixed a problem when outputing XML parsed docs as HTML

Mon Dec 20 16:20:55 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* result/HTML/*.htm[l] : updated the HTML regression tests according
	  to the new output
	* xpath.h xml-error.h valid.h tree.h parser.h entities.h SAX.h
	  HTMLtree.h tree.c entities.c: headers tweakings to avoid a nasty
	  problem due to intermix of extern "C" { ... } declarations for C++
	  and recursive includes in the headers

1999-12-20  Chris Lahey  <clahey@umich.edu>

	* HTMLtree.c: Made it so that html nodes with a single child do
	not insert a carriage return before or after the child node.

Sat Dec 18 16:07:03 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, doc/xml.html : bug fix release 1.8.1
	* parser.c: fixed bug #4344
	* xpath.h xml-error.h xlink.h nanohttp.h debugXML.h SAX.h HTMLparser.h
	  added the glue to avoid C++ problems
	* doc/* : regenerated the documentation

Thu Dec 16 16:19:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: fixed a bug introduced in 1.8.0 and breaking default
	  namespace recognition, and Dia as a resul :-(
	* encoding.c: closed bug #3950

Wed Dec 15 19:22:23 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* valid.c: debugging a posteriori validation, except URI expansion
	  stuff this should be fixed now
	* parserInternals.h: fixed a bug in IS_BASECHAR reported by
	  Carl Nygard <cnygard@bellatlantic.net>
	* tester.c: added --postvalid, cleaning of the code
	* tree.[ch]: added xmlDocGetRootElement()

Tue Dec 14 20:30:34 PST 1999 Ramiro Estrugo <ramiro@eazel.com>

	* SAX.h, tree.h : changed 'namespace' to 'nameSpace' to workaround
	c++ losage.

Sun Dec 12 13:08:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, doc/xml.html : bumped to 1.8.0
	* xlink.[ch], Makefile.am : added framework for link detection
	* parser.h: added nbChars to parser context, needed for cleanup.
	* xmlmemory.c: removed a nasty bug when out of mem
	* valid.[ch]: adding namespace support for attribute decl
	* tester.c: added --debugent option
	* debugXML.[ch]: added xmlDebugDumpEntities()
	* parser.c: cleanup, avoiding use of CUR_PTR like plague, using
	  buffers instead, this was really needed, validation was breaking
	  in strange ways due to that. Added xmlParseStringPEReference()
	  and other parsing from strings functions. Entities processing
	  modified again, but PERef are still not handled correcly but
	  unless you're Eve Maller you won't notice :-)
	* HTMLparser.c: large changes toward reliability, and switched to
	  lowercase internal tags, XHTML is lowercase, so it will help
	  that output is closer to next version.
	* doc/* : regenerated the documentation, it is now hosted at
	  http://xmlsoft.org/ (same bits I just bought the domain :-)

Fri Dec  3 13:46:32 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.h, SAX.c, makefile.am: added SAX.h mostly useful for the
	         doc generation
	* parser.c: fixed bugs #3908 and #3937 and a memory leak
	         in the SAX API
	* doc/*: rebuilt the doc making sure everything appears in the
	         HTML files

Wed Dec  1 10:27:47 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] HTMLtree.c, debugXML.c, configure.in, xml-config.in:
	     added the patch from Carl Nygard <cnygard@bellatlantic.net>
	     which allow impressive speed improvement on dataset with
	     large text pieces, but at the cost of broken binary
	     compatibility and slightly bigger memory usage.
	     Configure with --with-buffers to activate them, they
	     are protected with XML_USE_BUFFER_CONTENT define.
	* entities.[ch], parser.c: added xmlCleanupPredefinedEntities(),
	     goal is 0 memory left allocated once parser is no more used
	* testDAV.c, testHTML.c, testSAX.c, testXPath.c: make sure we
	     call xmlCleanupParser() and xmlMemoryDump()

Wed Nov 24 19:00:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch] xmlIO.[ch] parser.c valid.c: code cleanup with -pedantic
	* parser.[ch] encoding.[ch]: added memory cleanup routines
	* parser.c: closing bug #3788
	* doc/*: rebuilt the doc

Tue Nov 23 11:23:55 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: closing bug 3748, added xmlNewDocRawNode(), 
	             xmlNewTextChild() and xmlSetCompressMode() behaviour.
	* tester.c: added --compress option
	* doc/*: rebuilt the documentation

Fri Nov 19 18:41:28 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: bugfixing, the damn thing MUST not crash even
	                if given /proc/kcore as input !
	* doc/xml.html doc/*: updated and rebuilt the documentation

Thu Nov 18 14:57:18 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Fixed some wrongly space collapsing code due to
	            a misreading of the spec.
	* result/*: fixed the output accordingly	    

Wed Nov 17 18:28:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* encoding.c: bug fix and typos
	* xmlIO.[ch] parser.c: first bits toward real progressive parsing
	* parser.c: added attribute normalization closing bug #3597
	* test/att* result/att* SAXresult/att*: testcase for attribute
	    normalization

Mon Nov 15 18:50:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: closing bug #3163 by adding extra flags for the
	                cc compiler on HP-UX

Fri Nov 12 17:41:20 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* valid.[ch] : removed a typo and an enumerated type bug in the
	               xmlAddElementDecl() function
	* tree.c : I changed xmlSetProp() and xmlNewProp() to do the
	    call to xmlEncodeEntitiesReentrant() so that the functions 
	    New, Set and Get are at the same level.
	* parser.c HTMLparser.c: extra memory allocation bug for
	    attributes detected by someone using libxml in embedded systems :-)

Thu Oct 28 17:49:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.h: turned off mem debug :-\

Mon Oct 25 12:13:25 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: closed bug #2784 a one line fix, but worth pushing
	            a new release out
	* HTMLparser.c: fixed auto-close bugs on list items, zeroing
	            some structures, comments before and after the
		    main element, and other nastyness
	* HTMLtree.c tree.c: accomodate the extended HTML supported	    
	* configure.in: pushing 1.7.4
	* test/ent8 and related outputs : added a new test for bug #2784
	* test/HTML/wired.html and related output: a nasty HTML example
	* Makefile.am: improved the test scripts
	* docs/* : reran the documentation extractor, updated xml.html

Thu Oct 14 10:29:56 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c, HTMLtree.c, tree.h: completely revamped the
	     HTMLparser and debugged the HTML related code. HTML documents
	     now have their own type
	* entities.c: do not dump &apos; for HTML output
	* xmlmemory.c: improvement, breakpoint mechanism
	* testHTML.c: added --sax --repeat ...
	* Makefile.am: improved the HTML tests
	* valid.[ch]: added xmlValidGetValidElements and
	              xmlValidGetPotentialChildren
	* tester.c: added --insert to test the 2 new functions
	* test//* result//* SAXresult//* : regression test cleanup
	               and extension.
	* doc/html : added doc for new modules gnome-xml-xmlmemory.html and
	             gnome-xml-nanohttp.html

Mon Oct 11 14:31:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: fixed problems with some autoclose tags
	* tree.c: fixed XML output problems. 
	* result/* SAXresult/*: update of the tests output

Sat Oct  9 11:02:57 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am: Arturo patch for xmlConf.sh version info
	* parser.c: Tim Josling patch for single quoted items
	* tester.c: Tim Josling patch for tester options usage
	* tree.h: indent cleanup

Fri Oct  8 16:35:37 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.h : Fixed problems with HTML parsing
	    reported by Kristian Hogsberg Kristensen <hogsberg@daimi.au.dk>

Fri Oct  8 11:37:11 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c : Raph patch for initialization of CORBA fields
	* parser.c, xpath.c, ...: modification of doc comments
	* xpath.c : allow spaces in xpath expressions

Mon Sep 27 10:16:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.h: turning off memory debug :-(

Sun Sep 26 13:16:54 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] : added xmlSAXUserParseFile() and xmlSAXUserParseMemory()
	                better SAX interfaces.
	* testSAX.c: uses the new SAX routine, avoid fetching any remote
	             entity.
	* configure.in: 1.7.2

Fri Sep 24 16:01:01 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: fixed the URL
	* doc/xml.html: improved the documentation front-end

Fri Sep 24 01:06:36 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* nanohttp.c: conditionned references to snprintf with HAVE_SNPRINTF

Fri Sep 24 00:15:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* libxml.spec.in: fixed the alpha compile problem
	* parser.[ch]: changed errno to errNo in the parser context :-(
	* *.[ch]: changed CHAR to xmlChar to avoid problem on WIN32
	* doc/xml.html: changed CHAR to xmlChar
	* doc/html/*: recompiled the documentation
	* configure.in: 1.7.1

Wed Sep 22 11:40:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.h: modified the parser context struct to regain 1.4.0
	            binary compatibility
	* parser.c, xml-error.h: added errno ot teh context and defined
	            a set of errors values with update of errno
	* nanohttp.[ch]: minimalist HTTP front-end for fetching remote
	            DTDs and entities
	* *.h, *.c: complete cleanup of the use of config.h and include
	            protection depending on the current setup.
	* overalll debugging, maintenance and bug-fixing on all modules
	* updated the documentation
	* ready for 1.7.0

Wed Sep  8 22:46:14 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c : cleanup
	* SAX.c valid.c valid.h: added ID/IDREF checking
	* tree.c tree.h: extended doc structure for refs
	* configure.in: 1.6.2
	* parser.c: patched bug in SAX user arg call
	* parserInternals.h: patched missing close in C++ wrapping
	* testXPath.c xpath.c xpath.h: prepared for extensibility,
	  especially upcoming XPointer implementation.
	* doc/xml.html: augmented, typo

Sat Sep  4 22:48:05 CEST 1999 Timur Bakeyev <mc@bat.ru>

	* doc/Makefile.am: replaced "install -d " with "mkinstalldirs" -
	not all invocations of install understand -d.

Sat Sep  4 22:20:07 CEST 1999 Timur Bakeyev <mc@bat.ru>

	* Makefile.am: prepend all the test* calls with $(top_builddir) -
	to make 'check' works, when builddir != srcdir.

Sat Sep  4 20:25:46 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* doc/xml.html : updated the documentation

Fri Sep  3 00:01:08 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xmlmemory.[ch] Makefile.am  :added a memory wrapper to chase
	      not deallocated memory blocks
	* *.c : replaces all calls to malloc() free() and realloc() to
	      the wrapper functions/macros
	* tree.c : removed memory leaks dues to calling xmlFreeNode()
	      instead of xmlFreeNodeList()

Wed Sep  1 14:15:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c: corrected a stupid bug leading to core dump at
	                tree deallocation. Removed warnings indicated by
			Stephane.Conversy@lri.fr
	* entities.c: Fixes Yet Another Stupid Bug, entities were not
	              looked for in the external subset

Mon Aug 30 13:22:26 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c valid.[ch] xpath.c: patched compilation warnings reported
	  on SGI by Stephane.Conversy@lri.fr

Sun Aug 29 22:27:29 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* all .h : changed the prototype declaration indent as in gtk
	* most .c : working on reducing the TODOs in the code
	* most .c : cleanup though -pedantic and Insure++
	* improvements on validation ID checkings.
	* tree.[ch] SAX.c: added support for namespace on attributes #2022
	* xml-config.in: closed #1810

Mon Aug 16 03:27:38 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, valid.c, valid.h: more work on validity, IDs
	* xpath.c: added/fixed comparidon and equlity, added a new isinf
	  definition for AIX

Sun Aug 15 21:15:17 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am libxml.spec.in: corrected missing xmlConf.sh in
	  the distribution due to a cut'n paste error at last commit

Tue Aug 10 20:28:09 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: upgraded to version 1.4.0
	* valid.[ch], SAX.c, parser.[ch] parserInternals.h ...
	  Big update, added a large part of the validation process,
	  it should be usable, but some parts are missing
	* xpath.c: improved the implementation w.r.t. root.
	* Makefile.am: added more tests
	* test and result trees: added a lot of tests
	* libxml.spec.in: export libxml.so.0 and libxml.so.1

Tue Aug 10 11:33:41 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Added an HACKING file

Tue Jul 27 21:43:00 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xpath.[ch] : improvements and debug of the XPath implementation
	* parser.c, HTMLparser.c : modified the parsers to be progressive
	* tree.[ch] : extended the Buffer promitives
	* xmlIO.[ch] : added basic I/O routines providing progressive
	  parsing and ready for I18N conversion plugins
	* SAXresult/* : the SAX callback sequence maybe slightly different
	  now
	* test*.c : improved/updated the tests programs
	* doc/* : recompiled the docs.

1999-07-26  Michael Meeks  <michael@edenproject.org>

	* tree.h: Add const to 'content' in xmlNewDocNode, xmlNewChild

	* tree.c: Ditto.

Thu Jul 15 16:17:16 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: upgraded to version 1.4.0
	* xpath.c, xpath.h, testXPath.c, makefile.am: added code for the XPath
	  draft from W3C. Will be used by XPointer, Xlink, XSL, and possibly
	  XML query language, see http://www.w3.org/TR/xpath for more details.
	* parser.c, parser.h: added CHAR* related string functions for XPath
	* HTMLparser.[ch], HTMLtree.c: a bit of cleanup on entities.
	* doc/gnome-xml.sgml, doc/html/* : added XPath and HTML documentation,
	  rebuild the docs.
	* Makefile.am, test/XPath/*, result/XPath/*: added an XPathtests target
	  and regression testing capabilities for XPath.

Mon Jul 12 12:36:39 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, HTMLparser.c: applied patch from John Ellson <ellson@lucent.com>
	  closing bug #1646

Mon Jul 12 11:04:44 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am, example/Makefile.am: closed bug #1683

Sun Jul 11 18:16:34 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* example/Makefile.am, configure.in: added the makefile for the
	  gjobread example

Sat Jul 10 14:19:11 CEST 1999 Tomasz Kłoczko  <kloczek@pld.org.pl>

	* doc/Makefile.am:
	- fix which allow "make install DESTDIR=</install/prefix>".

Fri Jul  9 12:10:24 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.c parser.c: applied patch from John Ellson <ellson@lucent.com>
	  which fixed a problem on the file reading-code.

Wed Jul  7 09:28:43 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* HTMLparser.[ch], HTMLtree.[ch]: more work for HTML parsing and
	  output.
	* Makefile.am, test/HTML/*, result/HTML/*: added HTMLtests targetestHTMLt

Wed Jul  7 00:25:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.h : Oops removed the binary compatibility problem
	* HTMLparser.[ch], HTMLtree.h : More work on the HTML parse/dump
	* parser.c, HTMLparser.c: applied patches for reading from stdin

Mon Jul  5 18:45:31 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, entities.c, valid.c: cleanup bug #1591
	* configure.in: cleanup bug #1592
	* HTMLparser.[ch], testHTML.c: started adding an HTML parser using
	  the same tree back-end. Hence gdome will be available for it.
	* doc/Makefile.am: close bug #617

Sat Jun 26 23:36:38 EDT 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: alloctate a per parser context SAX interface block

Tue Jun 22 23:46:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* released 1.3.0 with xmlEncodeEntities restoring old behaviour
	  and xmlEncodeEntitiesReentrant with the correct one :-\

Mon Jun 21 14:07:53 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* commit of my internal XML base changes, quite a lot of
	  changes, cleanups, better entities support, framework for
	  new I/O and charset detection and handling
	* Fixed the configure/Makefile stuff to generate shared libs
	  with the proper version info, so we jumped on rev from
	  0.0.0 to 1.2.0 ! The binary interfaces have been broken,
	  xmlEncodeEntities() result need to be freed now, and a string
	  xmlParserVersion provide the current library version.

Tue Jun 15 14:24:19 1999  Raph Levien  <raph@acm.org>

	* parser.c: fixed a buffer overrun for when you have a very long
	attribute with no entities in it.

Mon Jun 14 00:17:50 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* added example directory
	* added example/gjobs.xml gjobread.c, still need a Makefile.in

Wed Jun  2 19:40:58 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Release of libxml-1.1, nearly everything has been touched for
	  this.
	* Added more regression tests
	* Updated the documentation

Sat May 29 13:34:42 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: unified the XML_NO_CORBA defines.
	* parser.c encoding.[ch]: started plugging in char encoding detection

Fri May 28 22:58:42 EDT 1999 Manish Vachharajani <mvachhar@vger.rutgers.edu>

	* tree.c: (xmlSaveFile) - removed double call of xmlContentDump.  
	  Also freed allocated buffer.

Wed Apr 21 22:07:35 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>
	* parser.[ch] tree.[ch] entities.[ch] valid.[ch] : removed the main
	  reentrancy problem at printing. One is left in entities.c, to
	  remove ASAP
	* testSAX.c : added a test example showing the use of the SAX 
	  interface if one doesn't want to build the DOM tree.
	* html/gnome-xml-*.html html/index.sgml: regenerated the documentation

Mon Apr  5 14:14:40 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] tree.[ch] SAX.c, parserInternals.h valid.[ch]:
	  large revamping of the parser to use SAX callbacks
	  http://www.megginson.com/SAX/ (or at least a C like interface
	  a la Expat). It's now possible to set up your own callbacks
	  and the parser will not build a DOM tree.
	* test/* result/*: updated the test suite, I finally removed
	  the old Namespace draft support (PI based).

Fri Apr  2 17:57:32 CEST 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am: added test result to EXTRA_DIST for make tests

Wed Mar 24 21:37:02 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parserInternals.h: moved the chars macro definitions
	  to parserInternals.h
	* parser.c, error.c: applied patches from "Knut Åkesson"
	  <ka@s2.chalmers.se> for clean compilation under MSVC 6 :-o

Tue Mar 23 11:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* xml-config.in : applied patch to make --version work

1999-03-05  Raja R Harinath  <harinath@cs.umn.edu>

	* Makefile.am (check-local): Alias for `tests' target.  This will
	cause `make check' to do the right thing.
	(tests): Don't run tests in srcdir.  Also, replaced calls to
	basename with a `sed' "equivalent".

Fri Mar  5 07:23:53 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Renamed error.h to xml-error.h, corrected Makefile.am to list
	  it in the header and not the sources, updated the doc.
	  Thanks to Tim Mooney <mooney@dogbert.cc.ndsu.nodak.edu> for
	  pointing this out.

Mon Mar  1 13:27:17 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parser.h, parserInternals.h: memory leak hunting,
	  exported the inputStream routines.
	* doc/html/* : updated accordingly

Sun Feb 28 22:51:33 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, parser.h, parserInternals.h: added a few extra
	  internal calls to allocate and free parser contexts ...
	* doc/html/* : updated accordingly

Thu Feb 25 11:52:24 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in, Makefile.am, doc/makefile.am : General changes for
	  1.0.0 release and including the generated HTML documentation.

Thu Feb 25 09:44:52 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* makefile.am : added parserInternals.h, oops.

Mon Feb 22 11:24:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parserInternals.h: added this header giving access to the parser
	  internal functions.
	* doc/Makefile.am : added a rebuild target which rebuilds the full
	  set of documentations
	* parser.[ch] tree.[ch] valid.[ch]: serious updates w.r.t. parsing
	  the internal subset. 
	* *.c *.h: modifications needed to generate the documentation using
	  gtk-doc, cleanup of functions blocks, reorganisation of struct
	  declarations.

Tue Feb 16 17:27:29 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* Makefile.am, spec, doc/Makefile.am : upgrading to 0.99.8, fixing
	  the tar and spec file to include the beginning of the doc.

1999-02-13  Nuno Ferreira  <nmrf@rnl.ist.utl.pt>

	* doc/.cvsignore: Added this file.

Mon Feb  8 19:27:56 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: fixed xmlGetProp to return "" when the attribute
	  exists, even if the node-list is NULL.

Mon Feb  8 16:10:15 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: patched an error outputting empty attribute values.
	* Makefile.am and doc/makefile.am: have been updated during the
	  week-end. Sorry for an empty CVS log, I got a shell problem.

Mon Feb  1 12:10:13 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h: cleaned up using enums instead of defines
	* parser.c, valid.[ch]: more work on parsing/output of element
	  declarations

Sun Jan 31 22:06:48 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* valid.[ch], tree.c, parser.c : more work toward full parsing
	  of XML DTDs.
	* README: added informations about mailing-list and on-line
	  documentation

1999-01-27  Raja R Harinath  <harinath@cs.umn.edu>

	* configure.in (XML_INCLUDEDIR): Use -I not -L for includes.

Sun Jan 17 20:06:36 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, tree.[ch] : more work toward conformance testing,
	  added a last element to accelerate parsing of very flat structures
	  started working on internal subset Element content declaration.
	* valid.[ch] : first cut at adding code toward validation.
	* previous changes had also small impact on most files, especially
	  the conformance testing using James Clark test suite.

Sun Jan 17 14:45:06 CET 1999 Daniel Veillard <Daniel.Veillard@w3.org>

	* test/* : updated the examples, most of them were not well
	           formed (humm), and added rdf2.
	* result/* : resulting changes in the output.

Sun Dec  6 13:06:58 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: changed the behaviour of xmlGetProp on NULL values.

Sat Dec  5 12:25:09 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: patched a bug in the generation of empty attributes

Fri Nov 27 01:36:54 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.[ch], tree.[ch], tester.c: added copy interfaces
	  for node/trees/documents/... Biggest problem is namespace
	  support when copying subtrees.

Sun Nov 15 19:59:47 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, entities.c: improve entities and char ref encoding,
	  and cleanups of error messages.

Fri Nov 13 13:03:10 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c, entities.c: simple bug hunting done during rpm2html and
	  rpmfind integration.

Sun Nov  8 13:11:07 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch]: Added interfaces allowing to specify a SAX
	  handler before parsing.

Sun Nov  8 09:39:17 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: redirrect all errors reporting through the SAX
	  error function

Wed Nov  4 14:21:54 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.c: rather use HAVE_SNPRINTF and not depend on glib
	* libtool, tlmain ...: update of the libtool files

1998-11-04  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* entities.c: Use g_snprintf insteda of snprintf.

Sun Nov  1 14:31:06 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* entities.c, parser.c: debug and cleanup of CharRef handling/saving.
	  added ent5 test for this purpose.
	* parser.c, parser.h: formatting, comments and UTF-8 planning.

Fri Oct 30 01:36:52 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: fixed? a strange error due to compression on a GWP
	  document.

Thu Oct 29 00:48:45 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: bug fixing
	* entities.[ch]: defined a specific type for predefined entities
	* doc/xml.html: more documentation on the library, how to use it,
	  overview of the interfaces.

Wed Oct 28 17:56:35 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.[ch]: more cleanup on the API, made the tree mor conformant.

Tue Oct 27 17:54:00 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c: corrected a small bug
	* doc/xml.html: continuing writing documentation.

Tue Oct 27 17:54:00 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* debugXML.h debugXML.c: added debugging utilities.
	* tester.c: added --debug switch.
	* tree.c: patched an incorrect node->type assignment.
	* parser.c: formatting, ensure that node->doc != NULL in attributes

Tue Oct 27 01:15:39 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.[ch] SAX.c tree.[ch]: large amount of changes to improve
	  entity support and provide an internal representation close to
	  DOM one (entity ref nodes, and attribute value as tree). I tried
	  to preserve the interface but this will surely break some apps
	  (I have to change rpm2html/rpmfind for example). I had to change
	  two interfaces, and the generated tree is somewhat different.
	* doc/* : started documenting the XML library, the tree and
	  DOM/Corba. This is a first step.

Sat Oct 24 14:23:51 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: Set up the fonctions comment block, boring but useful.
	* parser.h, SAX.c, parser.c: now attributes are processed through
	  the SAX interface. The problem is that my SAX interface diverged
	  quite a bit from the original one, well this is not an official
	  spec, and translating it from Java to C is hairy anyway...

Tue Oct 20 02:11:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* SAX.c, entities.c, tree.c, encoding.c, error.c: Set up the
	  fonctions comment block, boring but useful.

Sun Oct 18 20:40:58 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* encoding.[ch], Makefile.am: Added the UTF-8, UTF-16 and ISO Latin 1
	  conversion routines. However they are not yet used to convert the
	  inputs. The core will run with UTF-8.

Sun Oct 18 15:08:19 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c : make sure that the type id is properly set-up when
	  a new object is allocated, needed for DOM.

Sat Oct 17 02:43:21 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, tree.c: Ok, the main objects in the tree will be native
	  corba objects, it costs 8 bytes per Node, Attribute and Document
	  but it simplifies the Corba integration a lot (no extra interface
	  objects to allocate/free).

Tue Oct 13 21:46:57 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.h, tree.c, parser.c: added prev and doc pointers to Node,
	  and changed NODEs contants for conformity with DOM Level 1

Wed Oct  7 23:42:46 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* added hooks to keep track of servants when creating objects
	  xmlDoc and xmlNode (for Corba export).

Sun Oct  4 03:18:09 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* added xml-config script.

Thu Oct  1 16:22:37 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* autogen.sh : applied patch from Frederic Devernay <devernay@istar.fr>
	  to autoupdate libtool and automake conf files.

1998-09-30  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* Makefile.am: Use '?' to separate the sed
	commands as ',' is used when people pass -Wl,something.

Thu Sep 24 15:13:29 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* tree.c, tree.h: added a per-document compression interface.

Tue Sep 22 20:47:38 EDT 1998

	* tree.c, tree.h: added saving with compression and added interfaces
	  to control the compression level (xmlGetCompressMode,
	  xmlSetCompressMode) and a new save to filename function (xmlSaveFile).

Mon Sep 21 20:11:13 EDT 1998 Daniel Veillard <Daniel.Veillard@w3.org>

	* parser.c: corrected a loop for files of size 0

1998-08-20  Raja R Harinath  <harinath@cs.umn.edu>

	* error.h: New file.  Contains prototyes from `error.c'.

Thu Aug 13 19:02:34 1998  Tom Tromey  <tromey@cygnus.com>

	* Makefile.am (xmlincdir): New macro.
	(xmlinc_HEADERS): Renamed from include_HEADERS.

Thu Aug 13 00:40:14 EDT 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* applied small patch on numeric entities from
	  Christopher Blizzard <blizzard@appliedtheory.com>

Wed Aug 12 23:12:58 EDT 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* New release 0.2, removed the old xml_* files so that it's
	    coherent with the other CVS base (W3C), far better conformance
	    to standard, new namespaces, decent entities support, beginning
	    of a SAX-like interface. Nearly nothing left intact, even the
	    test examples ...

1998-07-30  Christopher Blizzard  <blizzard@appliedtheory.com>

	* .cvsignore: Add .deps dir

Sun Jul 26 17:29:52 EDT 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* xml_tree: changed the memory allocation scheme for name in xmlNewNode

Sun Jul 26 00:17:51 EDT 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* configure.in: added test for CPP
	* AUTHORS, Changelog: the original ones didn't get commited but the
	    glib ones instead, fixed.
	* Makefile.am: corrected an error in library naming

Fri Jul 24 16:47:14 1998  Daniel Veillard <Daniel.Veillard@w3.org>

	* integrated code developped at W3C
	* changed the original Copyright
	* migrated to automake
	* prefixed the filenames by xml_ to avoid filename clashes

#
# vim: set enc=utf-8
#
