Changes 0.14 -> 0.15
--------------------

  xmerl_scan
  ----------

- some whitespace not scanned correctly
- faulty return value from scan_attdef/3


Changes 0.13 -> 0.14
--------------------

  xmerl_scan
  ----------
- xmlns and xml:space attributes were not processed correctly for 
  empty elements (ending with />). This has been corrected.

  xmerl.erl
  ---------

- callbacks/1 exported, and export/[2,3] modified to accept either a
  callback module, or a list of callbacks, as returned by callbacks/1.


Changes 0.12 -> 0.13
--------------------

  xmerl_scan
  ----------

- Added customization hooks for reading and writing to the rules table
  When supplying hooks, do not use S#xmerl_scanner.rules (it may not be there)
  but instead use xmerl_scan:rules_state(S) and xmerl_scan:rules_state(X, S)
- Added an option, {fetch_path, [Dir]} to allow the default fetch_URI/2 to
  search a "patch path" for documents; if the file is not found along the 
  path, the URI is used as filename. {fetch_path, ["."]} should always fetch
  documents from the current working directory.
- Added some more support for parsing incomplete documents. The scanner can
  now handle a break right before "/>" (an empty element)
- scan_xml_vsn/2 and scan_pubid_literal/2 now return ?fatal/2 if an invalid
  character is encountered.
- is_pubid_char/1 now also accepts numbers, as it should.

  xmerl.hrl
  ---------

- A new record, #xmlDocument{} has been added. Currently, it's used only by 
  xmerl_xpath

  xmerl_xpath
  -----------

- Before running a query, it now makes sure that the root node is an
  #xmlDocument{} record. If one wasn't already there, it is added.


Changes 0.11 -> 0.12
-------------------

  xmerl_scan
  ---------

- Arguments swapped on line 1677 (scan_pubid_literal/4). Fixed.


Changes 0.10 -> 0.11
-------------------

  xmerl_eventp
  ------------

- Fixed bug related to binary splitting when not using the bitsyntax.


Changes 0.9 -> 0.10
-------------------

  xmerl_scan
  ----------

- Added started event for comments
- Inserted column information in the event records (the attribute was
  already there, but never actually initialized)

  xmerl_eventp
  ------------

- Fixed incorrect handling of files that didn't have trailing whitespace.


Changes 0.8 -> 0.9
------------------

  General
  -------

- Implemented multiple state variables for xmerl_scan: one for each
  customization fun which could be expected to want its own state
  (i.e. all except acc_fun and close_fun)
- Wrote some documentation (README.html)


Changes 0.7 -> 0.8
------------------

  General
  -------

- Fixed version in xmerl.pub
- xmerl_eventp never passed the event handler hook to xmerl_scan -- oops!
- NOTE: xmerl_eventp.erl uses the bit syntax introduced in OTP R7.
  It won't compile with an earlier version.

Changes 0.6 -> 0.7
------------------

  General
  -------

- Added an example of an event-based processor front-end to xmerl_scan.erl
- Fixed a number of xmerl_scanner bugs in the process

  xmerl_scan.erl
  --------------
- Changed the semantics of the continuation fun: now called with user data
  and returns new user data.
- Chased down one of those terrible bugs where an old state instance was 
  reused erroneously.
- xmerl_scan now generates events for text-only contents.


Changes 0.5 -> 0.6
------------------

  General
  -------

- Inserted EPL copyright statements
- Removed -compile(export_all).
- Added xmerl_xml.erl - a callback module for exporting to XML.

  xmerl_scan.erl
  --------------

- If a rules table is specified by the caller via the option {rules, R},
  the table will not be deleted after a completed scan; if no rules table
  is specified, xmerl_scan will create a new (empty) table for the scan,
  and delete it before returning to the caller.

  xmerl.erl
  ---------

- Added return value {'#xml-alias#', NewTag} to allow definition of synonyms
  (see for example p, para and 'P' in xmerl_html.erl)

- The special tag '#root#' is now automatically called at the end of the
  export, as if the data structure were wrapped in {'#root#', RootArgs, Data}.
  RootArgs := [{Key, Value}] can be passed to the export function.
  For examples, see xmerl_html.erl and xmerl_xml.erl


Changes 0.4 -> 0.5
------------------

  General
  -------

- Added testdata: "All is well that ends well" by Shakespeare (in XML w/DTD)

  xmerl_scan.erl
  --------------

- Scan_comment/2 was looking for the end tag "->" instead of "-->". Fixed.
- Added fetch_fun/2, to fetch external DTDs. The default fetch function assumes
  that the system identifier is a filename. If the filename is relative,
  the value of #xmerl_scanner.directory will be prepended (defaults to the
  directory of the XML file being scanned.)

  fetch_fun({public, PublicIdentifier, SystemIdentifier}, S) -> FetchRet;
  fetch_fun({system, SystemIdentifier}, S) -> FetchRet.

    FetchRet : {ok, NewS}		% do not scan the DTD
               | {ok, DataRet, NewS}	% scan contents of DataRet
    DataRet  : {file, Filename} | {string, String}

  The scanner will optionally parse the DTD with options derived from NewS:
  All the modifier functions can be temporarily changed by altering their specs
  in NewS; user_state can be changed, and the resulting user_state from the
  DTD parse will be kept afterwards; everything else will stay as before.
  The same 'rules' ETS table is used (cannot be changed here.)

- Changed the return values of file/[1,2] and string/[1,2] to 
  {ok, Result} | {error, Reason}

- Changed the return values of most scanner functions to return 
  {Result, Tail, NewState}. If no useful result was produced, {[], Tail, NewS}
  is returned. This is so that just about any function can terminate the scan.


  xmerl.hrl
  ---------

- Added debug macros
- Added 'directory' and 'fetch_fun' to #xmerl_scanner{}



Changes 0.3 -> 0.4
------------------

  xmerl_scan.erl
  --------------

- scan_enc_name/2 didn't work. Fixed.



Changes 0.2 -> 0.3
------------------

  General:

- Started dabbling with XLINK, created inc/xmerl_xlink.hrl
- Removed xmerl_names.erl from Makefile (file already deleted)
- Created test file, testdata/simple.xml, which should correspond to 
  test:simple().
- Created xmerl_xlate.erl, which was an experiment with transforming
  a document already in a callback hook to the scanner. Problem: hooks
  are called as the elements' end tags are found -- not in document order.

  xmerl_scan.erl
  --------------

- A bug crashed the scanner if not all names where namespace prefixed
  Big oops! Fixed.
- Default value of #xmerl_scanner.namespace_conformant changed to false.



Changes  0.1 -> 0.2
-------------------
  General:

- Changed the directory structure, created src/ inc/ ebin/ priv/
- Wrote a make file
- compile_grammar.sh is called from make to compile the yecc grammar
- Added some namespace complexity to priv/testdata/a_and_c.xml


  xmerl.hrl:

- Added attributes 'namespace', 'bindings', 'functions' to #xmlContext{}.


  xmerl_scan.erl:

- included auto-expansion of qualified names according to XML Names
  (PIs, NOTATION, ENTITY names cannot have colons, if the scanner is run
   as namespace-conformant.)


  xmerl_xpath.erl:

- The node tests were wrong, matching on the wrong token format -- fixed.
- Context passed along to node_test/2 -> now node_test/3.
- Name expansion incorporated in node_test/3.
- string(Str, Doc) changed to string(Str, Doc, Options)
    Options : [{Key, List}]
    Key : namespace | bindings | functions
    List : [{Key, Value}]  % {namespace, #xmlNamespace{}} is also allowed.

