SnakeYAML

##### Project Documentation

- Project Information
- Project Reports
  - Changes Report
  - Cobertura Test Coverage
  - JavaDocs
  - Source Xref
  - Surefire Report
  - Test Source Xref

## YAML 1.1 parser and emitter

### Release History

Version | Date | Description
--- | --- | ---
1.9-SNAPSHOT | in Mercurial | Development
1.8 | 2011-02-15 | Performance improvement
1.7 | 2010-08-12 | Simplify public API (drop Loader and Dumper)
1.6 | 2010-02-26 | introduce Tag class
1.5 | 2009-10-30 | Improve usage of generic collections in JavaBeans
1.4 | 2009-08-26 | better support for loading immutable objects
1.3 | 2009-07-20 | complete support for recursive objects
1.2 | 2009-04-27 | expose low-level API
1.1 | 2009-03-14 | improve performance and test coverage
1.0.1 | 2009-02-18 | implement Enum support
1.0 | 2009-02-06 | final 1.0 release
1.0rc2 | 2008-01-22 | Improve JavaBeans support
1.0rc1 | 2009-01-16 | Construct type safe collections
0.91 | 2008-01-14 | Support shortcut tags for custom classes
0.9 | 2008-01-12 | Add possibility to define a root class for Loader
0.8 | 2009-01-07 | Import changes from PyYAML 3.08
0.7 | 2008-12-20 | Improve test coverage
0.6 | 2008-12-17 | Documentation added
0.5 | 2008-12-12 | Import PyYAML 3.06
0.4 | 2008-11-11 | Fix issues in Scanner
0.2.1 | 2008-10-20 | Import JvYaml from CVS

### Release 1.9-SNAPSHOT - in Mercurial

Type | Changes | By
--- | --- | ---
| Add a test to prove that SnakeYAML is not affected by the problem reported for libyaml at http://pyyaml.org/ticket/196 (2011-07-28) | py4fun
| Since timestamp contains ':' characters it is dumped with single quoted scalar style in the flow context. The single quoted scalar style causes to dump the explicit tag. In the block context the plain scalar can be used and the tag is not required. It may cause unpredictable behaviour if the tag is required. See the comments in JodaTimeExampleTest (2011-07-25) Fixes 128. | py4fun
| Fix scientific notation inconsistency in the YAML 1.1 specification: scalar '8e-06' should be parsed as a Double (2011-07-24) Fixes 130. | py4fun
| Do not allow to override BaseRepresenter.representData(Object data) because users should instead implement Represent interface (2011-07-21) Fixes 127. | py4fun
| Deprecate DumperOptions.explicitRoot (2011-07-20) Fixes 124. | py4fun
| Add Yaml.dumpAs(Object, Tag.MAP, FlowStyle) and Yaml.dumpAsMap(Object) methods. JavaBeanDumper is marked as deprecated (2011-07-16) Fixes 124. | py4fun
| Add example to show how to dump a custom class (2011-07-12) Fixes 127. | py4fun
| Add Yaml.serialize(Node) low level method to the public API (2011-07-14) Fixes 129. | py4fun
| Add Yaml.represent(Object) low level method to the public API (2011-07-14) Fixes 129. | py4fun
| Add support for Maven 3 via 'm3' profile (2011-07-10) Fixes 125. | py4fun
| Remove deprecated JavaBeanParser (2011-07-05) Fixes 124. | py4fun
| Remove redundant JavaBeanDumper.classTags set (2011-07-03) Fixes 124. | py4fun
| Add Yaml.loadAs() methods. JavaBeanLoader is marked as deprecated (2011-07-03) Fixes 124. | py4fun
| Remove TypeDescription.root property to prepare issue 124. This is a minor backwards incompatible change. Now instead of setting as root, the TypeDescription must be passed to the Contructor's constructor to be taken as the root definition (2011-07-03) Fixes 124. | py4fun
| Fix: close files in tests to avoid a possible file handle limit (2011-06-09) Fixes 121. Thanks to Jaromir. | py4fun
| Fix: Improved support for empty JavaBeans (2011-06-09) Fixes 116. Thanks to Jim Peterson. | py4fun
| Fix: Improved support for parameterised types in collections (2011-05-25) Fixes 112. Thanks to Lethargish. | py4fun
| Fix: parameterised JavaBeans fail to load and dump because they are treated as Maps (2011-05-16) Fixes 115. Thanks to elkniwt. | py4fun
| Fix: Do not remove root tags of JavaBeans when it is not explicitly requested (2011-04-20) Fixes 114. Thanks to gileadis. | py4fun
| Fix: Long escaped tag URI sequences throw BufferOverflowException (2011-03-03) Fixes 111. Thanks to JordanAngold. | py4fun
| Fix: introduce a package for external libraries and move there the 64Coder and the Google's URL encoder (2011-02-24) Fixes 110. Thanks to dmitry.s.mamonov. | py4fun
| Fix: ancient years must be dumped with leading zeros (2011-02-19) Fixes 109. Thanks to cjalmeida. | py4fun
| Remove unused code in Constructor: Modifier.isAbstract() is not needed any more (2011-02-18) Thanks to JordanAngold. | py4fun
| Enum's name property shall be dumped instead of the 'toString()' output (2011-02-16) Fixes 108. | JordanAngold

### Release 1.8 - 2011-02-15

Type | Changes | By
--- | --- | ---
| Add example to howto Wiki: How_to_substitute_object_in_YAML_document_with_a_custom_object (2011-01-27) | py4fun
| When the YAML document to be loaded is provided as String parse it directly without making a Reader first (2011-01-23) | py4fun
| Immutable data structures in StreamReader allow to share the same buffer for all the Mark instances. It makes 'withMarkContext' setting redundant (2011-01-19) Fixes 106. | py4fun
| Merge JavaBean properties when an explicit tag is provided (2011-01-11) Fixes 100. | maslovalex
| Add an example for escaping line breaks in binary content (2011-01-03) Fixes 99. | py4fun
| Propose a solution for JavaBeans to support SortedSet property when it is encoded as a sequence (2010-11-24) Fixes 97. | py4fun
| Simplify the way how the order of JavaBean properties is specified. Introduce PropertyUtils.createPropertySet() method to be overridden when a specific order is expected (2010-11-23) Fixes 59. | py4fun
| Fix: Loading of generic collections with Array parameter(s). (2010-11-16) Fixes 95. | maslovalex
| Add ChangeRuntimeClassTest as an example how to change a class for a global tag (2010-11-05) Fixes 94. | py4fun
| Inner objects in Constructor become protected to be more flexible when Constructor is expended (2010-10-03) | py4fun
| Apply www.snakeyaml.org domain name (2010-09-20) Fixes 91. | py4fun
| Move Base64Coder into another package to keep a separate copyright statement. Base64Coder is left unchanged (2010-09-19) Fixes 90. | py4fun
| Iterable should not be serialised as sequence (2010-09-16) Fixes 69. | py4fun
| Introduce 'fast' Maven profile to quickly build cobertura reports (2010-09-16) | py4fun
| Fix: Specify plugin versions in POM (2010-09-15) Fixes 89. | py4fun
| Fix: Custom tag erased when referenced from generic collection (2010-09-15) Fixes 88. | maslovalex
| Minor refactoring in Emitter to improve performance: save calls to Constant.has() (2010-09-13) | py4fun
| Minor refactorings in Emitter to improve performance: create less Strings [r9185e0b3] (2010-09-10) | maslovalex
| Introduce LoaderOptions to be able to specify configuration while loading (2010-09-03) Fixes 79. | py4fun
| Representer.representJavaBeanProperty() is given the wrong tag. Instead of the property tag, the tag for the JavaBean itself is provided. (2010-09-01) Fixes 81. | py4fun
| Rename JvmDetector into GenericsBugDetector (2010-08-31) | py4fun
| Fix: Timestamp is not parsed properly when milliseconds start with 0 (2010-08-24) Fixes 80. Thanks to SebastienRainville. | py4fun
| Context for error reporting consumes a lot of resources (2010-08-21) Fixes 79. | maslovalex
| Cleanup unused code in deprecated Loader and Dumper (2010-08-13) | py4fun

### Release 1.7 - 2010-08-12

Type | Changes | By
--- | --- | ---
| Eclipse does not run JUnit 4 tests when they are launched for the whole project (2010-08-11) | py4fun
| Share PropertyUtils if not explicitly set in Constructor or Representer (BeanAccess.FIELD works properly when JavaBean is identified by a root tag) (2010-08-11) Fixes 55. | maslovalex
| Create 1.7 Release Candidate 1 (2010-08-11) | py4fun
| Simplify public API: Drop Dumper (2010-08-06) Fixes 77. | py4fun
| Simplify public API: Drop Loader (2010-08-05) Fixes 77. | py4fun
| Add examples to create scalars that match custom regular expression: CustomImplicitResolverTest, CustomBeanResolverTest (2010-08-03) Fixes 75. Thanks to jon.p.hermes. | py4fun
| Do not use redundant tags for arrays which are JavaBean properties. (2010-07-21) Fixes 74. Thanks to Kevin Menard. | py4fun
| RecursiveSetTest proves that it is possible to construct a recursive set (2010-07-20) | py4fun
| Provide sequence support for loading java.util.Set. Also provide an example to serialise a java.util.Set as a sequence. (2010-07-19) Fixes 73. Thanks to birnbuazn. | py4fun
| Support java.util.Collection as a parent for List and Set (2010-07-09) Fixes 72. Thanks to birnbuazn. | py4fun
| Allow direct field access bypassing setters and getters. Empty constructor is required to support 2-step construction (2010-07-02) Fixes 55. Thanks to birnbuazn. | maslovalex
| Serialise Iterator and Iterable as sequences (2010-06-25) Fixes 69. | py4fun
| Change error message when 'No suitable constructor with N arguments found for class' (2010-06-23) Thanks to maslovalex. | py4fun
| Add JodaTime example (2010-06-04) Thanks to Antony Stubbs. | py4fun
| Add possibility to create a Tag out of an URI (2010-05-31) Fixes 67. Thanks to Manuel Sugawara. | py4fun
| URLDecoder.decode() does not fail when UTF-8 is invalid. Use CodingErrorAction.REPORT to implement the failure (2010-05-21) | py4fun
| Fix generic collections which contain other collections (2010-05-18) | maslovalex
| Fix: java classes containing non-ASCII characters in names are incorrectly encoded (2010-05-14) Fixes 67. Thanks to Manuel Sugawara. | py4fun
| Fix: add checks for null arguments for JavaBeanDumper (2010-04-27) Fixes 65. Thanks to lerch.johannes. | py4fun
| Add a test to see how stack trace is serialised (2010-04-27) | py4fun
| ClassCastException in Representer when working with ParameterizedType (2010-04-25) Fixes 64. Thanks to maxim.moschko. | py4fun
| Improve toString() method for Node. Since scalars cannot be recursive they can be printed (2010-04-15) | py4fun
| Refactor the way arrays are constructed (2010-04-15) Fixes 63. Thanks to Udo. | maslovalex
| Add examples for dumping custom values for !!bool and !!null (2010-04-13) Fixes 62. | py4fun
| Fix: ClassCastException when dumping generic bean (2010-04-11) Fixes 61. | py4fun
| Provide an example for changing JavaBean properties order (2010-04-01) Fixes 59. | py4fun
| Provide example for skipping null and empty collections (2010-03-29) Fixes 60. | py4fun
| JavaBeanDumper.dump throws NullPointerException on list property with null element (2010-03-23) Fixes 58. Thanks to jeff.caulfield. | py4fun
| Make constructors in SafeConstructor public (2010-03-16) Fixes 56. Thanks to DZeiss. | py4fun
| Releases and snapshots are available in the Sonatype Maven repository. https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide Thanks to David Bernard. | py4fun
| Enhancement for a pretty format that combines BLOCK and FLOW (2010-03-03) Fixes 53. Thanks to obastard. | obastard
| Unable to dump JavaBean that inherits from a protected base class (2010-03-02) Fixes 50. Thanks to sualeh.fatehi. | py4fun
| Format source (2010-03-01) | py4fun
| Use Token.ID and Event.ID instead of just ID (2010-03-01) | py4fun
| Issue 50 fails in Eclipse but works with Maven (2010-03-01) | py4fun

### Release 1.6 - 2010-02-26

Type | Changes | By
--- | --- | ---
| Release Candidate 2 is available (2010-02-24) | py4fun
| Don't dump read-only properties by default. DumperOptions gets a setting to include read-only JavaBean properties. This is no backwards compatible change (2010-02-19) Fixes 47. Thanks to obastard. | py4fun
| Support GregorianCalendar. Due to Daylight Saving Time parsing the timestamp with a TimeZone cannot determine the exact time (2010-02-19) Fixes 49. Thanks to obastard. | py4fun
| Some Unicode characters are wrongly replaced by \x{fffd} during double quoted style dump (2010-02-15) Fixes 51. Thanks to johann.Werner. | py4fun
| Introduce representJavaBeanProperty() method in Representer. The method can be overridden to simplify custom JavaBean representation (2010-02-12) Fixes 48. Thanks to obastard. | py4fun
| Release Candidate 1 is available (2010-02-01) | py4fun
| Representer.representJavaBean() returns MappingNode (2010-01-26) | py4fun
| Add example of serialising static fields (2010-01-26) | py4fun
| Add example of serialising java.io.File as scalar node for issue 46 (2010-01-25) | py4fun
| Refactor: introduce Chomping to avoid using null as value for Boolean. Stay in line with Scala port where null is not allowed (2010-01-19) | py4fun
| Refactor: use Event.ID enum instead of classes (2010-01-15) | py4fun
| Refactor: use Token.ID enum instead of classes (2010-01-15) | py4fun
| Refactor: use generic classes for DirectiveToken (2010-01-14) | py4fun
| Refactor: rename Reader to StreamReader to avoid name conflict with java.io.Reader (2010-01-13) | py4fun
| Refactor: use StringBuilder instead of StringBuffer (2010-01-12) | py4fun
| Refactor: introduce Constant class to share String constants (2010-01-12) | py4fun
| Keep Tag.equals(String) to simplify transition to Tag class (2010-01-08) | py4fun
| Refactor: introduce Tag instead of Tags. Nodes use Tag class instead of String (2010-01-05) | py4fun
| BaseConstructor shall give more flexibility to choose a constructor at runtime (2010-01-08) Fixes 42. Thanks to Artem. | py4fun
| Refactor: introduce TagTuple instead of String[] (2010-01-04) | py4fun
| Ignore tags when they are compatible with the runtime class (2010-01-04) Fixes 40. Thanks to sitrious. | py4fun
| Add example to ignore unknown tags (2009-12-08) | py4fun
| Add Ruby example (2009-12-08) | py4fun
| Do not omit the tag for JavaBean properties when the tag is explicitly defined (2009-12-08) | py4fun
| Fix ID format for numbers over 999 (2009-12-05) Fixes 38. Thanks to gchpaco. | py4fun
| Allow separate option in DumperOptions for long strings (2009-11-16) Fixes 29. Thanks to grignaak. | py4fun
| JavaBeanDumper: add possibility to define a custom Representer (2009-11-25) | py4fun
| Introduce multi contructors (tag prefix). A family of tags may be processed by a single constructor (2009-11-25) Fixes 36. | py4fun
| Refactor BaseConstructor: simplify second step for recursive structures (2009-11-25) | py4fun
| Add FilterPropertyToDumpTest to show how to filter JavaBean properties (2009-11-24) | py4fun
| Add FilterClassesConstructorTest to show how to filter created classes (2009-11-16) | py4fun
| Improve JavaDoc (2009-11-12) Thanks to Stefan. | py4fun
| Add Velocity example (2009-11-03) | py4fun
| Refactor: rename Tuple to RecursiveTuple and hide it inside BaseConstructor (2009-11-03) | py4fun

### Release 1.5 - 2009-10-30

Type | Changes | By
--- | --- | ---
| Extend Resolver to support custom implicit types (2009-10-27) Fixes 27. Thanks to Polyglot Maven team. | py4fun
| Performance improvement: use ArrayStack instead of Stack which extends Vector (2009-10-20) | py4fun
| Improve usage of generic collections: while type erase makes no difference between Class< Foo> and Class< Bar> at runtime, the information about generics is still accessible via reflection from Method/Field. (2009-10-19) Fixes 25. Thanks to Benjamin Bentmann. | py4fun
| Fix ConstructYamlObject: support recursive objects. Introduce 'resolved' property for Nodes. This property supposed to help to distinguish explicit tag from the resolved tag (2009-10-19) | py4fun
| Refactor: use rootTag instead of rootType (for Class) in BaseConstructor. This is done to solve the priority problem: normally explicit tag has more priority then runtime class but for the root tag it is the other way around (2009-10-19) | py4fun
| Line numbers reported in Exceptions are Zero based, should be 1 based (2009-10-12) Fixes 24. Thanks to shrode. | py4fun
| Support arrays of reference types as JavaBean properties (2009-09-22) Fixes 21. Thanks to ashwin.jayaprakash. | py4fun
| Respect root tag for sequences (2009-09-04) Fixes 17. Thanks to jcucurull. | py4fun
| SafeRepresenter respects custom tags for standard Java classes where standard tag has more then one Java implementation available (Long, List, Map, Date etc) (2009-09-03) Fixes 18. Thanks to creiniger. | py4fun
| Add possibility to define a custom Class Loader. (2009-09-01) | py4fun
| Fixed an obscure scanner error not reported when there is no line break at the end of the stream. The fix is imported from PyYAML 3.09 {ticket 118} (2009-08-31) | py4fun
| Cache JavaBean class properties. Tests show that the loading has become a few percents faster (2009-08-31) Fixes 16. Thanks to infinity0x. | py4fun
| Introduce ArrayStack to use push() and pop() instead of standard (and too verbose) 'remove(size()-1)' (2009-08-27) | py4fun
| Fix: ArrayList is more efficient than LinkedList (2009-08-26) Fixes 14. Thanks to infinity0x. | py4fun

### Release 1.4 - 2009-08-26

Type | Changes | By
--- | --- | ---
| Apply Apache License Version 2.0 (2009-08-14) | py4fun
| Provide javadocs link to Sun Java API (2009-08-10) Fixes 13. Thanks to infinity0x. | py4fun
| Build 1.4 Release Candidate 1 (2009-08-07) | py4fun
| Introduce Tags.getGlobalTagForClass() to simplify tag generation in custom constructors (2009-08-06) | py4fun
| Refactor: introduce ImplicitTuple (2009-08-06) | py4fun
| Fix: create a Java instance with the following priority to choose the class: Explicit tag -> Runtime class (defined in JavaBean) -> implicit tag (2009-08-06) Fixes 11. Thanks to infinity0x. | py4fun
| Fix: Bean with no property cannot be instantiated. This is implemented via better support for immutable objects. Custom Constructor may be used when there are more then 1 way to create an instance (2009-08-04) Fixes 9. Thanks to wwagner4. | py4fun
| Deliver possibility to load immutable instances with no global tags. Reflection for constructor arguments is used to get the runtime classes (2009-08-04) | py4fun
| Use more informative error message when a JavaBean property cannot be created (2009-08-02) | py4fun
| Refactor: Constructor is rewritten. Do not overwrite methods from BaseConstructor. Instead introduce ConstructScalar, ConstructSequence, ConstructMapping (2009-07-31) | py4fun
| Change Maven repository path: groupId='org.yaml', artifactId='snakeyaml' (2009-07-31) | py4fun
| Fix: dump omits JavaBean class name when used with an alias (2009-07-28) Fixes 10. Thanks to derrick.rice. | py4fun
| Generate sources and Javadoc (2009-07-27) | py4fun
| Node does not have the value. It is delegated to the non-abstract classes (2009-07-27) | py4fun
| Extends JavaBeanDumper to allow skipping global tags inside type-safe collections. Introduce method setMapTagForBean() (2009-07-22) | py4fun
| Add ConstructEmptyBeanTest to test JavaBean construction with no properties in the YAML document(2009-07-22) | py4fun
| Refactor: redesign tag management for JavaBeans in Representer. Drop dynamic root tag concept (2009-07-22) | py4fun
| Remove unused TypeDescription in Representer (2009-07-21) | py4fun
| Use NodeTuple instead of Node[] for mappings (2009-07-21) | py4fun
| Introduce JavaBeanLoader and JavaBeanDumper. Deprecate JavaBeanParser (2009-07-21) | py4fun
| Fix: Representer was keeping state between invocations (2009-07-21) Fixes 8. Thanks to Alan Gutierrez. | py4fun

### Release 1.3 - 2009-07-20

Type | Changes | By
--- | --- | ---
| Fix: values returned by System.identityHashCode() are not guaranteed to be unique (2009-07-14) Fixes 6. Thanks to infinity0x. | py4fun
| Add a simple test for Java Generics (BirdTest). Unfortunately it shows that some JVM implementations do not recognise classes for JavaBean properties at runtime. It leads to unnecessary global tags. See http://code.google.com/p/snakeyaml/wiki/Documentation#Generics for details (2009-07-13) | py4fun
| Fix: set the "cause" field for MarkedYAMLException (2009-07-10) Fixes 5. Thanks to infinity0x. | py4fun
| Fix: Recursive objects are now fully supported (2009-07-09) Fixes 1. | maslovalex
| Add support for BigDecimal as a JavaBean property (2009-07-07) | py4fun
| Improve test coverage for Constructor. Allow construction of JavaBeans with only setter without the corresponding getter (2009-07-07) | py4fun
| Add a test to check the proper report for IOException (2009-07-03) | py4fun
| Fix: represent proper tags for JavaBeans when they are not the root of the YAML document but a member of a collection (2009-07-03) Fixes 3. Thanks to infinity0x. | py4fun
| Refactor: run PMD and apply some of the recommendations (2009-06-18) | py4fun
| Create an issue for Recursive objects to be remembered (2009-06-08) Fixes 1. | py4fun
| Migrate project hosting from Assembla to Google code (2009-06-08) | py4fun
| Fix: null as a JavaBean property was not handled properly (2009-06-04) Thanks to Magne. | py4fun
| Validate changes.xml file (2009-05-25) | py4fun
| Fix ticket 40 in Assembla: getting an error when javabean contains java.sql.Timestamp fields (2009-05-25) Thanks to Magne. | py4fun

### Release 1.2 - 2009-04-27

Type | Changes | By
--- | --- | ---
| Add 'Yaml.parse()' method which return Events to support low level YAML processing (2009-04-20) | py4fun
| Introduce LineBreak.getPlatformLineBreak (ticket 5 in Assembla) (2009-04-18) Thanks to Bob Jalex. | py4fun
| Rename LineBreak.LINUX to LineBreak.UNIX (ticket 5 in Assembla) (2009-04-18) Thanks to Bob Jalex. | py4fun
| Add 'Yaml.compose()' methods which return Nodes to support YEdit (2009-04-17) | py4fun
| Refactor: rename enums in DumperOptions to make the names consistent (2009-04-07) | py4fun
| Refactor: use Character instead of char primitive for style in Emitter (2009-04-07) | py4fun
| Add possibility to parse all scalars as Strings (2009-03-30) | py4fun
| Merge changeset 347 from PyYAML (2009-03-30) | py4fun
| Respect DumperOptions with a custom Representer (2009-03-18) | py4fun
| Represent TAB as '\t' instead of '(9' in the error message (2009-03-17) | py4fun

### Release 1.1 - 2009-03-14

Type | Changes | By
--- | --- | ---
| Introduce JavaBeanParser (2009-03-14) | py4fun
| Introduce DumperOptions.Version enum (2009-03-13) | py4fun
| Introduce DumperOptions.LineBreak enum (2009-03-10) | py4fun
| Use byte[] for binary type. (2009-03-09) | py4fun
| Restore Regular Expressions in Resolver. Ragel gives only 5% performance increase. Fix a bug in Resolver with expanded regular expressions which caused the performance problem. (2009-03-06) | py4fun
| Better Spring support: it is now possible to create a constructor with a String as the class name. (2009-03-05) | py4fun
| Throw an exception when the same Loader or Dumper instance is shared between different Yaml instances. Because they are statefull it is not Thread-safe. (2009-03-05) | py4fun
| Add possibility to set a meaningful name for Yaml instance to be shown in toString(). (2009-03-05) | py4fun
| Refactor: declare classes which are not expected to be extended as final. (2009-03-04) | py4fun
| Refactor: use 'final' keyword to identify immutable fields. (2009-03-04) | py4fun
| Refactor: do not use 'final' keyword for local variables. (2009-03-04) | py4fun
| Fix: respect implicit resolvers with 'null' as a first character. (2009-03-02) | py4fun
| Refactor: use Character instead of String as a key for implicit resolvers. (2009-03-02) | py4fun
| Use Ragel instead of Regular Expressions for implicit types. (2009-03-02) | py4fun
| Fix ticket #4 (in Assembla): java.sql.Date not handled. (2009-02-28) Thanks to Christophe Desguez. | py4fun
| Introduce DumperOptions.DefaultFlowStyle enum (2009-02-24) | py4fun
| Introduce DumperOptions.DefaultScalarStyle enum (2009-02-24) | py4fun
| Refactor: use 'switch' with Enum instead of multiple 'if' statements to distinguish nodes (2009-02-19) | py4fun
| Refactor: use Enum instead of String as NodeId (2009-02-19) | py4fun

### Release 1.0.1 - 2009-02-18

Type | Changes | By
--- | --- | ---
| Do not emit anchors for Enum (2009-02-18) | py4fun
| Enum as a JavaBean property (when the Enum class is implicitly defined) does not need tags for both loading and dumping (2009-02-17) | py4fun
| Enum is emitted as a scalar node (2009-02-17) | py4fun
| Enum is parsed as a scalar node or as a JavaBean property (2009-02-17) Thanks to James Nissel. | py4fun
| Refactor: for performance ScannerImpl.stalePossibleSimpleKeys() does not copy key Set (2009-02-10) | py4fun
| By default allowUnicode=true. If it is necessary to escape Unicode use DumperOptions.setAllowUnicode(false) (2009-02-09) | py4fun
| Implement allowUnicode setting (to escape Unicode characters on non UTF-8 terminals) (2009-02-09) | py4fun
| Add possibility to specify tags for dumping (2009-02-09) | py4fun
| Rename getExpRoot to getExplicitRoot to conform with standard JavaBean naming convention (2009-02-09) | py4fun
| Rename explictStart and explicitEnd to standard setters to conform with standard JavaBean naming convention (2009-02-09) | py4fun
| Add possibility to specify a line break (2009-02-09) | py4fun

### Release 1.0 - 2009-02-06

Type | Changes | By
--- | --- | ---
| Use LinkedHashMap for Emitter.tagPrefixes to respect the order (2009-02-06) | py4fun
| Use LinkedHashMap for ScannerImpl.possibleSimpleKeys to respect the key order (2009-02-05) | py4fun
| Add a test to prove that Yaml instances are independent and can safely be used in multithreaded environment like for instance a Servlet container (2009-02-05) | py4fun
| The mailing list is renamed to snakeyaml-core to avoid a name conflict in Google AppEngine (2009-02-03) | py4fun

### Release 1.0rc2 - 2008-01-22

Type | Changes | By
--- | --- | ---
| Provide possibility to define/eliminate the root tag for JavaBeans. Avoiding global tags helps to exchange YAML documents with other programming languages (2009-01-21) | py4fun
| Arrays as JavaBens properties are properly supported (2009-01-21) | py4fun
| Do not emit redundant tags for JavaBeans (2009-01-20) | py4fun
| Respect public fields in JavaBeans (2009-01-20) | py4fun

### Release 1.0rc1 - 2009-01-16

Type | Changes | By
--- | --- | ---
| Replace String.getBytes(Charset charset) with String.getBytes(String charsetName) because String.getBytes(Charset charset) was introduced only in Java 6 (2009-01-16) | py4fun
| Replace LinkedList.pop() with removeFirst() because pop() was introduced only in Java 6 (2009-01-16) | py4fun
| Replace LinkedList.push() with addFirst() because push() was introduced only in Java 6 (2009-01-16) | py4fun
| Implement type safe Map as a property of custom Java class (2009-01-16) | py4fun
| Implement type safe List as a property of custom Java class (2009-01-15) | py4fun
| Construct interface does not use generics. The type information is set to the Node (2009-01-15) | py4fun
| Introduce TypeDescription as a single configuration option for a custom class (2009-01-15) | py4fun

### Release 0.91 - 2008-01-14

Type | Changes | By
--- | --- | ---
| Add possibility to define shortcut tags for custom classes while loading (2009-01-13) | py4fun
| Add possibility to define shortcut tags for custom classes while dumping (2009-01-13) | py4fun
| Construct List as a JavaBean property. But due to erasure only standard Java classes created (2009-01-13) | py4fun
| Import PyStructureTest from PyYAML (2009-01-13) | py4fun
| Import canonical scanner and parser from PyYAML (2009-01-12) | py4fun

### Release 0.9 - 2008-01-12

Type | Changes | By
--- | --- | ---
| Finish 2.27 example from the specification (2009-01-12) | py4fun
| Add possibility to define a root class for Loader (2009-01-11) | py4fun
| Use Java Generics in the Construct interface (2009-01-11) | py4fun
| Use Java Generics in the Scanner interface (2009-01-08) | py4fun
| Create ScannerIml only in ParserImpl (2009-01-08) | py4fun
| Import changeset 312 from PyYAML. Fix a bug in Emitter when writing folded scalars (2009-01-07) | py4fun

### Release 0.8 - 2009-01-07

Type | Changes | By
--- | --- | ---
| Add possibility to use java.io.Reader as input. BOM must be respected. (2009-01-06) | py4fun
| Import Changeset 308 from PyYAML: Refactored whitespace combination detector in the scalar analyser. (2009-01-06) | py4fun
| Import Changeset 313 from PyYAML: Emit an explicit document end indicator when there is a possibility of ambiguous parsing. (2009-01-06) | py4fun
| Use global tags (with !!) to dump Java custom instances. (2009-01-05) | py4fun
| Use global tags (with !!) to load Java custom instances. (2009-01-05) | py4fun
| Add example of defining a custom List and Map implementations. (2009-01-04) | py4fun
| Fix parsing Long.MIN_VALUE: respect the sign when parsing integers. (2009-01-04) | py4fun
| when constructing integers try to create the first in the following order: Integer -> Long -> BigInteger. (2009-01-02) | py4fun

### Release 0.7 - 2008-12-20

Type | Changes | By
--- | --- | ---
| Improve test coverage for constructor package (2008-12-20) | py4fun
| Remove support for "value" type because it is not used (2008-12-20) | py4fun
| Require test coverage 95% (2008-12-19) | py4fun
| Improve test coverage for Nodes (2008-12-19) | py4fun
| Fix dumping Date and better coverage for Representer (2008-12-19) | py4fun
| Remove unused code based on coverage report (2008-12-19) | py4fun
| Tokens are 100% covered by tests (2008-12-19) | py4fun
| Remove old tests (2008-12-18) | py4fun
| Synchronized with PyYAML revision 307 | py4fun

### Release 0.6 - 2008-12-17

Type | Changes | By
--- | --- | ---
| Many examples added to the Wiki page (2008-12-17) | py4fun
| Public interface is using Iterator instead of Iterable (2008-12-17) | py4fun
| Sort names when JavaBeans are represented (2008-12-15) | py4fun
| defaultFlowStyle for Dumper is configurable in DumperOptions (2008-12-12) | py4fun

### Release 0.5 - 2008-12-12

Type | Changes | By
--- | --- | ---
| Add possibility to define an implicit resolver. {359:63190d5bcd10} (2008-12-11) | py4fun
| Add possibility to define an explicit constructor. {356:ccaa0df9ca98} (2008-12-11) | py4fun
| Java objects can be constructed from mapping (JavaBeans), from sequence (constructor) from scalar (constructor). (2008-12-10) | py4fun
| pairs tag works properly. (2008-12-08) | py4fun
| omap tag works properly. (2008-12-08) | py4fun
| Implement possibility to define a custom Map implementation {332}. (2008-12-06) | py4fun
| Implement possibility to define a custom List implementation {331:72c03254c184}. (2008-12-06) | py4fun
| Path resolver is removed because it is not imported properly {330}. (2008-12-06) | py4fun
| Constructor is overwritten completely. (2008-12-06) | py4fun
| Implement possibility to define a custom Representer. (2008-12-01) | py4fun
| Support arrays of reference types. Arrays of primitives are not supported because Arrays.asList() does not work. (2008-12-01) | py4fun
| Import change 300 for Emitter from PyYAML. (2008-12-01) | py4fun
| Fix Node identity to avoid aliases for simple types - [1, 1]. (2008-11-28) | py4fun
| Recursive objects can be represented (but not yet constructed) (2008-11-28) | py4fun
| Binary is represented back as String (2008-11-28) | py4fun
| Re-write Representer classes from scratch (2008-11-28) | py4fun
| 'null' can be a key in a map (2008-11-21) | py4fun
| !!set tag is parsed properly (2008-11-21) | py4fun
| Single characters 'Y', 'N', 'y' and 'n' are parsed as String opposed to boolean as it is defined in the specification. This is how it is done in PyYAML (2008-11-21) | py4fun
| Constructor: because Java does not have generators 'deep' is not imported from PyYAML (2008-11-19) | py4fun
| Composer imported from PyYAML (2008-11-17) | py4fun
| Resolver.resolve() is using simple boolean argument instead of array of booleans as in PyYAML. (2008-11-18) | py4fun
| Fix: 'set' type works. (2008-11-18) | py4fun
| Rewrite Parser from scratch. (2008-11-17) | py4fun

### Release 0.4 - 2008-11-11

Type | Changes | By
--- | --- | ---
| Move constants from Yaml interface to appropriate classes (2008-11-10) | py4fun
| Interface change: Yaml dumpAll() methods accept Iterable (2008-11-10) | py4fun
| Interface change: Yaml loadAll() methods return Iterable (2008-11-10) | py4fun
| Scanner: copy keys to avoid java.util.ConcurrentModificationException when removing possible simple key (2008-11-10) | py4fun
| Tag v0.3.1 (2008-11-08) | py4fun
| MappingNode requires Map as a value and SequenceNode requires List as a value (2008-11-08) | py4fun
| Marks in a Token are required (2008-11-08) | py4fun
| Remove prefixForward() method from Reader because it is not present in PyYAML (2008-11-08) | py4fun
| Fix a deviation with PyYAML in method scanBlockScalar(). 'chomping' can be null. Fix a bug in JvYaml that the trailing '\n' in a block scalar was removed.(2008-11-07) | py4fun
| Fix a deviation with PyYAML in method scanDirectiveIgnoredLine(). Put '#' instead of '"'. (2008-11-07) | py4fun
| Restore from PyYAML the way the keys are parsed. (Restored methods are stalePossibleSimpleKeys() and removePossibleSimpleKey().) Fix issue http://code.google.com/p/jvyamlb/issues/detail?id=6. (2008-11-07) | py4fun
| Refactor: put changed classes to 'org.yaml.snakeyaml' package. (2008-11-05) | py4fun
| Move all the main() methods to the corresponding test classes. (2008-11-05) | py4fun
| Change public interface. Rename YAML to Yaml. Remove all static methods from Yaml. Factory and configuration must be injected at the constructor. This way is closer to PyYAML API. (2008-11-05) | py4fun
| Reader as in PyYAML is implemented. BOM is properly supported (2008-11-05) | py4fun
| Restore Mark in Token as it is in PyYAML. Mark is not defined yet (2008-10-30) | py4fun
| Off-by-one in EmitterImpl.writeDoubleQuoted(). Fix issue: https://jvyaml.dev.java.net/issues/show_bug.cgi?id=11 (2008-10-28) | py4fun
| Respect Unicode characters. Fix issue: https://jvyaml.dev.java.net/issues/show_bug.cgi?id=10 (2008-10-28) | py4fun
| Respect sign for float. Fix issue: https://jvyaml.dev.java.net/issues/show_bug.cgi?id=13 (2008-10-28) | py4fun
| Binary data is represented as ByteBuffer (2008-10-27) | py4fun
| When parsed, a timestamp in the canonical form (i.e, 2001-12-15T02:59:43.1Z) is interpreted as if it is in the default time zone. Fix issue: https://jvyaml.dev.java.net/issues/show_bug.cgi?id=7 (2008-10-27) | py4fun
| Add Mark from PyYAML. It is not used yet. The JUnit test is migrated from PyYAML (2008-10-23) | py4fun
| Apply SnakeYAML as the name of the library (2008-10-22) | py4fun
| Reformat the source files (2008-10-22) | py4fun
| Apply LICENSE info to source files (2008-10-22) | py4fun
| Mavenize project. Apply standard Maven folder structure (2008-10-20) | py4fun

### Release 0.2.1 - 2008-10-20

Type | Changes | By
--- | --- | ---
| Import project from https://jvyaml.dev.java.net/ (2008-10-20) | py4fun