## 2.0.0 Breaking Changes: * Requires Nim 2.x * ``yaml/serialization`` has been split into ``yaml/native`` (low-level API to load a ``YamlStream`` into Nim vars), ``yaml/loading`` (high-level loading API) and ``yaml/dumping`` (high-level dumping API). * Dumping API now has a ``Dumper`` object. All dumping procs require an instance of this object. Previous parameters ``tagStyle``, ``handles`` and ``options`` have been moved into this object. * Constants with default values have been removed in favor of default values for object fields. * Low-level native API for loading and dumping has undergone changes to parameter order. Serialization and deserialization context is now first parameter, to be able to use prefix notation. * Removed ``PresentationStyle``; instead ``Dumper`` can be initialized with presets mirroring the former values of ``PresentationStyle``. * Removed deprecated ``YamlDocument`` type from DOM API. Use ``YamlNode`` instead. Features: * Can now load and dump fields of the parent type(s) of used types (#131) * Updated type guessing to use regexes from YAML 1.2 instead of old YAML 1.1. Type guessing is used primarily for heterogeneous items (implicit variant objects). * Presenter no longer outputs trailing spaces * More presentation options * Simplified default presentation style: Don't output ``%YAML 1.2``, ``%TAG !n! ...`` or ``---`` by default. Output compact notation for collections. * Loading now works at compile time (#70, #91). Dumping doesn't work at compile time currently. Bugfixes: * Don't crash on invalid input, instead raise a catchable ``YamlParserError`` (#129) * Fixed some parser errors in exotic edge cases * Several fixes to make the library work with Nim 2.x ## 1.1.0 Features: * ``YamlNode`` now contains node styles and preserves them when serializing to YAML again * Added ``maxLineLength`` to ``PresentationOptions``. (#119) * Added ``loadFlattened`` to resolve aliases while loading, instead of deserializing them into pointers. (#117) Bugfixes: * Fixed problems with ARC/ORC (#120) * Fixes some edge cases around whitespace while parsing * Fixed a problem that made ``{.ignore: [].}`` fail when trying to ignore collection values. (#127) * Always write a newline character at the end of output, as required by POSIX for text files. * Fixed an error with loading recursive nodes into YamlNodes. * Fixed an error where ``0`` could not be loaded into an unsigned integer lvalue. (#123) * Fixed an error where `float32` values could not properly be deserialized. (#124) * Fixed a compiler error concerning stricteffects. (#125) ## 1.0.0 Features: * ``YamlNode`` can now be used with the serialization API (``load`` / ``dump``) and can be used to hold substructures that should not be deserialized to native types (#48). Bugfixes: * Raise a proper exception when a stream contains no documents but one is expected (#108) * Comments after a block scalar do not lead to a crash anymore (#106) * Fixed an error with parsing document end markers (#115) * Fixed an error when serializing block scalars (#105) ## 0.16.0 Features: * dumping ``sparse`` objects now omits empty ``Option`` fields (#100). Bugfixes: * Fixed several parser errors that emerged from updates on the test suite. * Fixed ``raises`` annotations which could lead to compilation errors (#99). ## 0.15.0 Features: * Compiles with --gc:arc and --gc:orc Bugfixes: * Parser rewrite: Fixes some test suite errors (including #83) * Fixed problems where a syntax error lead to an invalid state (#39, #90) * Serialize boolean values as ``true`` / ``false`` instead of ``y`` / ``y`` to conform to YAML 1.2 spec. ## 0.14.0 Features: * **Breaking change**: transient, defaultVal, ignore and implicit are now annotations. * Added ``sparse`` annotation to treat all ``Option`` fields as optional. Bugfixes: * can now use default values with ref objects (#66) ## 0.13.1 Bugfixes: * Changed `nim tests` to `nim test` to make nim ci happy. ## 0.13.0 Bugfixes: * Fixed submodule link to yaml-test-suite. Features: * Added support for `Option` type. ## 0.12.0 Bugfixes: * Made it work with Nim 0.20.2 ### 0.11.0 Bugfixes: * Made it work with Nim 0.19.0 NimYAML 0.11.0 is unlikely to work with older Nim versions. ## 0.10.4 Bugfixes: * Made it work with Nim 0.18.0 ### 0.10.3 Bugfixes: * Fixed a nimble error when installing the package. Features: * Added `ignoreUnknownKeys` macro to ignore all mapping keys that do not map to a field of an object / tuple (#43). ### 0.10.2 Bugfixes: * Fixed a nimble warning (#42) * Make sure special strings (e.g. "null") are properly quoted when dumping JSON (#44) ### 0.10.1 Bugfixes: * Made it *actually* work with Nim 0.17.0. ### 0.10.0 Features: * Compatibility with Nim 0.17.0 (#40). **Important:** This fix breaks compatibility with previous Nim versions! ### 0.9.1 Features: * Added `YamlParser.display()` which is mainly used by tests * NimYAML now builds for JS target (but does not work properly yet) Bugfixes: * Correctly present empty collections in block-only style (#33) * Correctly handle `{1}` (#34) * Recognize empty plain scalar as possible `!!null` value * Require colons before subsequent keys in a flow mapping (#35) * Allow stream end after block scalar indicators * Fixed regression bugs introduced with timestamp parsing (#37) ### 0.9.0 Features: * Better DOM API: - yMapping is now a Table - field names have changed to imitate those of Nim's json API - Better getter and setter procs * Added ability to resolve non-specific tags in presenter.transform Bugfixes: * Fixed parsing floating point literals (#30) * Fixed a bug with variant records (#31) * Empty documents now always contain an empty scalar * Block scalars with indentation indicator now have correct whitespace on first line. ### 0.8.0 Features: * NimYAML now has a global tag URI prefix for Nim types, `tag:nimyaml.org,2016:`. This prefix is denoted by the custom tag handle `!n!`. * Support arbitrary tag handles. * Added ability to mark object and tuple fields as transient. * Added ability to set a default value for object fields. * Added ability to ignore key-value pairs in the input when loading object values. * Support `!!timestamp` by parsing it to `Time` from module `times`. Bugfixes: * Fixed a bug concerning duplicate TagIds for different tags in the `serializationTagLibrary` * Convert commas in tag URIs to semicolons when using a tag URI as generic parameter to another one, because commas after the tag handle are interpreted as flow separators. ### 0.7.0 Features: * Better handling of internal error messages * Refactoring of low-level API: * No more usage of first-class iterators (not supported for JS target) * Added ability to directly use strings as input without stdlib's streams (which are not available for JS) * Added ability to parse octal and hexadecimal numbers * Restructuring of API: now available as submodules of yaml. For backwards compatibility, it is still possible to `import yaml`, which will import all submodules * Check for missing, duplicate and unknown fields when deserializing tuples and objects Bugfixes: * Fixed double quotes inside plain scalar (#25) * Return correct line content for errors if possible (#23) * Some smaller lexer/parser fixes ### 0.6.3 Bugfixes: * Can load floats from integer literals (without decimal point) (#22) ### 0.6.2 Bugfixes: * Fixed problem when serializing a type that overloads the `==` operator (#19) * Fixed type hints for floats (`0` digit was not processed properly) (#21) ### 0.6.1 Bugfixes: * Fixed deserialization of floats (#17) * Handle IndexError from queues properly ### 0.6.0 Features: * Properly support variant object types * First version that works with a released Nim version (0.14.0) Bugfixes: * Fixed a crash in presenter when outputting JSON or canonical YAML * Raise an exception when trying to output multiple documents in JSON style ### 0.5.1 Bugfixes: * Fixed a problem that was introduced by a change in Nim devel ### 0.5.0 Features: * Support variant object types (experimental) * Added ability to use variant object types to process heterogeneous data * Support `set` type * Support `array` type * Support `int`, `uint` and `float` types (previously, the precision must be specified) * Check for duplicate tag URIs at compile time * Renamed `setTagUriForType` to `setTagUri` Bugfixes: * None, but fastparse.nim has seen heavy refactoring ### 0.4.0 Features: * Added option to output YAML 1.1 * Added benchmark for processing YAML input * Serialization for OrderedMap * Use !nim:field for object field names (#12) Bugfixes: * Code refactoring (#9, #10, #11, #13) * Some small improvements parsing and presenting ### 0.3.0 Features: * Renamed some symbols to improve consistency (#6): - `yamlStartSequence` -> `yamlStartSeq` - `yamlEndSequence` -> `yamlEndSeq` - `yamlStartDocument` -> `yamlStartDoc` - `yamlEndDocument` -> `yamlEndDoc` - `yTagMap` -> `yTagMapping` * Introduced `PresentationOptions`: - Let user specify newline style - Merged old presentation options `indentationStep` and `presentationStyle` into it * Use YAML test suite from `yaml-dev-kit` to test parser. Bugfixes: * Fixed various parser bugs discovered with YAML test suite: - Block scalar as root node no longer leads to a parser error - Fixed a bug that caused incorrect handling of comments after plain scalars - Fixed bugs with newline handling of block scalars - Fixed a bug related to block sequence indentation - Skip content in tag and anchor names and single-quoted scalars when scanning for possible implicit map key - Properly handle more indented lines in folded block scalars - Fixed a problem with handling ':' after whitespace - Fixed indentation handling after block scalar ### 0.2.0 Features: * Added DOM API * Output block scalars in presenter if scalar is long and block scalar output is feasible. Else, use multiple lines for long scalars in double quotes. Bugfixes: * Improved parser (#1, #3, #5) * Made parser correctly handle block sequences that have the same indentation as their parent node (#2) * Fixed problems with outputting double quoted strings (#4) ### 0.1.0 * Initial release