This commit is contained in:
2026-03-04 23:54:50 +01:00
parent 3a2abf90f6
commit a622739deb
11 changed files with 538 additions and 329 deletions

View File

@@ -14,7 +14,10 @@
fromJson
mk-js-array
js-code
kv?
list-of-kv?
list-of-symbol?
list-of?
)
(define-syntax while
@@ -82,12 +85,14 @@
(with-input-from-string str read-json))
(define (mk-js-array l)
(if (list? l)
(string-append "[ " (string-join (map (λ (e) (format "'~a'"
(esc-quote (format "~a" e)))) l) ", ") " ]")
(format "[ '~a' ]" (esc-quote (format "~a" l)))
)
)
(if (list-of-kv? l)
(string-append "[ " (string-join (map (λ (e) (mk-js-array e)) l) ", ") " ]")
(if (list? l)
(string-append "[ " (string-join (map (λ (e) (format "'~a'"
(esc-quote (format "~a" e)))) l) ", ") " ]")
(if (pair? l)
(format "[ '~a', '~a' ]" (car l) (cdr l))
(format "[ '~a' ]" (esc-quote (format "~a" l)))))))
(define (js-code . a)
(define (code* l)
@@ -97,21 +102,26 @@
)
)
(code* a))
(define (list-of-kv? l)
(define (kv? e)
(let ((e (car l)))
(and (list? e)
(= (length e) 2)
(symbol? (car e)))))
(define (all-kv? l)
(define (kv? e)
(or
(and (list? e) (= (length e) 2) (symbol? (car e)))
(and (pair? e) (symbol? (car e)))))
(define (list-of? pred? l)
(define (all-pred? l)
(if (null? l)
#t
(if (kv? (car e))
(all-kv? (cdr l))
(if (pred? (car l))
(all-pred? (cdr l))
#f)))
(if (list? l)
(all-kv? l)
(all-pred? l)
#f))
(define (list-of-kv? l)
(list-of? kv? l))
(define (list-of-symbol? l)
(list-of? symbol? l))