Compare commits
4 Commits
Author | SHA1 | Date |
---|---|---|
Daniel Ziltener | d449ee8469 | |
Daniel Ziltener | b637ac6cab | |
Daniel Ziltener | 9611de7aa9 | |
Daniel Ziltener | 23ad941e04 |
|
@ -0,0 +1,2 @@
|
||||||
|
((scheme-mode . ((flymake-chicken-command-args . ("-X" "r7rs" "-R" "r7rs" "-X" "chalk"))
|
||||||
|
(geiser-scheme . 'chicken))))
|
|
@ -22,19 +22,21 @@ Data type conversions
|
||||||
|
|
||||||
Missing reader functionality
|
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
|
Should you notice missing functionality of the reader, plesase use [the issues
|
||||||
it and, if possible, provide a minimal test case.
|
page](https://gitea.lyrion.ch/Chicken/edn/issues) to report it and, if possible, provide a minimal
|
||||||
|
test case.
|
||||||
|
|
||||||
API
|
API
|
||||||
---
|
---
|
||||||
|
|
||||||
* Transforming EDN into Scheme: `(read-edn <port>)`
|
* Transforming EDN into Scheme: `(read-edn <port>)`
|
||||||
* Transforming Scheme into EDN: `(write-edn <port> <datastructure>)`
|
* Transforming Scheme into EDN: `(write-edn <port> <datastructure>)`
|
||||||
* Using reader tags: the library contains a public a-list `tag-handlers`. 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.
|
* 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
|
Releases
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
* **1.0**: Made the custom parsers a parameter.
|
||||||
* **0.5.2**: Update for Chicken 5
|
* **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.1**: Small compatibility improvements: "/" now starts a symbol as well, and "," is treated as whitespace.
|
||||||
* **0.5**: Reader tag support.
|
* **0.5**: Reader tag support.
|
||||||
|
|
22
edn-impl.scm
22
edn-impl.scm
|
@ -153,13 +153,13 @@
|
||||||
(and (char? x)
|
(and (char? x)
|
||||||
(fun x))))
|
(fun x))))
|
||||||
|
|
||||||
;;@(heading "Reading EDN")
|
@(==== "Reading EDN")
|
||||||
|
|
||||||
(define tag-handlers
|
(define tag-handlers
|
||||||
;;@("An a-list containing the handlers for reader tags. You can register your own reader tags by simply adding a new a-list entry.
|
@("An a-list containing the handlers for reader tags. You can register your own reader tags by simply adding a new a-list entry.
|
||||||
;;
|
|
||||||
;;Example for a tag \"#keywordify\": add the entry `(cons keywordify: keywordify-procedure)`.")
|
Example for a tag \"#keywordify\": add the entry `(cons keywordify: keywordify-procedure)`.")
|
||||||
(list (cons _: (lambda (input) edn/omit:))))
|
(make-parameter (list (cons _: (lambda (input) edn/omit:)))))
|
||||||
|
|
||||||
(define reader-handlers
|
(define reader-handlers
|
||||||
(list (cons (is-char? #\() edn->list)
|
(list (cons (is-char? #\() edn->list)
|
||||||
|
@ -182,10 +182,10 @@
|
||||||
(contains-tag-handler? (car in))))
|
(contains-tag-handler? (car in))))
|
||||||
|
|
||||||
(define (contains-tag-handler? tag)
|
(define (contains-tag-handler? tag)
|
||||||
(assoc (cdr tag) tag-handlers))
|
(assoc (cdr tag) (tag-handlers)))
|
||||||
|
|
||||||
(define (call-tag tag data)
|
(define (call-tag tag data)
|
||||||
((cdr (assoc (cdr tag) tag-handlers)) data))
|
((cdr (assoc (cdr tag) (tag-handlers))) data))
|
||||||
|
|
||||||
(define (parse-edn state)
|
(define (parse-edn state)
|
||||||
(lambda (in-port)
|
(lambda (in-port)
|
||||||
|
@ -204,7 +204,7 @@
|
||||||
(cdr result)))))
|
(cdr result)))))
|
||||||
|
|
||||||
(define (read-edn port)
|
(define (read-edn port)
|
||||||
;; @("Reads EDN data from given port, converts it to Chicken data and returns it. Precision suffixes for numbers get ignored, maps get converted to SRFI-69 hashtables, vectors to SRFI-4 vectors.")
|
@("Reads EDN data from given port, converts it to Chicken data and returns it. Precision suffixes for numbers get ignored, maps get converted to SRFI-69 hashtables, vectors to SRFI-4 vectors.")
|
||||||
(second ((parse-edn '()) port)))
|
(second ((parse-edn '()) port)))
|
||||||
|
|
||||||
;; EDN writing
|
;; EDN writing
|
||||||
|
@ -309,9 +309,9 @@
|
||||||
writer-handlers))
|
writer-handlers))
|
||||||
parse-entry in))
|
parse-entry in))
|
||||||
|
|
||||||
;;@(heading "Writing EDN")
|
@(==== "Writing EDN")
|
||||||
|
|
||||||
(define (write-edn port struct)
|
(define (write-edn port struct)
|
||||||
;; @("Converts Chicken data structures to EDN and writes it to the given port."
|
@("Converts Chicken data structures to EDN and writes it to the given port."
|
||||||
;; (struct "A Chicken data structure consisting of atoms, lists, vectors and hashtables."))
|
(struct "A Chicken data structure consisting of atoms, lists, vectors and hashtables."))
|
||||||
(display (parse-entry struct) port))
|
(display (parse-entry struct) port))
|
||||||
|
|
8
edn.egg
8
edn.egg
|
@ -4,10 +4,10 @@
|
||||||
(synopsis "EDN data reader/writer.")
|
(synopsis "EDN data reader/writer.")
|
||||||
(category parsing)
|
(category parsing)
|
||||||
(license "BSD")
|
(license "BSD")
|
||||||
(version "0.5.2")
|
(version "1.0")
|
||||||
(dependencies r7rs srfi-69 srfi-1 hahn)
|
(dependencies r7rs srfi-69 srfi-1 chalk)
|
||||||
(test-dependencies r7rs srfi-64 hahn)
|
(test-dependencies r7rs srfi-64 chalk)
|
||||||
(components (extension edn
|
(components (extension edn
|
||||||
(modules edn)
|
(modules edn)
|
||||||
(csc-options "-X" "r7rs" "-R" "r7rs" "-X" "hahn")
|
(csc-options "-X" "r7rs" "-R" "r7rs" "-X" "chalk")
|
||||||
)))
|
)))
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
(repo git "https:///gitea.lyrion.ch/zilti/edn.git")
|
(repo git "https:///gitea.lyrion.ch/Chicken/edn.git")
|
||||||
(uri targz "https://gitea.lyrion.ch/zilti/edn/archive/{egg-release}.tar.gz")
|
(uri targz "https://gitea.lyrion.ch/Chicken/edn/archive/{egg-release}.tar.gz")
|
||||||
(release "0.5.2")
|
(release "1.0") ;; Made the custom parsers a parameter
|
||||||
|
(release "0.5.3") ;; Replaced Hahn with Chalk
|
||||||
|
(release "0.5.2") ;; Update for Chicken 5
|
||||||
|
|
7
edn.scm
7
edn.scm
|
@ -1,9 +1,8 @@
|
||||||
@(heading "EDN")
|
@(== "EDN")
|
||||||
|
|
||||||
@(text "This egg provides a parser and a writer for the [[https://github.com/edn-format/edn|Extensible Data Notation]].")
|
@("This egg provides a parser and a writer for the [[https://github.com/edn-format/edn|Extensible Data Notation]].")
|
||||||
|
|
||||||
@(heading "Documentation")
|
@(==="Documentation")
|
||||||
@(noop)
|
|
||||||
|
|
||||||
(import r7rs)
|
(import r7rs)
|
||||||
(define-library (edn)
|
(define-library (edn)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
(import r7rs)
|
(import r7rs chalk)
|
||||||
(require-extension srfi-69 srfi-64 srfi-88 srfi-1)
|
(require-extension srfi-69 srfi-64 srfi-88 srfi-1)
|
||||||
;;(import (chicken port))
|
;;(import (chicken port))
|
||||||
(include "../edn-impl.scm")
|
(include "../edn-impl.scm")
|
||||||
|
@ -50,9 +50,9 @@
|
||||||
(test-begin "Tag handling")
|
(test-begin "Tag handling")
|
||||||
(test-equal (wifs "(1 2 #_ 3 4)" read-edn) '(1 2 4))
|
(test-equal (wifs "(1 2 #_ 3 4)" read-edn) '(1 2 4))
|
||||||
|
|
||||||
(set! tag-handlers (cons (cons keywordify:
|
(tag-handlers (cons (cons keywordify:
|
||||||
(lambda (input)
|
(lambda (input)
|
||||||
(string->keyword (symbol->string input))))
|
(string->keyword (symbol->string input))))
|
||||||
tag-handlers))
|
(tag-handlers)))
|
||||||
(test-equal (wifs "(asdf #keywordify qwertz)" read-edn) '(asdf qwertz:))
|
(test-equal (wifs "(asdf #keywordify qwertz)" read-edn) '(asdf qwertz:))
|
||||||
(test-end "Tag handling")
|
(test-end "Tag handling")
|
||||||
|
|
Loading…
Reference in New Issue