;;;; string-interpolation-syntax.scm -*- Scheme -*- ;;;; Kon Lovett, Jul '18 ;;;; Kon Lovett, Sep '17 (module string-interpolation-syntax (;export set-sharp-string-interpolation-syntax) (import scheme) (import (chicken base)) (import (chicken syntax)) (import (chicken read-syntax)) (import (chicken type)) (import (chicken port)) ;; (: set-sharp-string-interpolation-syntax ((or boolean procedure) -> void)) ;; (define (set-sharp-string-interpolation-syntax interpolator) (set-sharp-read-syntax! #\" (and interpolator (let ( (interpolator (if (procedure? interpolator) interpolator identity)) ) (lambda (rest-port) (call-with-input-string "\"" (lambda (head-port) ;forms [(") (body...")] so read as "...body..." (interpolator (read (make-concatenated-port head-port rest-port))) ) ) ) ) ) ) ) ) ;string-interpolation-syntax