An EDN reader and writer for R7RS compatible Schemes.
[![License]https://img.shields.io/badge/license-BSD-blue.svg?style=flat]()
[![Chicken Scheme]https://img.shields.io/badge/Chicken-Scheme-ECC42F.svg?style=flat]https://www.call-cc.org/ 
[![Egg]https://img.shields.io/badge/Eggversion-0.5.2-blue.svg?style=flat]https://wiki.call-cc.org/eggref/4/edn
[![Gratipay]https://img.shields.io/liberapay/receives/zilti.svg?style=flat]https://liberapay.com/zilti
[![Flattr this]https://api.flattr.com/button/flattr-badge-small.png]https://flattr.com/submit/auto?user_id=zilti&url=https%3A%2F%2Fbitbucket.org%2Fzilti%2Fedn

chicken-edn
===========

An [EDN]https://github.com/edn-format/edn reader and writer for R7RS compatible Schemes.

Installation: `chicken-install edn`

Data type conversions
---------------------

 * All kinds of numbers get converted to Scheme numbers, precision suffixes (N and M) get ignored.
 * Keywords :keyword get converted to chicken scheme keywords keyword:.
 * Maps get converted to SRFI 69 hashtables.
 * Vectors are srfi-4 vectors.
 * true = #t, false = #f, nil = '()

Missing reader functionality
----------------------------
Should you notice missing functionality of the reader, plesase use [the issues page]https://gitea.lyrion.ch/zilti/edn/issues to report
it and, if possible, provide a minimal test case.

API
---

* Transforming EDN into Scheme: `(read-edn <port>)`
* Transforming Scheme into EDN: `(write-edn <port> <datastructure>)`
* Using reader tags: the library contains a parameter `tag-handlers` containing an a-list. To register a handler, add an a-list entry where the key is the tag without `\#` and as a keyword, and the value a one-argument procedure.

Releases
--------

 * **1.0**: Made the custom parsers a parameter.
 * **0.5.2**: Update for Chicken 5
 * **0.5.1**: Small compatibility improvements: "/" now starts a symbol as well, and "," is treated as whitespace.
 * **0.5**: Reader tag support.
 * **0.4**: Complete rewrite. Only relies on R7RS, and SRFI 1, 4, 69 and 88. Uses ports. Reads and writes EDN.
 * **0.3**: EDN tags, including special forms, work. #inst and #uuid both get read as strings. Add nil. Add number prefixes. Add no-space-required to #_ tag.
 * **0.2.1**: Can read EDN-files and -strings. EDN tags are not working yet.
 * **0.2**: Can read EDN-strings with one top-level data structure.

Roadmap
-------


About
-----
Written by Daniel Ziltener. EDN written by Rich Hickey. The EDN specification is available at [https://github.com/edn-format/edn]https://github.com/edn-format/edn.