no message
original commit: 3415dee4f14a0d2d91579d4960d551f9c0dbc63f
This commit is contained in:
parent
9ceb0382fb
commit
b1fb00799c
|
@ -2,8 +2,81 @@
|
||||||
(require (lib "mred.ss" "mred")
|
(require (lib "mred.ss" "mred")
|
||||||
(lib "class.ss")
|
(lib "class.ss")
|
||||||
(lib "etc.ss"))
|
(lib "etc.ss"))
|
||||||
(provide find-labelled-window)
|
(provide find-labelled-window whitespace-string=?)
|
||||||
|
|
||||||
|
;; whitespace-string=? : string string -> boolean
|
||||||
|
;; determines if two strings are equal, up to their whitespace.
|
||||||
|
;; each string is required to have whitespace in the same place,
|
||||||
|
;; but not necessarily the same kinds or amount.
|
||||||
|
(define (whitespace-string=? string1 string2)
|
||||||
|
(let loop ([i 0]
|
||||||
|
[j 0]
|
||||||
|
[in-whitespace? #t])
|
||||||
|
(cond
|
||||||
|
[(= i (string-length string1)) (only-whitespace? string2 j)]
|
||||||
|
[(= j (string-length string2)) (only-whitespace? string1 i)]
|
||||||
|
[else (let ([c1 (string-ref string1 i)]
|
||||||
|
[c2 (string-ref string2 j)])
|
||||||
|
(cond
|
||||||
|
[in-whitespace?
|
||||||
|
(cond
|
||||||
|
[(whitespace? c1)
|
||||||
|
(loop (+ i 1)
|
||||||
|
j
|
||||||
|
#t)]
|
||||||
|
[(whitespace? c2)
|
||||||
|
(loop i
|
||||||
|
(+ j 1)
|
||||||
|
#t)]
|
||||||
|
[else (loop i j #f)])]
|
||||||
|
[(and (whitespace? c1)
|
||||||
|
(whitespace? c2))
|
||||||
|
(loop (+ i 1)
|
||||||
|
(+ j 1)
|
||||||
|
#t)]
|
||||||
|
[(char=? c1 c2)
|
||||||
|
(loop (+ i 1)
|
||||||
|
(+ j 1)
|
||||||
|
#f)]
|
||||||
|
[else #f]))])))
|
||||||
|
|
||||||
|
;; whitespace? : char -> boolean
|
||||||
|
;; deteremines if `c' is whitespace
|
||||||
|
(define (whitespace? c)
|
||||||
|
(or (char=? c #\newline)
|
||||||
|
(char=? c #\space)
|
||||||
|
(char=? c #\tab)
|
||||||
|
(char=? c #\return)))
|
||||||
|
|
||||||
|
;; only-whitespace? : string number -> boolean
|
||||||
|
;; returns true if string only contains whitespace, from index `i' onwards
|
||||||
|
(define (only-whitespace? str i)
|
||||||
|
(let loop ([n i])
|
||||||
|
(cond
|
||||||
|
[(= n (string-length str))
|
||||||
|
#t]
|
||||||
|
[(whitespace? (string-ref str n))
|
||||||
|
(loop (+ n 1))]
|
||||||
|
[else #f])))
|
||||||
|
|
||||||
|
;; whitespace-string=? tests
|
||||||
|
'(map (lambda (x) (apply equal? x))
|
||||||
|
(list (list #t (whitespace-string=? "a" "a"))
|
||||||
|
(list #f (whitespace-string=? "a" "A"))
|
||||||
|
(list #f (whitespace-string=? "a" " "))
|
||||||
|
(list #f (whitespace-string=? " " "A"))
|
||||||
|
(list #t (whitespace-string=? " " " "))
|
||||||
|
(list #t (whitespace-string=? " " " "))
|
||||||
|
(list #t (whitespace-string=? " " " "))
|
||||||
|
(list #t (whitespace-string=? " " " "))
|
||||||
|
(list #t (whitespace-string=? "a a" "a a"))
|
||||||
|
(list #t (whitespace-string=? "a a" "a a"))
|
||||||
|
(list #t (whitespace-string=? "a a" "a a"))
|
||||||
|
(list #t (whitespace-string=? " a" "a"))
|
||||||
|
(list #t (whitespace-string=? "a" " a"))
|
||||||
|
(list #t (whitespace-string=? "a " "a"))
|
||||||
|
(list #t (whitespace-string=? "a" "a "))))
|
||||||
|
|
||||||
;;; find-labelled-window : (union ((union #f string) -> window<%>)
|
;;; find-labelled-window : (union ((union #f string) -> window<%>)
|
||||||
;;; ((union #f string) (union #f class) -> window<%>)
|
;;; ((union #f string) (union #f class) -> window<%>)
|
||||||
;;; ((union #f string) (union class #f) area-container<%> -> window<%>))
|
;;; ((union #f string) (union class #f) area-container<%> -> window<%>))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user