0.11.3  2026-06-11T06:21:25+12:00
   - Make LibraryMake an optional dependency on Windows
   - Make _private struct accessors $!private in C Structs
   - Refactor SAX callback handling

0.11.2  2026-02-21T10:51:19+13:00
   - Fix removal of OO::Monitors

0.11.1  2026-02-21T10:16:38+13:00
   - Remove use of OO::Monitors from LibXML::Config. Better protect r/w
     accessors in LibXML::Config.
   - Replace custom implementation of have-reader(), have-writer(), have-schema(),
     have-threads(), have-compression() and have-iconv() with use of xmlHaveFeatures().

0.11.0  2026-02-03T06:34:40+13:00
   - Added LibXML::Document document-properties() method.
   - Adjust "size of" tests to from strict equality to less than or equal
     to #118. This generally seems more robust for forward compatibility
     and/or package maintainer extensions.
   - Fix compression in libxml2 v2.15+, which requires the new :unzip
     parser option. Also change xmlParserCtxt new() method call from
     xmlCreateFileParserCtxt() to xmlCreateURLParserCtxt(). The latter
     correctly initializes input handlers when compression is needed. 

0.10.20  2026-01-31T08:54:11+13:00
   - Use preset compilation options when gcc detected #118

0.10.19  2026-01-08T07:17:06+13:00
   - Silence some more unused variable warnings/errors in C compilation
     #117

0.10.18  2026-01-07T09:56:37+13:00
   - Add LibXML::Document.new(:$root) option
   - Silence some unused variable warnings/errors in C compilation #117
   - Further tweak SAX initialization

0.10.17  2025-09-01T10:25:04+12:00
   - Further adjust #116 to work on Windows

0.10.16  2025-09-01T08:34:40+12:00
   - Further bed down fix #116 to ensure forward compatibility with
     libxml v2.10.0+ releases.

0.10.15  2025-09-01T07:14:41+12:00
   - Fix error-handling to handle updates to suppress-warnings()
     and suppress-errors() attributes. Issue introduced in 0.10.12
   - Fix SAX handler initialization for Debian libxml2 2.9.14
     security patches #116.

0.10.14  2025-06-09T08:30:57+12:00
   - Partially handle Dtd's in document ast(). Inline Dtd
     declarations are not handled yet.
   - Fix creation of stand-alone processing instructions; this also
     fixes ast() method on documents with processing instructions

0.10.13  2024-11-26T07:32:08+13:00
   - Fix failing libxml v2.14+ test in t/00dtd.t

0.10.12  2024-11-26T06:56:59+13:00
   - Filter suppressed errors and warnings early for improved error
     handling performance #115
   - Provide a domNodeSetAtPos() binding. Avoid direct access to
     xmlNodeSet C struct NodeTab field.
   - Re-enable local error handling for libxml 2.14, which resolves
     https://gitlab.gnome.org/GNOME/libxml2/-/issues/808.
   - Fix Dtd IO error handling by promoting some libxml2 warnings to errors.
   - Create t/META6.json for test suite modules and rename test modules
     from *.pm6 to *.rakumod
   - Remove internal class LibXML::HashMap::NodeSet, which is equivalent
     to LibXML::HashMap.^parameterize(LibXML::Node::Set)

0.10.11  2024-11-05T09:21:51+13:00
   - Disable local error handling for libxml2 2.13 Dtd parsing. Waiting
     on https://gitlab.gnome.org/GNOME/libxml2/-/issues/808

0.10.10  2024-11-05T07:31:45+13:00
   - Deprecate LibXML::Document input-compressed() which has proven to
     be inconsistent across libxml2 versions and platforms.
   - Fix initialization in Lib:XML::ErrorHandling.set-error-handling()
   - Rework DocumentFragment balanced chunk parsing for pending libxml
     2.14+ implementation. Remove deprecated xmlKeepBlanksGlobal from
     xml6 bindings.
   - Fix some libxml 2.14+ test regressions and deprecation warnings
     in xml6 bindings.
   - Fix xmlBufCreate() to require a 'size' argument.
   - Refactor LibXML::_CharacterData string manipulation methods
   - Structure LibXML::DocumentFragment parse() method as multis;
     making it consistent with LibXML::Parser

0.10.9  2024-06-02T11:28:45+12:00
   - Deprecation of xmlLastError() global variable #111
   - Implement context-specific error handlers to be switched on with libxml
     2.13.0+ #111. There's still some more libxml support needed in areas
     such as Dtd and balanced chunk parsing.
   - Don't reference-count static predefined entities ('&gt;', '&lt', etc).
   - Fix reference-counting in associative node-sets and some Dtd internal
     tables #112
   - Fix stack leakage/eventual overflow in input-callback set-up/tear-down.
   - Deprecate AddChild() for LibXML::Attr;

0.10.8  2024-05-17T07:29:02+12:00
   - Fix flapping t/00dtd.t test #111

0.10.7  2024-05-14T11:18:11+12:00
   - Fix compilation against libxml2 v2.12.6 #111
   - Fix Windows install
   - Further expunge _xmlDefaultSAXLocator definitions

0.10.6  2023-10-31T05:46:03+13:00
   - Remove references to deprecated _xmlDefaultSAXLocator #108
   - Save HTML as HTML, not XHTML due to issues in browsers handling
     CDATA blocks #109

0.10.5  2023-08-28T08:51:47+12:00
   - Simplify generic error handling. Replace unnecessary Raku-side
     format string processing with vnsprintf() in C wrapper code.
     Fixes #107

0.10.4  2023-06-22T06:21:36+12:00
   - Add file-level locking to Windows DLL installation
   - Add ability to accept pre-existing xmlXPathContext to
     LibXML::XPath::Context PR #105

0.10.3  2023-05-31T15:45:47+12:00
   - Fix handling of name-space objects in C bindings; Eliminate
     some valgrind warnings.

0.10.2  2023-04-13T08:33:33+12:00
   - Fix clearNamespace() method

0.10.1  2023-03-30T08:15:47+13:00
   - Fix segfault in LibXML::Reader.new(:$file) on non-existent file
   - Consistently use $config.class-from() in ast-to-xml()

0.10.0  2023-03-06T06:15:27+13:00
   - Make LibXML::Item use :config for boxing (#97)
     Any config supplied by upstream was previously ignored and class mapping
     was expected to be done by `LibXML::Node`. This resulted in limited
     abilities of user code in controlling how boxing is done. See #94.
       Note that `LibXML::Node` still does its own class mapping because this
     is the point of final decision and in many cases it is invoked directly.
   - Added config attribute `with-cache` (#102). This defines whether
     simple caching based on node's `unique-key` should be used.
   - Fixed LibXML::EntityRef DOM class (#99). Remove local $.raw attribute
     and base it on LibXML::_Rawish. Like other node types.
   - Refactors:
     -- LibXML::Raw composition of xmlNode and xmlNs classes. These
        are now composed via the domNode parameterized role.
     -- Rename try() method to do() in various contexts, including
        parsing and validation.
     -- fix some types in bindings parameters and return types. Mostly,
        xmlNode -> anyNode,

0.9.10  2023-02-20T08:10:13+13:00
   - Lessen impact of #95 (.raku method handing). Override LibXML::Node:D
     raku() to call LibXML::Node:U raku().
   - Add intermediate domNode() role. This eases class composition
     and bypasses the need to nativecast raw nodes, when the type
     is known in advance. E.g. getElementsByTagName() is about
     25% faster.
   - Further optimize LibXML::Node::Set by nativecasting a CArray
     as a whole to the container type, rather than casting individual
     members.
   - Add elementIndex() method to LibXML::Element. After invoking
     doc.indexElements(), this returns distinct element numbers,
     with the root element having value 1.
   - Change xmlElement content() access to return a string. This
     is where the element-index (above) is stored.
   - Lock-protect error handling.

0.9.9  2023-02-10T08:23:28+13:00
   - Enable threading in libxml.dll resource for Windows.
     However, LibXML::Config.parser-locking now defaults to True on
     Windows due to unresolved failures in 90threads.t
   - Regress against latest libxml2 blead.
     -- adjust 35huge_mode.t and 60err_prev_chain.t for changes in
        some limits;
     -- xmlElem struct size has changed! Affected tail members of the
        struct have been made private and t/00native.t has been fixed.
   - Build.pm6 -I <include-path> now works on non-Windows platforms
   - Add LibXML::Config.have-iconv method to detect if libxml was built
     with the inconv library for Unicode encoding and decoding
   - Fix some tests to skip for the right reasons; that the library
     was built without iconv or compression, rather than we're running
     under Windows.

0.9.8  2023-02-08T09:09:26+13:00
   - Fix more xmlMalloc() not paired with xmlFree()
   - Block parse(:$io) from running on Windows. I don't think it's
     ever worked and may crash.
   - Add CStruct size tests to t/00native.t

0.9.7  2023-02-07T07:58:24+13:00
   - Implement DLL name demangling to fix installation on Windows #66

0.9.6  2023-02-04T21:04:27+13:00
   - Update prebuilt xml6.dll on Windows
   - Fix mixed use of alloc() & xmlMalloc(). Ensure objects created via
     xmlMalloc() are freed via xmlFree().

0.9.5  2023-02-03T07:52:04+13:00
   - Fix de-ASTfication of the default (xmlns) namespace PR #92 vrurg++
   - Fix xmlBuffer32 and xmlBuf to work with binary data
   - Fix return values on xml6_sax_locator_set_{getPublicId|getSystemId}
   - Refactor of LibXML::_Options get-option() and set-option() methods

0.9.4  2023-01-19T06:26:19+13:00
   - Deprecate HTML serialization via htmlDoc.dump() method in
     favour of xml6_node_to_buf(), which uses xmlSaveTree().
   - Added node method isHTMLish().  This is used to default
     the :$html option in Str() and Blob() methods.

0.9.3  2023-01-15T06:20:09+13:00
   - Add :%attribs argument to startElementNs() SAX handler

0.9.2  2022-12-02T10:49:43+13:00
   - Fix valgrind errors in xmlEncodingStr subset.
   - Remove references to DocBook (DOCB). Not used in the Raku bindings,
     deprecated in libxml2, and causing compilation warnings.

0.9.1  2022-11-10T13:48:54+13:00
   - Fix LibXML::XPath::Context get-value() for LibXSLT

0.9.0  2022-08-18T06:01:31+12:00
   - Simplify subclassing in complex cases
     This can now be done by inheriting from `LibXML::Config` and adding
     a custom `class-from` method. See t/00subclass.t

0.8.1  2022-08-15T10:53:29+12:00
   - Fix installation v0.8 api installation #84

0.8.0  2022-08-15T09:36:08+12:00
   - Improved encapsulation and inheritability
     -- Provide ways of overriding default classes with user-provided children
        on per-parser (per-document) base.
     -- Implement common config object across all elements of the same document.
     -- Replace CPointer classes with P6opaque
     -- Introduce dedicated exception classes
   - Add `api` key to META6 and LibXML metadata. Add test xt/release/version.t
     this ensures that x.y.0 <= api <= x.y.z, when x.y.z is the current version.

0.7.10  2022-06-28T07:33:30+12:00
   - Fix error handling in SAX callbacks. These are now trapped by
     LibXML::ErrorHandler. Note that exceptions in SAX callbacks now
     halt parsing unless `recover` has been set.
   - Also fix error handling in XPath evaluations. Exceptions were
     incidentally failing by causing stack errors (1223).
   - Define some newly added XPath error codes in LibXML::Enums,
     including 1223 (XML_XPATH_STACK_ERROR)
   - Use generic error-handler in XPath expressions anyway; structured
     errors are geared more towards parsing.
   - More minor optimizations of DOM methods

0.7.9  2022-06-22T07:57:17+12:00
   - Optimize resolve-package for a significant speedup #79

0.7.8  2022-06-20T15:15:05+12:00
   - Remove memory leaks
     -- Fix anyNode Str() method leak, by basing it on $node.Blob #77
     -- Add LibXML::Raw AllocedStr class for pointers to strings that need to be freed #78
     -- Add xml6_gbl_cache() to mimimise leaks on repetitive data (e.g. tag-names) #78
   - Created xml6_gbl module to house most of the xml6_gbl_* subroutines

0.7.7  2022-06-13T10:47:07+12:00
   - Update prebuilt xml6.dll on Windows

0.7.6  2022-06-13T06:51:41+12:00
   - Handle NULL in xml6_gbl_restore_error_handlers(). This could happen if
     an exception occurred before error handlers have been set-up.

0.7.5  2022-06-12T08:27:39+12:00
   - LibXML::Config
     -- More documentation, checks and protection
     -- Correct handling of &external-entity-loader, which is a true
        global in libxml2; make it similar to input-callbacks 
     -- Detect and warn on OS thread change.
   - xml6_gbl.c: use longer accessor sub names for thread-scoped accessors,
     e.g. xml6_gbl_os_thread_get_tag_expansion()

0.7.4  2022-06-03T12:33:17+12:00
    #13 we can't rely on Raku threads maintaining an association with LibXML
    global variables which are scoped to OS threads. This release locally
    re-initializes settings whenever they are used.
    - Avoid side effects from changing LibXML::Config settings. This now just
      holds the settings, until the new setup() method is called to apply them.
      The new restore() method can be called later to restore original settings.
    - Parsing, validation and XPath contexts now call setup() to apply the
      global setting locally and restore() to clean up afterwards..

0.7.3  2022-05-30T07:38:33+12:00
    - Minor threading fixes
    - Fix DocumentFragment DESTROY cleanup

0.7.2  2022-05-06T06:48:46+12:00
    - Remove further locks to allow multi-threading in validation and
      XPath queries.

0.7.1  2022-05-05T07:05:24+12:00
    - Update Windows binary (resources\libraries\xml6.dll)
    - Don't allow mutation of active LibXML::InputCallback objects.
    - Fix handling of LibXML::Config:U parser-locking when True.

0.7.0  2022-05-04T07:50:06+12:00
    - Remove parser lock in most cases to allow concurrent parsing.
    - Use of parser-specific input-callbacks is not thread-safe. The
      LibXML::Config:U parser-locking flag has been introduced to this
      or any other potential thread-safety issues with parsing. Setting it
      restores the old locking behaviour.

0.6.16  2022-04-28T08:15:40+12:00
    - Support for multiple configurations. Added the LibXML::_Configurable role, with
      $.config attribute to various parsing, validation and reading contexts.
      Replace internal referencing of global configuration in DOM classes with
      parameters. For example the document processXIncludes() method now accepts
      a :$config parameter.

0.6.15  2022-04-26T06:00:31+12:00
    - Replace LibXML::HashMap::Maker with LibXML::HashMap::NodeSet.
    - Further thread safety improvements, including bare uses of
      'require' and use of the $!hstore attribute in LibXML::Node:Set
      and LibXML::Node::List.

0.6.14  2022-04-07T14:39:40+12:00
    - Fixed thread safety issues in catalog and class loading - vrurg++

0.6.13  2022-04-01T11:04:54+13:00
    - Fix LibXSLT broken in 0.6.11 by the withdrawal of xml6_gbl_message_func()
      external symbol. Replaced by LibXML::ErrorHandling :&set-generic-error-handler
      exported sub.

0.6.12  2022-03-31T17:06:34+13:00
    - Add LibXML::Raw::CLib module. To encapsulate existing use of memcpy
      and free
    - move release repository from CPAN to zef ecosystem

0.6.11  2022-01-22T16:18:22+13:00
    - Add LibXML::_Validator role. Performed by LibXML::{Dtd|Schema|RelaxNG}
    - Add Windows support. This module pre-builds the binding library
      (xml6) and installs a copy of libxml.dll.

0.6.10  2021-10-30T06:00:36+13:00
    - Fix LibXML::Parser options setup and etc/benchmark.raku core-dump #64

0.6.9  2021-09-20T11:21:08+12:00
    - Move @ClassMap from LibXML::Item to LibXML::Config and change it
      from a constant to an 'our' scoped variable. Tweak the box-class()
      sub in LibXML::Item to better support subclassing - see t/00subclass.t
    - baseURI() now defaults to the document URI().

0.6.8  2021-08-27T15:35:11+12:00
    Conformance to W3C::DOM 0.0.3:
    - Default to DOM style createDocument() unless the first argument is defined
      and matches /^\d'.'\d$/, i.e. it's an XML version string.
    - Provide a cloneNode($deep) multi candidate.
    - Add a LibXML::Text splitText() DOM method
    - Rename role LibXML::_StringyNode to LibXML::_CharacterData. Base it
      squarely on the W3C DOM CharacterData abstract role.

0.6.7  2021-08-24T08:14:25+12:00
    - protect all parse and validation contexts. These require global
      state setup and are not reentrant or thread-safe.

0.6.6  2021-08-23T13:10:48+12:00
    - Complete porting of t/90threads.t from Perl. This involved adding:
      -- protection locks in setup and finalization stages in
         parsing and validation contexts.
      -- protection locks to push parser methods in LibXML:Parser
    - Add maximum error limit of 100 #61. Configurable via XML::Config.max-errors().
    - Fix LibXML::Text to do the W3C::DOM::Text role
    - Factor tests into subtests. Remove most 'TODO' test descriptions.

0.6.5  2021-07-15T13:05:19+12:00
    - Fix for #60 type check error on reader values. Reader name() return
      value was erroneously constrained to QName, whereas return value
      could also be '#text', '#comment', etc. Relaxed to Str. Similar
      fix to localName() method to return Str instead of NCName.
    - Work in with LibXML's handling of missing element Declarations. If a
      <!ATTLIST...> is seen without a corresponding <!ELEMENT...> declaration,
      LibXML creates a place-holder record with `etype` 0 (undefined). Change
      LibXML::Dtd::ElementDecl to no longer box and return these.

0.6.4  2021-07-14T16:12:56+12:00
    - Add associative methods to LibXML::Dtd::ElementDecl, including keys(),
      values(), pairs(), AT-KEY)() and Hash

0.6.3  2021-06-17T11:25:31+12:00
    - Fixed t/02parser.t segfault on Rakudo 2020.05.1 introduced in 0.6.1 #59
    - Fixed node over-visitation in reference checking #58
    - Revised document Str and Buf method. :skip-dtd option to copy then
      update the document rather than mutating it.

0.6.2  2021-06-16T13:57:49+12:00
    - Remove entity reference content when a DtD is unlinked
    - Make it illegal to add declaration nodes to the general DOM
    - Add $elem.validate() and $elem.is-valid() methods

0.6.1  2021-06-14T13:16:33+12:00
    - Improved Dtd Handling #30
      -- Added raw class xmlNotation,
      -- Added API class LibXML::Dtd::Notation
      -- Added LibXML::Dtd methods:
         --- notations() entities(), element-declarations(), attribute-declarations()
             getNotation(), getEntity(), getElementDeclaration(),
             getAttrDeclaration(), getNodeDeclaration()
      -- Changed LibXML::Dtd repr from 'CStruct' to default, so that it may
         contain additional attributes.
      -- Rename classes:
         --- LibXML::Dtd::Attr -> LibXML::Dtd::AttrDecl and
         --- LibXML::Dtd::Element -> LibXML::Dtd::ElementDecl
         --- LibXML::Entity -> LibXML::Dtd::Entity
      -- Add  LibXML::Dtd elements() method
    - Removed some module loading work-arounds for Rakudo < 2019.03
    - Fixed memory leaks in $doc.setDocumentElement and document parse failure #55
    - Fixed segfault in unlinking DtD #56
    - Fixed valgrind errors in t/07dtd.t. Specifically, $doc.replaceChild($dtd), which
      should be a no-op.
    - Fix GC on entities. Don't attempt to free predefined entities.

0.6.0  2021-05-29T09:37:12+12:00
    - Fix attribute isId() method to return Bool, as documented.
    - Integration with W3C::DOM interface roles:
      -- Implementation: add createDocumentType(), hasFeature()
      -- Attr: add specified() [NYI]
      -- Node: add isSupported(), localName()
      -- Moved attributes() and hasAttributes from Element to Node
      -- NamedNodeMap: add length() method
      -- CDATASection: add splitText() [NYI]
      -- DocumentType: add entities(), notations() internalSubset [all NYI]
      -- Entity: add publicId(), systemId() and notationName() methods
      -- ProcessingInstruction: add data() method
      -- Text: add splitText() method [NYI]
    - Fixes to DtD handling #54:
      -- $doc.setExternalSubset no longer removes internal subset
      -- Reimplement $doc.setInternalSubset using xmlCreateInSubset().
         $doc.raw.setInternalSubset keeps the old behaviour

0.5.15  2021-02-24T09:45:59+13:00
    - Exported disused and bit rotted etc/libxml2-api.xml, etc/LibXML and
      etc/generator.raku to https://github.com/libxml-raku/LibXML-Raw-Gen-raku
      #51
    - Fix for dependency on latest XML #52. Replace references to
      <XML::Grammar::pident>, which (rightfully) no longer exists, with
      <XML::Grammar::name>. Detect namespaces after parsing.

0.5.14 2020-12-27
    - Fix circa Rakudo 2019.11 04node.t regression #50
0.5.13 2020-12-23
    - Fix return type of xmlSAXLocation getPublicId and getSystemId methods
    - Fix LibXML::SAX::Builder entityDecl() method
    - Add LibXML::SAX::Handler:SAX2 base methods for externalSubset(),
      internalSubSet(), processingInstruction(), cdataBlock(),
      elementDecl(), entityDecl(), notationDecl(), reference(),
      comment(), unparsedEntityDecl(), and attributeDecl()
    - Die if any of the remaining unimplemented callbacks are invoked:
      getParameterEntity(), hasExternalSubset(), hasInternalSubset(),
      ignorableWhitespace()
    - More performance improvements
0.5.12 2020-12-19
    - Various performance improvments #49
0.5.11 2020-11-18
    - Fix breakage on Rakudo 2020.10+ blead #48
    - Add native xml6_config:: module
0.5.10 2020-10-16
    - Add LibXML::Dict see() and seen() methods.
    - Fix compiler warnings in dom.c
    - Fix childNode() regression #47 (unbreak Spreadsheet::XLSX)
0.5.9 2020-08-17
    - Add $node.isBlank() method; mapped to raw xmlIsBlankNode() method.
    - Fix LibXML::DocumentFragment parse() error handling to return structured
      X::LibXML::Parser exceptions; similar to LibXML::Parser.
0.5.8 2020-08-07
    - Add :%ns option to node find(), find-nodes(), find-value(), exists(),
      xpath-context(), and xpath context new() method.
0.5.7 2020-08-06
    - Indicate position of parsing errors (Perl port) #15
    - Hide reader op() methods from backtrace
    - Make it illegal to move a DTD owned by one document into another.
      This prevents the subsequent memory management and valgrind errors
      noted in #35. A cloned copy of the Dtd can be inserted:
          $to-doc.setInternalSubset: $from-doc.getInternalSubset.clone();
0.5.6 2020-07-13
    - Hide validate() methods from backtrace
    - Tweak multi candidate parse(_U:) and parse($) candidates to
      ensure all options are processed by the parser.
0.5.5 2020-07-07
    - Changed LibXML::HashMap node handling:
      -- Store nodes directly; avoid coercement to node-sets
      -- Remove XPathDomain subset (now the same as XPathRange)
0.5.4 2020-07-04
    - Add live object metrics to 11memory.t.
    - Add LibXML::Parser::Context.publish() method with early
      destruction of xmlParserCtxt objects. Reduce number of live
      objects and memory usage #45
0.5.3 2020-07-02
    - Add LibXML::HashMap; bindings to xmlHashTable.
    - Use it for node lists and sets associative interfaces #43
    - Fix double referencing of node-set elements #44
0.5.2 2020-06-18
    - Fix #42 .parent() on root element dying
0.5.1 2020-06-18
    - Fix #41 getElementsByXxxx() order scrambling (broken in 0.5.0)
0.5.0 2020-06-17
    - #36 fixed install failure / Dtd premature free issue
    - #38 Performance improvements and bench-marking
      -- Convert node and XPath object classes to CPointer representations. This
         allows for faster lower-memory thrifty stantation of objects via nativecast.
      -- .native() methods and options have globally renamed to .raw() ('native' no longer
          makes sense as both the inner [CStruct] and outer [CPointer] classes are both
          native variants).
      -- Optimised the getElementsByXxx() DOM methods. Changed from using XPath searches
        to custom binding functions [dom.c]
      -- Fixed thread-safety of LibXML::Node::List and LibXML::Node::Set iterators (see
         also https://github.com/Raku/doc/issues/3477)
0.4.0 2020-05-21
    - Fix $node.getOwner() method to return the root of the
      current node. Distinguish it from .getOwnerDocument
      which always returns a LibXML::Document object.
    - Fix $node.replace() method to work on the root element
    - Overhaul of Pod documentation.
    - Rename .Str(), .Blob() options; :expand -> :tag-expansion,
      :skip-decl -> :skip-xml-declaration. Make them consistant
      with configuration defaults.
    - Implemented $node.last(:!blank) option
    - renamed role LibXML::_DOMNode -> LibXML::_ParentRole
    - Added 'dom-native' trait for native wrapping of simple methods
    - DOM method appendTextChild now returns the added element
    - Fix for #36 - failing close() count tests (due to erratic
      calling of close callback)
    - Rename config methods: keep-blanks-default() -> keep-blanks(),
      default-parser-flags() -> parser-flags()
    - Issue#37 fix mixup between XmlStandaloneYes and XmlStandaloneNo
0.3.1 2020-04-29
    - Add $node.ACCEPTS() method for XPath matching, e.g.:
      'self::foo' ~~ $node
    - renamed github project p6-xml -> libxml-raku
    - moved directory doc/ -> docs/
0.3.0 2020-02-08
    - Rename module source files *.pm6 -> *.rakumod
0.2.7 2020-01-14
    - [LibXML::Native] - Fixes to 'rw-ptr' and 'rw-str' for Rakudo 2019.11+ Blead
0.2.6 2019-12-13
    - Replaces references to Perl with Raku
    - This includes LICENSE sections of 'Perl' with 'Artistic'. Replace
      LICENSE file with a more recent version of the Artistic license.
    - Fixes for Rakudo 2018.10
0.2.4 2019-12-08
    - [xml6_gbl.c]
      Add xml6_gbl_save_error_handlers() and xml6_gbl_restore_error_handlers().
    - [LibXML::XPath::Context]
      -- save/restore error handlers
    - [LibXML::ErrorHandling][LibXML::Reader][LibXML::Schema][LibXML::RelaxNG]
      -- save/restore error handlers
      -- Replace X::LibXML::Reader::OpFail with X::LibXML::OpFail. Fix usage
         in schema and relax-ng.
    - [LibXML::{Pattern|Dtd|Schema|RelaxNg|RegExp}]
      -- Added ACCEPTS() multi methods for more Rakuish matching, e.g.:
          $node ~~ $pattern; $doc ~~ $dtd; "abc" ~~ $regexp
    - [t/26schema.t][t/43options.t] fix tests that were accessing the network #32
      (were failing when http/https was not available).
0.2.3 2019-12-05
    - [dom.c][LibXML::Node] take out case conversion from domXPathGetKey()
      .xpath-key() to match case handling semantics. tags are converted to
      lowercase on :html parse, but retain case when from the API.
      XPath searches then need to match the case (see 12html.t).
    - [LibXML::_Options] fix compilation on Rakudo 2018.07
0.2.2 2019-11-29
    - [domXPath] fixed reference counting in domPushNodeSet() #29
    - [LibXML::ErrorHandling][LibXML::SAX::Builder]
      -- Changed the SAX `serror($err)` callback argument from an native `xmlError`
         structure to a `X::LibXML` exception object.
      -- Fixed SAX Handler dispatch of Raku callback raised exceptions #31
   - Rename classes LibXML::AttrDecl -> LibXML::Dtd::Attr, LibXML::ElementDecl
     -> LibXML::Dtd::Element; work in progress on #30
0.2.1 2019-11-27
    - [dom.c] Split-off domASTKey() and domXPathKey() functions from domNodeName().
    - [LibXML::Node]
      -- revert .nodeName(), 0.1.9 changes; restore to DOM compliant names:
         #cdata => #data-section, #fragment' => #document-fragment,
         #xml|#html|#docb => #document
      -- instead, introduce new method .ast-key() which returns short-forms:
         (#cdata, #fragment, #xml, #html, #doc) for AST construction.
      -- from-ast() now accepts all of the above (i.e.. #cdata, or #cdata-section;
         #document or #xml, #fragment, or #document-fragment)
0.2.0 2019-11-26
    - [LibXML::Native][LibXML::Config] really disable network access this time.
      Started, but not completed properly in release 0.1.0.
    - [LibXML::Schema] Disable network loading of `xsd:import` statements by
      default. These can be enabled via the :network flag. Further control is
      then possible by setting up custom entity loaders and/or input callbacks.
0.1.12 2019-11-23
    - [doc][META6.json] Replace 'Perl 6' with 'Raku'
    - [LibXML::_Options] fix options parsing, broken in 0.1.11
0.1.11 2019-11-22
    - [LibXML::Node::Set] add .reverse() method
    - [LibXML::Namespace] bug-fix to .unique-key() method
    - [dom.c] fix handling of DTD nodes as arguments to domAppendChild(),
      domReplaceChild(), domInsertBefore(), domReplaceNode() and domAddSibling()
    - [LibXML::Parser][LibXML::_Options] tweak options processing
0.1.10 2019-11-20
    - [LibXML::Find::Context] fix memory leaks in .find() and .findnodes(). Fix
      find() so it now iterates on node sets e.g.: for $e.find { ... }
0.1.9 2019-11-07
    New AST construction mode:
    - [LibXML::Item] add ast-to-xml() - for succint construction of nodes from data
    - [LibXML::PI] nodeName() method now prepends '?'
    - [LibXML::CData] - nodeName shortened from '#cdata-section' to '#cdata'
    - [LibXML::Node]
      -- getElementsByTag name can now select '?pi-name', '?*', '@*' 
      -- added .ast() method
    'Pluggable' CSS Selectors:
    - [LibXML::XPath::Context] Implement querySelector() and querySelectorAll()
      methods. Can be delegated CSS::Selector::To::XPath (or similar)
    Issues:
    - [LibXML::Item] #27 improved class loading in box-class()
0.1.8 2019-11-03
    - [LibXML::Node][LibXML::XPath::Context] Added:
      -- $node.first($xpath) and $node.last($xpath) multi-methods
      -- $node.elements() and .text() methods
      -- $.children(:!blank) option
    - [LibXML::Item] $.isSameNode() method now allows comparisons between
      nodes and namespaces (always False for defined values)
    - [dom.c] add domUniqueKey(), domIsSameNode()
    - [xml6_ns.c] add xml6_ns_unique_key()
0.1.7 2019-10-29
    - [LibXML::Node::List] add AT-KEY method
    - [LibXML::XPath::Context] recover queries when a result is returned;
      die otherwise. Matches behavious of Perl 5 module.
    - [LibXML::Native::Defs] changed constants to variables: XML2, BIND-XML2, CLIB
      Just to make it easier to override them if needed:
      use LibXML::Native::Defs :$XML2; $XML2 = "/someother-path/file.so"
0.1.6 2019-10-21
    - Replace class LibXML::ErrorHandler with role LibXML::ErrorHandling. Fixes #24.
    - [LibXML::DocumentFragment]. Add subclass ParserContext. Use it to
      bundle various parameters. Tidier and hopefully fixes some memory
      leaks from closures in native callbacks
0.1.5 2019-10-18
    - Added $node.findnodes :deref option. Use it in the call from
      the .AT-KEY() method. This changes:
          '$node<species><species/humps>' to a more natural:
          '$node<species><humps>'
0.1.4 2019-10-14
    - [src/dom.c] return HTML xpath keys as lowercase; make them case-insensitive.
0.1.3 2019-10-13
    - [LibXML::Node][LibXML::Node::Set][LibXML::Node::List]
      -- add .xpath-key() method; returns a key that can be used to
        refetch the node in an xpath expression. e.g.
        'comment-node()' for comment nodes.
      -- use .xpath-key() to compute Hash keys. This leads to a
         more natural round-trip, but does change some fixed keys.
         E.g. $elem<#text> is now $elem<text()>
0.1.2 2019-10-12
    - [LibXML::DocumentFragment] make .parse() method consistant with LibXML::Document
      -- allow .parse() as a class-level method.
      -- return the document fragment (not an integer status)
      -- rename :repair option to :recover
    - [LibXML::Node::Set][LibXML::Node::List] modify .Str() method to return a
      concatonation of nodes. This can be reparsed as a document fragment
    - [LibXML::Node] add .cononicalize() method for c14n serialization (borrowed
      from libxml-ruby bindings)
0.1.1 2019-10-06
    - [LibXML][LibXML;:Config] add .config-version method; this is the version of
      libxml2 that the module was configured and built against.
    - [LibXML::Node::Set][LibXML::Node::List] - add .first() and .tail() methods
    - [LibXML::Native][LibXML::ErrorHandler]
      -- add xml6_gbl_message_func() - a native wrapper for marshalling formatted
         string arguments from varargs
      -- remove LibXML::Native.GenericErrorFunc() method
      -- replace with LibXML::ErrorHandler.SetGenericErrorFunc(), which uses
         xml6_gbl_message_func() for constructing string format arguments.
0.1.0 2019-09-27
    - [LibXML::Parser] More secure default parser options. #23
      -- The parser defaults `network` and `expand-entities` have been changed from
         True to False.  This is partially in reponse to an equivalent ticket for
         the Perl 5 XML::LibXML module https://rt.cpan.org/Public/Bug/Display.html?id=118032
      -- Document the `dtd` parser option as a quick way of setting up these options in
         a secure and trusted environment and restoring Perl 5 XML::LibXML like access.
0.0.9 2019-09-23
    - [LibXML::ErrorHandler improvements for LibXSLT:
      -- catch input handler exceptions
      -- alllow for multiple '%s' arguments in generic errors
      -- display multiple errors
    - [LibXML::XPATH::Context] fixed object GC #22. Added $*XPATH-CONTEXT
    - Ported XML::XPath tests to xt/xpath/. Added methods for improved
      compatibility with  XML::XPath and XML modules:
      -- [LibXML::Element] add .attribs() [alias for .attributes()]
      -- [LibXML::Node] added:
         --- .nodes() method [alias for .childNodes()]
         --- .gist() method [alias for .Str()]
      -- [LibXML::Node::Set] added .is-equiv() method
      -- [LibXML::Text] add .text() [alias for data]
0.0.8 2019-09-17
    - [LibXML::Parser::Context] fixed object GC #21. Added $*XML-CONTEXT
      dynamic variable.
0.0.7 2019-09-13
    - [LibXML::SAX::Handler::SAX2]
      -- replace .finish method with .publish
      -- Add error handling callbacks: .warning, .error, fatalError, serror
    - [LibXML::Parser] combine with [LibXML].
0.0.6 2019-09-10
    - [LibXML::Native] Change cglobals from constants to subs (avoid compilation failures #16)
    - [LibXML::Native::Defs] rename library constants LIB -> XML2, BIND-LIB -> BIND-XML2; add CLIB for windows.
0.0.5 2019-09-08
    - [LibXML::Reader]
      -- fix get/set of parser options #20
      -- implement .setParserProp method
    - [LibXML::XPath:::Context] - imnproved error handling
    - reduced displayed errors in test suite #19
0.0.4 2019-09-06
    - [LibXML::Node] remove custom native accessor
    - drop min supported libxml version from v2.09.00 to v2.08.00
    - skip too successful 'comment' test for open issue #18 (segfaulting)
0.0.3 2019-09-05
    - [src/xml6_ref.6] fix 'uint' compilation error #16
    - [META6.json] fix source URL #17
0.0.2 2019-09-04
    - [LibXML::Node] adopt LibXML::Element associative interface. Fix
      handling of '#text', '#comment' and '#cdata' DOM classes (which
      can be returned by the .keys method).
    - [LibXML::Node::List] optimisations to .AT-POS method
    - [LibXML::Node::Set] rename .push method to .add
    - [LibXML::Reader] add missing :!network option. Fix unintended
      network fetch of an external Dtd in 40reader_mem_error.t
0.0.1 2019-09-03
    Initial release
