From 5c644624c42c12c0b5180574d428bfa62e78bad2 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 25 May 2021 11:04:51 +0200 Subject: [PATCH] detect-preserve-syntax, file->preserves --- .../racket/preserves/preserves/main.rkt | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/implementations/racket/preserves/preserves/main.rkt b/implementations/racket/preserves/preserves/main.rkt index ae92210..cc435ac 100644 --- a/implementations/racket/preserves/preserves/main.rkt +++ b/implementations/racket/preserves/preserves/main.rkt @@ -11,7 +11,12 @@ (all-from-out "write-binary.rkt") (all-from-out "write-text.rkt") - read-preserve) + detect-preserve-syntax + read-preserve + file->preserves) + +(require racket/match) +(require (only-in racket/file file->list)) (require "record.rkt") (require "float.rkt") @@ -23,16 +28,31 @@ (require "write-binary.rkt") (require "write-text.rkt") +(define (detect-preserve-syntax [in-port (current-input-port)]) + (define b (peek-byte in-port)) + (cond [(eof-object? b) b] + [(<= #x80 b #xBF) 'binary] + [else 'text])) + (define (read-preserve [in-port (current-input-port)] #:read-syntax? [read-syntax? #f] #:decode-embedded [decode-embedded #f] #:source [source (object-name in-port)]) - (define b (peek-byte in-port)) - (cond [(eof-object? b) b] - [(<= #x80 b #xBF) (read-preserve/binary in-port - #:read-syntax? read-syntax? - #:decode-embedded decode-embedded)] - [else (read-preserve/text in-port - #:read-syntax? read-syntax? - #:decode-embedded decode-embedded - #:source source)])) + (match (detect-preserve-syntax in-port) + [(? eof-object? e) e] + ['binary (read-preserve/binary in-port + #:read-syntax? read-syntax? + #:decode-embedded decode-embedded)] + ['text (read-preserve/text in-port + #:read-syntax? read-syntax? + #:decode-embedded decode-embedded + #:source source)])) + +(define (file->preserves path + #:read-syntax? [read-syntax? #f] + #:decode-embedded [decode-embedded #f]) + (file->list path (lambda (in-port) + (read-preserve in-port + #:read-syntax? read-syntax? + #:decode-embedded decode-embedded + #:source path))))