contracts

This commit is contained in:
Jay McCarthy 2018-01-01 19:22:00 -05:00
parent edb59bc2b7
commit 49c4383602
2 changed files with 128 additions and 67 deletions

111
main.rkt
View File

@ -192,19 +192,6 @@
(d (- r cr) (- c cc) ch)) (d (- r cr) (- c cc) ch))
r c)))) r c))))
(module+ test
(draw (crop 70 80 10 20
(matte 80 20
#:halign 'right
(fg 'blue
(frame #:fg 'red
(inset
4 5
(happend (style 'underline (text "Left"))
(blank 4)
(style 'bold (text "Right")))))))))
(newline))
(define (table rows (define (table rows
;; XXX add more options to frames ;; XXX add more options to frames
#:frames? [frames? #t] #:frames? [frames? #t]
@ -286,31 +273,73 @@
;; xxx text... (fit text inside a width) ;; xxx text... (fit text inside a width)
;; xxx paragraph (fit text inside a box) ;; xxx paragraph (fit text inside a box)
(module+ test (define style/c (apply or/c (hash-keys symbol->style)))
(draw (translate (define color/c (apply or/c (hash-keys symbol->color)))
2 10 (define valign/c (or/c 'top 'center 'bottom))
(table (define halign/c (or/c 'left 'center 'right))
#:frames? #t (provide
#:inset-dw 2 (contract-out
#:valign 'center [raart? (-> any/c boolean?)]
#:halign '(right left left left) [draw
(text-rows (->* (raart?)
`([ "ID" "First Name" "Last Name" "Grade"] (exact-positive-integer?
[70022 "John" "Smith" "A+"] exact-positive-integer?
[ 22 "Macumber" "Stark" "B"] #:clear? boolean?)
[ 1223 "Sarah" ,(vappend (text "Top") void?)]
(text "Mid") [style/c contract?]
(text "Bot")) "C"]))))) [style (-> style/c raart? raart?)]
(newline)) [color/c contract?]
[fg (-> color/c raart? raart?)]
(provide raart? [bg (-> color/c raart? raart?)]
draw [with-drawing
style fg bg with-drawing (-> (or/c style/c #f)
blank char text (or/c color/c #f)
hline vline (or/c color/c #f)
vappend2 vappend raart? raart?)]
happend2 happend [blank (->* () (exact-nonnegative-integer? exact-nonnegative-integer?) raart?)]
place-at place-at* [char (-> (and/c char? (not/c char-iso-control?)) raart?)]
frame [text (-> string? raart?)]
inset matte-at matte translate [hline (-> exact-nonnegative-integer? raart?)]
table text-rows) [vline (-> exact-nonnegative-integer? raart?)]
[vappend2 (-> raart? raart? raart?)]
[vappend (->* (raart?) () #:rest (listof raart?) raart?)]
[vappend* (-> (non-empty-listof raart?) raart?)]
[happend2 (-> raart? raart? raart?)]
[happend (->* (raart?) () #:rest (listof raart?) raart?)]
[happend* (-> (non-empty-listof raart?) raart?)]
[place-at (-> raart? exact-nonnegative-integer? exact-nonnegative-integer? raart?
raart?)]
[frame (->* (raart?)
(#:style (or/c style/c #f) #:fg (or/c color/c #f) #:bg (or/c color/c #f))
raart?)]
[matte-at (-> exact-nonnegative-integer? exact-nonnegative-integer?
exact-nonnegative-integer? exact-nonnegative-integer?
raart?
raart?)]
[translate (-> exact-nonnegative-integer? exact-nonnegative-integer?
raart? raart?)]
[halign/c contract?]
[valign/c contract?]
[matte (->* (exact-nonnegative-integer? exact-nonnegative-integer? raart?)
(#:halign halign/c #:valign valign/c)
raart?)]
[inset (-> exact-nonnegative-integer? exact-nonnegative-integer? raart? raart?)]
[mask (-> exact-nonnegative-integer? exact-nonnegative-integer?
exact-nonnegative-integer? exact-nonnegative-integer?
raart? raart?)]
[crop (-> exact-nonnegative-integer? exact-nonnegative-integer?
exact-nonnegative-integer? exact-nonnegative-integer?
raart? raart?)]
[table (->* ((listof (listof raart?)))
(#:frames? boolean?
#:style (or/c style/c #f)
#:fg (or/c color/c #f)
#:bg (or/c color/c #f)
#:inset-dw exact-nonnegative-integer?
#:inset-dh exact-nonnegative-integer?
#:valign valign/c
#:halign (or/c halign/c (list*of halign/c (or/c halign/c '()))))
raart?)]
[text-rows (-> (listof (listof any/c))
(listof (listof raart?)))])
place-at*)

32
t/draw.rkt Normal file
View File

@ -0,0 +1,32 @@
#lang racket/base
(require raart)
(module+ test
(draw (crop 70 80 10 20
(matte 80 20
#:halign 'right
(fg 'blue
(frame #:fg 'red
(inset
4 5
(happend (style 'underline (text "Left"))
(blank 4)
(style 'bold (text "Right")))))))))
(newline))
(module+ test
(draw (translate
2 10
(table
#:frames? #t
#:inset-dw 2
#:valign 'center
#:halign '(right left left left)
(text-rows
`([ "ID" "First Name" "Last Name" "Grade"]
[70022 "John" "Smith" "A+"]
[ 22 "Macumber" "Stark" "B"]
[ 1223 "Sarah" ,(vappend (text "Top")
(text "Mid")
(text "Bot")) "C"])))))
(newline))