Upcoming:
    - Multidimensional arrays are now padded with null values on default.
      Values are now square-like and should safely convert to NumPy arrays.
      Thanks to Caoxiang Zhu for suggesting this change.
    - strict_logical and row_major arguments were removed from the top-level
      API functions.  They are now controlled by Parser objects.
    - Parser floatformat changed to float_format
    - Parser colwidth changed to column_width
    - default_start_index added to Namelist for explicit start index.
      `default_start_index` can also be set via the constructor, in order to
      initialise dicts as Namelists.  Thanks to GitHub user @gitporst for
      suggesting this feature.
    - Many Namelist and Parser attributes converted to type-safe properties
    - Most internal Namelist and Parser functions tagged as private
    - Test suite now invoked by `setup.py test`.
    - `decomplex` flag of `todict` renamed to `complex_tuple`
    - Appveyor (Windows) test support
    - Extensive documentation update and sphinx integration
    - Manpage installation by setup.py for CLI (if Sphinx is available)
    - Bugfix: Namelist() now works with arrays of dtypes as nested dicts.
      Thanks to GitHub users @gitporst and @sound-fx for reporting.
    - Bugfix: Namelist() now works with multidimensional arrays as list of
      lists.  Thanks to GitHub user @sound-fx for reporting.

v0.23:
    - CLI: Thorough support for JSON, YAML, updating, and patching
    - Namelist method `todict` for conversion to native Python dict
    - User-friendly print() output for namelist files
    - Most CLI features are integrated into the test suite
    - Bugfix: Content outside of namelist groupss are now tokenized as
        comments.  (Thanks to Martin Margo for reporting.)
    - Bugfix: String line continuation under the new tokenizer.  (Thanks to
        Robert Gieseke for reporting.)
    - Bugfix: Entries longer than colwidth no longer append commas, unless
        end_comma is specified
    - Bugfix: Complex lists are now parsed correctly.
    - Bugfix: Constructor now preserves start_index
    - Bugfix: f90str is now more unicode/str (2.x/3.x) compatible

v0.22:
    - A command line interface has been added, see `f90nml -h` for details.
    - We now use a native Python tokenizer, and no longer use shlex.  This has
      led to some modest performance speedups.
    - JSON and YAML files can now be read as namelists, and vice versa.
    - Bugfix: Repeated values in arrays were incorrectly applied to subsequent
      list elements (e.g. y = 5*1, 2, 3 was applying 5 to all three explicit
      elements, instead of just the first).  Thanks to @fizzysister for
      reporting.
    - Bugfix: Dicts can once again be assigned to namelist groups.  (James
      Penn)
    - Namelist patching using a second namelist (James Penn)
    - Sorted namelist field output.  (Andrew Kiss)
    - Documentation typos were fixed, and some docstrings have been cleaned up.

v0.21:
    - Several bug fixes related to derived types and start index tracking
    - Stricter checks for existing parent when modifying a derived type
    - When parsing lists of nested derived types, we now correctly set the
      parent as the respective list element, rather than the entire list.  This
      allows us to remove several redundant code checks from the parser.

v0.20:
    - Indexing is no longer assumed to be 1-based.  The initial index is now
      implicit if unspecifed in the namelist file.  Properties have been added
      to control the index base.
    - Patching a vector with a shorter vector now correctly removes the old
      tail values.
    - Derived type patching is now supported.

v0.19:
    - Array patching is now supported
    - NumPy primitives can be converted to Fortran types
    - File objects can now be used as input arguments

v0.18:
    - File object read and write support
    - Escape (\) character support in strings
    - Fortran floating point `E` symbol is now optional (with +/- exponent)

v0.17:
    - `f90nml.write()` works for normal (non-`Namelist`) dicts
    - `Parser` properties moved outside of function arguments, and are now
      handled with property decorators (as in `Namelist`)
    - Namelists built from (unsorted) dicts are now pre-sorted by key

v0.16:
    - User-defined comment delimiters (e.g. `#` comment support)

v0.15:
    - Null values are now always followed by commas

v0.14:
    - Default logical parsing is now more strict.  Only `true`, `false`, `t`,
      and `f` (and with surrounding `.`) are now parsed to equivalent values.
    - Extensive documentation update

v0.13:
    - Multidimensional array support

v0.12:
    - Namelist output formatting (column width, indent, etc.)
    - Improved user-defined type output support
    - Arch (AUR) distribution configuration
    - Setuptools is now the install default

v0.1--0.11:
    - Lost to history
