2021-03-09  1.2:  Support for numerical speaker IDs

                  Previously, if a speaker id in the input did not start with
                  a digit, this led to an error when validating the output
                  against the DTD. This is now avoided by prepending an "S" to
                  the ID if it starts with a digit.


2020-05-16  1.1:  Robustification & documentation improvements
                  
                  Fix index error bug
                  
                  Previously, if the inference of the times of symbolic links
                  relied on a class 4 tier which did not contain a reference to
                  every link in "pure" form (i.e. no comma- or
                  semicolon-separated list of links), then this would produce an
                  uncaught Python IndexError. This happened frequently when the
                  reference tier of choice was SAP.
                  This has now been fixed - if a reference tier does not cover
                  ever link, it is counted as not valid. If no valid reference
                  tiers are present, an error is thrown.
                  
                  Graceful handling of incomplete lines
                  
                  If the header contains an element without content (e.g.
                  "NCH:", with nothing after the colon - this is particularly
                  common for the "LHD" element), a warning is given. If the
                  element in question is "SAM", this will also result in an
                  error further on most of the time, as the program needs to
                  know the sampling rate in order to convert time information
                  from samples to seconds.
                  If the body contains an incomplete line, an error is raised
                  detailing the number of components missing.
                  
                  Documentation improvements
                  
                  Added all remaining docstrings, documentation for important
                  attributes and properties of classes, and more debug
                  information messages.


2020-04-10  1.0:  First stable release
                  
                  Major changes:
                  
                  1. Fix "sample conversion bug" and remove --leeway parameter
                  
                  Previously, there was a bug in which the program would
                  sometimes produce items with a length of only one sample. The
                  --leeway parameter, which defined the minimum number of
                  samples that two items had to be apart in order to be merged
                  in the output (default = 5) attempted to fix this (though the
                  bug was still sometimes present across tiers). This has now
                  been fixed and the --leeway parameter been rendered obsolete
                  by adding 0.5 samples to the end time of every item and
                  subtracting 0.5 samples from the start time of every item
                  (unless that start time is 0) ahead of converting them to
                  seconds.
                  
                  2. Discard all items of duration <= 0
                  
                  Some BPF tiers sometimes contain items with a duration of 0
                  samples, or even a negative duration. Starting with this
                  version, these items will be discarded, and a warning
                  displayed to the user (once for every affected tier, not every
                  item).
                  
                  Additions:
                  - Error for when the input does not seem to be a BPF file
                  - Warning for when the user chooses to ignore a tier that
                    isn't present in the input anyway
                  - Error for when line in input cannot be parsed
                  
                  Changes:
                  - Invoking the parameter --list-reference-tiers will now print
                    not only the list (to stdout), but also an explanation of
                    its meaning (to stderr)
                  - The <abbreviation> element of any speaker in the .exb file's
                    <speakertable> is now the same as the id attribute of the
                    <speaker> (was Previously empty)
                  - The category attribute of any .exb <tier> element is now the
                    same as its display-name attribute (was previously "0")
                  
                  Fixes:
                  - No longer throws an error if symbolic link inference is not
                    possible but also not necessary due to no class 1 or class 5
                    tiers being present


2020-03-27  0.3:  Second beta version
                  
                  Change implementation of the tier representation in the .exb
                  output:
                  The reference tier (see --list-reference-tiers) receives the
                  main speaker id and tier type 't'. All class 1 and class 5
                  tiers receive the same speaker id and tier type 'a'. Any
                  remaining class 2 and class 4 tiers receive the main speaker
                  id with a dash and the tier name appended, e.g.
                  'DefaultSpeaker-MAS' and tier type 't'.
                  
                  Can now handle incomplete BPF headers. The user is given a
                  warning if an obligatory header element is missing. If SPN is
                  missing, the default value is 'DefaultSpeaker'.
                  
                  The program now checks after conversion whether the result is
                  compliant with the document type definition of EXMARaLDA
                  'basic transcriptions'. It uses the program xmllint for this
                  (this step therefore works only if xmllint is installed,
                  otherwise it displays a warning).
                  
                  BPF header elements which have no direct equivalent in an .exb
                  file are now stored as child nodes of the .exb header element
                  <ud-meta-information>.
                  
                  Add new BPF class 2 tier 'VAD' (voice activity detection,
                  added with BPF version 1.3.6).
                  
                  Remove unnecessary error message for when the output file does
                  not yet exist.


2019-11-19  0.2:  First beta version
                  
                  Previously, when the times of symbolic links of class 1 or
                  class 5 tiers had to be inferred, the program would cycle
                  through all available class 4 tiers and pick the minimum and
                  the maximum as the link boundaries. Starting from this
                  version, it will instead cycle through a selection of class 4
                  tiers (in order of preference) and infer the links using one
                  tier only. If none of the tiers in this selection are
                  available, an error is thrown.
                  
                  The command line parameter --list-reference-tiers has also
                  been added which allows the user to retrieve this 'tier
                  hierarchy'.
                  
                  Fix bug which caused the order of tiers not to be preserved.
                  
                  If the time of a singular symbolic link cannot be inferred,
                  the program now aborts instead of simply issuing a warning.
                  
                  Remove prospect of support for specifying multiple referenced
                  files (the -r option now demands exactly one file name and
                  does not allow for a comma-separated list of files names).
                  
                  The program now throws an error if either the input or output
                  file cannot be found.
                  
                  Greatly improved in-code documentation.


2019-10-31  0.1:  First alpha version
