Using racket serialization instead of simple reading of s-expressions.
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
(require racket/string)
|
(require racket/string)
|
||||||
(require racket/file)
|
(require racket/file)
|
||||||
(require racket/port)
|
(require racket/port)
|
||||||
|
(require racket/serialize)
|
||||||
|
|
||||||
(provide file->ini
|
(provide file->ini
|
||||||
ini->file
|
ini->file
|
||||||
@@ -49,8 +50,8 @@
|
|||||||
(set! last-is-newline #f)
|
(set! last-is-newline #f)
|
||||||
(display (cadr line) out)
|
(display (cadr line) out)
|
||||||
(display "=" out)
|
(display "=" out)
|
||||||
(display"VALUE:" out)
|
(display"SER:" out)
|
||||||
(write (caddr line) out)
|
(write (serialize (caddr line)) out)
|
||||||
(newline out))
|
(newline out))
|
||||||
(error "Unknown line format")))))
|
(error "Unknown line format")))))
|
||||||
lines))))
|
lines))))
|
||||||
@@ -63,23 +64,29 @@
|
|||||||
(define re-num #px"^([+]|[-])?([0-9]+([.]([0-9]+))?)$")
|
(define re-num #px"^([+]|[-])?([0-9]+([.]([0-9]+))?)$")
|
||||||
(define re-bool #px"^(#f|#t|true|false)$")
|
(define re-bool #px"^(#f|#t|true|false)$")
|
||||||
(define re-value #px"^VALUE:(.*)$")
|
(define re-value #px"^VALUE:(.*)$")
|
||||||
|
(define re-serialize #px"^SER:(.*)$")
|
||||||
|
|
||||||
(define (interpret s)
|
(define (interpret s)
|
||||||
(let ((m (regexp-match re-value s)))
|
(let ((sr (regexp-match re-serialize s)))
|
||||||
(if (eq? m #f)
|
(if (eq? sr #f)
|
||||||
(let ((ss (string-downcase (string-trim s))))
|
(let ((m (regexp-match re-value s)))
|
||||||
(let ((m-num (regexp-match re-num ss)))
|
(if (eq? m #f)
|
||||||
(if (eq? m-num #f)
|
(let ((ss (string-downcase (string-trim s))))
|
||||||
(let ((m-b (regexp-match re-bool ss)))
|
(let ((m-num (regexp-match re-num ss)))
|
||||||
(if (eq? m-b #f)
|
(if (eq? m-num #f)
|
||||||
s
|
(let ((m-b (regexp-match re-bool ss)))
|
||||||
(if (or (string=? ss "#t") (string=? ss "true"))
|
(if (eq? m-b #f)
|
||||||
#t
|
s
|
||||||
#f)
|
(if (or (string=? ss "#t") (string=? ss "true"))
|
||||||
))
|
#t
|
||||||
(string->number (car m-num)))))
|
#f)
|
||||||
(let* ((content (cadr m)))
|
))
|
||||||
(with-input-from-string content read)))))
|
(string->number (car m-num)))))
|
||||||
|
(let* ((content (cadr m)))
|
||||||
|
(with-handlers ([exn? (λ (e) content)])
|
||||||
|
(with-input-from-string content read)))))
|
||||||
|
(let ((content (cadr sr)))
|
||||||
|
(deserialize (with-input-from-string content read))))))
|
||||||
|
|
||||||
(define (file->ini file*)
|
(define (file->ini file*)
|
||||||
(let* ((file (get-ini-file file*))
|
(let* ((file (get-ini-file file*))
|
||||||
|
|||||||
Reference in New Issue
Block a user