From 286a75c8ba8b225a8f5ce83e10b2789e60a4ed02 Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov Date: Sat, 22 Feb 2020 19:15:39 +0100 Subject: [PATCH] utils: Add read-org-variable-mapping. --- utils-tests.rkt | 6 +++++- utils.rkt | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/utils-tests.rkt b/utils-tests.rkt index 431b7ca..30894dd 100644 --- a/utils-tests.rkt +++ b/utils-tests.rkt @@ -49,4 +49,8 @@ (check-equal? (read-org-table "((\"a\" \"(and a b)\") (\"b\" \"(or b (not a))\"))") '(("a" "(and a b)") ("b" "(or b (not a))"))) (check-equal? (unstringify-pairs '(("a" . "1") ("b" . "(and a (not b))"))) - '((a . 1) (b . (and a (not b)))))) + '((a . 1) (b . (and a (not b))))) + (check-equal? (read-org-variable-mapping "((\"a\" \"(and a b)\") (\"b\" \"(or b (not a))\"))") + '((a and a b) (b or b (not a)))) + (check-equal? (read-org-variable-mapping "((\"a\" . \"(and a b)\") (\"b\" . \"(or b (not a))\"))") + '((a and a b) (b or b (not a))))) diff --git a/utils.rkt b/utils.rkt index 950ccb1..e32b6bc 100644 --- a/utils.rkt +++ b/utils.rkt @@ -16,7 +16,8 @@ [string->any (-> string? any/c)] [read-org-table (-> string? (listof any/c))] [unstringify-pairs (-> (listof (general-pair/c string? string?)) - (listof (general-pair/c symbol? any/c)))]) + (listof (general-pair/c symbol? any/c)))] + [read-org-variable-mapping (-> string? variable-mapping?)]) ;; Contracts (contract-out [variable-mapping? contract?] [string-variable-mapping? contract?] @@ -191,3 +192,8 @@ (cons (string->symbol key) (string->any val))] [(cons key val) ; also handle improper pairs (cons (string->symbol key) (string->any val))]))) + +;;; Reads a variable mapping from a string, such as the one which +;;; Org-mode produces from tables. +(define (read-org-variable-mapping str) + (unstringify-pairs (read-org-table str)))