75 lines
2.1 KiB
Racket
75 lines
2.1 KiB
Racket
(module alignment-helpers mzscheme
|
|
|
|
(require
|
|
mzlib/list
|
|
mzlib/class
|
|
mred
|
|
mzlib/contract
|
|
|
|
"interface.rkt"
|
|
"snip-lib.rkt")
|
|
|
|
(provide/contract
|
|
(vacuous-max (() (listof number?) . ->* . (number?)))
|
|
(child-height ((union (is-a?/c alignment<%>) (is-a?/c snip%)) . -> . number?))
|
|
(child-width ((union (is-a?/c alignment<%>) (is-a?/c snip%)) . -> . number?))
|
|
(insert-before (any/c (listof any/c) any/c . -> . (listof any/c)))
|
|
(insert-after (any/c (listof any/c) any/c . -> . (listof any/c))))
|
|
|
|
(define (vacuous-max . n)
|
|
(if (empty? n)
|
|
0
|
|
(apply max n)))
|
|
|
|
#|
|
|
(equal? (vacuous-max 5 2) 5)
|
|
(equal? (vacuous-max) 0)
|
|
(equal? (vacuous-max -2 6) 6)
|
|
(equal? (vacuous-max -3 -5) -3)
|
|
(equal? (vacuous-max -2 0) 0)
|
|
|#
|
|
|
|
(define (child-height item)
|
|
(cond
|
|
[(is-a? item snip%) (snip-min-height item)]
|
|
[(is-a? item alignment<%>) (send item get-min-height)]))
|
|
|
|
(define (child-width item)
|
|
(cond
|
|
[(is-a? item snip%) (snip-min-width item)]
|
|
[(is-a? item alignment<%>) (send item get-min-width)]))
|
|
|
|
(define ((insert how) item alist reference)
|
|
(cond
|
|
[(empty? alist) (error 'insert "Could not find item in list")]
|
|
[(cons? alist)
|
|
(if (equal? (first alist) reference)
|
|
(how item (first alist) (rest alist))
|
|
(cons (first alist)
|
|
((insert how) item (rest alist) reference)))]))
|
|
|
|
(define insert-before
|
|
(insert (lambda (item the-first the-rest)
|
|
(cons item
|
|
(cons the-first the-rest)))))
|
|
|
|
(define insert-after
|
|
(insert (lambda (item the-first the-rest)
|
|
(cons the-first
|
|
(cons item the-rest)))))
|
|
#|
|
|
(equal? (insert-before 1 '(3 4 2 5) 2)
|
|
'(3 4 1 2 5))
|
|
(equal? (insert-before 1 '(1) 1)
|
|
'(1 1))
|
|
(equal? (insert-before 0 '(5 -5 6 -5) -5)
|
|
'(5 0 -5 6 -5))
|
|
(equal? (insert-after 1 '(3 4 2 5) 2)
|
|
'(3 4 2 1 5))
|
|
(equal? (insert-after 1 '(1) 1)
|
|
'(1 1))
|
|
(equal? (insert-after 0 '(5 -5 6 -5) -5)
|
|
'(5 -5 0 6 -5))
|
|
|#
|
|
)
|