From 38e21258036557561952872f435707a76b5c9223 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 29 Oct 2018 17:12:50 -0700 Subject: [PATCH] whitespace --- pollen/private/ts.rktd | 2 +- pollen/private/whitespace.rkt | 45 ++++++++++++++++------------------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/pollen/private/ts.rktd b/pollen/private/ts.rktd index c4a87a7..987d285 100644 --- a/pollen/private/ts.rktd +++ b/pollen/private/ts.rktd @@ -1 +1 @@ -1540858366 +1540858370 diff --git a/pollen/private/whitespace.rkt b/pollen/private/whitespace.rkt index 7eb260e..59be871 100644 --- a/pollen/private/whitespace.rkt +++ b/pollen/private/whitespace.rkt @@ -1,34 +1,29 @@ #lang racket/base +(require racket/match) (provide (all-defined-out)) (define (whitespace-base x #:nbsp-is-white? nbsp-white?) - (define pat (pregexp (format "^[\\s~a]+$" (if nbsp-white? #\u00A0 "")))) - (and (let loop ([x x]) - (cond - [(string? x) (or (zero? (string-length x)) (regexp-match pat x))] ; empty string is deemed whitespace - [(symbol? x) (loop (symbol->string x))] - [(pair? x) (andmap loop x)] - [(vector? x) (loop (vector->list x))] - [else #f])) - #t)) + (define white-pat (pregexp (format "^[\\s~a]+$" (if nbsp-white? #\u00A0 "")))) + (let loop ([x x]) + (match x + ["" #true] ; empty string is deemed whitespace + [(pregexp white-pat) #true] + [(? symbol?) (loop (symbol->string x))] + [(? pair?) (andmap loop x)] + [(? vector?) (loop (vector->list x))] + [_ #false]))) +(define (whitespace? x) (whitespace-base x #:nbsp-is-white? #f)) -(define (whitespace? x) - (whitespace-base x #:nbsp-is-white? #f)) - - -(define not-whitespace? (λ (x) (not (whitespace? x)))) - - -(define (whitespace/nbsp? x) - (whitespace-base x #:nbsp-is-white? #t)) +(define (not-whitespace? x) (not (whitespace? x))) +(define (whitespace/nbsp? x) (whitespace-base x #:nbsp-is-white? #t)) (module+ test - (require rackunit racket/format) - (check-true (whitespace? " ")) - (check-false (whitespace? (~a #\u00A0))) - (check-true (whitespace/nbsp? (~a #\u00A0))) - (check-true (whitespace/nbsp? (vector (~a #\u00A0)))) - (check-false (whitespace? (format " ~a " #\u00A0))) - (check-true (whitespace/nbsp? (format " ~a " #\u00A0)))) \ No newline at end of file + (require rackunit racket/format) + (check-true (whitespace? " ")) + (check-false (whitespace? (~a #\u00A0))) + (check-true (whitespace/nbsp? (~a #\u00A0))) + (check-true (whitespace/nbsp? (vector (~a #\u00A0)))) + (check-false (whitespace? (format " ~a " #\u00A0))) + (check-true (whitespace/nbsp? (format " ~a " #\u00A0)))) \ No newline at end of file