small refactoring

main
Matthew Butterick 8 years ago
parent eb7409cee2
commit 69dec279f1

@ -92,35 +92,24 @@
(public [@_doOpacity doOpacity])
(define (@_doOpacity fillOpacity strokeOpacity)
(when (or fillOpacity strokeOpacity)
(when fillOpacity
(set! fillOpacity (max 0 (min 1 fillOpacity))))
(when strokeOpacity
(set! strokeOpacity (max 0 (min 1 strokeOpacity))))
(set! fillOpacity (and fillOpacity (bounded 0 fillOpacity 1)))
(set! strokeOpacity (and strokeOpacity (bounded 0 strokeOpacity 1)))
(define key (format "~a_~a"
(if fillOpacity (number fillOpacity) "")
(if strokeOpacity (number strokeOpacity) "")))
(define dictionary #f)
(define name #f)
(cond
[(hash-has-key? @_opacityRegistry key)
(match-define (list d n) (hash-ref @_opacityRegistry key))
(set! dictionary d)
(set! name n)]
[else
(set! dictionary (mhash 'Type "ExtGState"))
(when fillOpacity
(hash-set! dictionary 'ca fillOpacity))
(when strokeOpacity
(hash-set! dictionary 'CA strokeOpacity))
(set! dictionary (send this ref dictionary))
(· dictionary end)
(++ @_opacityCount)
(define id @_opacityCount)
(set! name (format "Gs~a" id))
(hash-set! @_opacityRegistry key (list dictionary name))])
(match-define (list dictionary name)
(hash-ref! @_opacityRegistry key
(λ ()
(define dictionary (mhash 'Type "ExtGState"))
(when fillOpacity
(hash-set! dictionary 'ca fillOpacity))
(when strokeOpacity
(hash-set! dictionary 'CA strokeOpacity))
(define dict-ref (send this ref dictionary))
(· dict-ref end)
(list dict-ref (format "Gs~a" (++ @_opacityCount))))))
(hash-set! (· this page ext_gstates) name dictionary)
(send this addContent (format "/~a gs" name))))
@ -128,153 +117,153 @@
))
(define namedColors
(mhash "aliceblue" '(240 248 255)
"antiquewhite" '(250 235 215)
"aqua" '(0 255 255)
"aquamarine" '(127 255 212)
"azure" '(240 255 255)
"beige" '(245 245 220)
"bisque" '(255 228 196)
"black" '(0 0 0)
"blanchedalmond" '(255 235 205)
"blue" '(0 0 255)
"blueviolet" '(138 43 226)
"brown" '(165 42 42)
"burlywood" '(222 184 135)
"cadetblue" '(95 158 160)
"chartreuse" '(127 255 0)
"chocolate" '(210 105 30)
"coral" '(255 127 80)
"cornflowerblue" '(100 149 237)
"cornsilk" '(255 248 220)
"crimson" '(220 20 60)
"cyan" '(0 255 255)
"darkblue" '(0 0 139)
"darkcyan" '(0 139 139)
"darkgoldenrod" '(184 134 11)
"darkgray" '(169 169 169)
"darkgreen" '(0 100 0)
"darkgrey" '(169 169 169)
"darkkhaki" '(189 183 107)
"darkmagenta" '(139 0 139)
"darkolivegreen" '(85 107 47)
"darkorange" '(255 140 0)
"darkorchid" '(153 50 204)
"darkred" '(139 0 0)
"darksalmon" '(233 150 122)
"darkseagreen" '(143 188 143)
"darkslateblue" '(72 61 139)
"darkslategray" '(47 79 79)
"darkslategrey" '(47 79 79)
"darkturquoise" '(0 206 209)
"darkviolet" '(148 0 211)
"deeppink" '(255 20 147)
"deepskyblue" '(0 191 255)
"dimgray" '(105 105 105)
"dimgrey" '(105 105 105)
"dodgerblue" '(30 144 255)
"firebrick" '(178 34 34)
"floralwhite" '(255 250 240)
"forestgreen" '(34 139 34)
"fuchsia" '(255 0 255)
"gainsboro" '(220 220 220)
"ghostwhite" '(248 248 255)
"gold" '(255 215 0)
"goldenrod" '(218 165 32)
"gray" '(128 128 128)
"grey" '(128 128 128)
"green" '(0 128 0)
"greenyellow" '(173 255 47)
"honeydew" '(240 255 240)
"hotpink" '(255 105 180)
"indianred" '(205 92 92)
"indigo" '(75 0 130)
"ivory" '(255 255 240)
"khaki" '(240 230 140)
"lavender" '(230 230 250)
"lavenderblush" '(255 240 245)
"lawngreen" '(124 252 0)
"lemonchiffon" '(255 250 205)
"lightblue" '(173 216 230)
"lightcoral" '(240 128 128)
"lightcyan" '(224 255 255)
"lightgoldenrodyellow" '(250 250 210)
"lightgray" '(211 211 211)
"lightgreen" '(144 238 144)
"lightgrey" '(211 211 211)
"lightpink" '(255 182 193)
"lightsalmon" '(255 160 122)
"lightseagreen" '(32 178 170)
"lightskyblue" '(135 206 250)
"lightslategray" '(119 136 153)
"lightslategrey" '(119 136 153)
"lightsteelblue" '(176 196 222)
"lightyellow" '(255 255 224)
"lime" '(0 255 0)
"limegreen" '(50 205 50)
"linen" '(250 240 230)
"magenta" '(255 0 255)
"maroon" '(128 0 0)
"mediumaquamarine" '(102 205 170)
"mediumblue" '(0 0 205)
"mediumorchid" '(186 85 211)
"mediumpurple" '(147 112 219)
"mediumseagreen" '(60 179 113)
"mediumslateblue" '(123 104 238)
"mediumspringgreen" '(0 250 154)
"mediumturquoise" '(72 209 204)
"mediumvioletred" '(199 21 133)
"midnightblue" '(25 25 112)
"mintcream" '(245 255 250)
"mistyrose" '(255 228 225)
"moccasin" '(255 228 181)
"navajowhite" '(255 222 173)
"navy" '(0 0 128)
"oldlace" '(253 245 230)
"olive" '(128 128 0)
"olivedrab" '(107 142 35)
"orange" '(255 165 0)
"orangered" '(255 69 0)
"orchid" '(218 112 214)
"palegoldenrod" '(238 232 170)
"palegreen" '(152 251 152)
"paleturquoise" '(175 238 238)
"palevioletred" '(219 112 147)
"papayawhip" '(255 239 213)
"peachpuff" '(255 218 185)
"peru" '(205 133 63)
"pink" '(255 192 203)
"plum" '(221 160 221)
"powderblue" '(176 224 230)
"purple" '(128 0 128)
"red" '(255 0 0)
"rosybrown" '(188 143 143)
"royalblue" '(65 105 225)
"saddlebrown" '(139 69 19)
"salmon" '(250 128 114)
"sandybrown" '(244 164 96)
"seagreen" '(46 139 87)
"seashell" '(255 245 238)
"sienna" '(160 82 45)
"silver" '(192 192 192)
"skyblue" '(135 206 235)
"slateblue" '(106 90 205)
"slategray" '(112 128 144)
"slategrey" '(112 128 144)
"snow" '(255 250 250)
"springgreen" '(0 255 127)
"steelblue" '(70 130 180)
"tan" '(210 180 140)
"teal" '(0 128 128)
"thistle" '(216 191 216)
"tomato" '(255 99 71)
"turquoise" '(64 224 208)
"violet" '(238 130 238)
"wheat" '(245 222 179)
"white" '(255 255 255)
"whitesmoke" '(245 245 245)
"yellow" '(255 255 0)
"yellowgreen" '(154 205 50)))
(hash "aliceblue" '(240 248 255)
"antiquewhite" '(250 235 215)
"aqua" '(0 255 255)
"aquamarine" '(127 255 212)
"azure" '(240 255 255)
"beige" '(245 245 220)
"bisque" '(255 228 196)
"black" '(0 0 0)
"blanchedalmond" '(255 235 205)
"blue" '(0 0 255)
"blueviolet" '(138 43 226)
"brown" '(165 42 42)
"burlywood" '(222 184 135)
"cadetblue" '(95 158 160)
"chartreuse" '(127 255 0)
"chocolate" '(210 105 30)
"coral" '(255 127 80)
"cornflowerblue" '(100 149 237)
"cornsilk" '(255 248 220)
"crimson" '(220 20 60)
"cyan" '(0 255 255)
"darkblue" '(0 0 139)
"darkcyan" '(0 139 139)
"darkgoldenrod" '(184 134 11)
"darkgray" '(169 169 169)
"darkgreen" '(0 100 0)
"darkgrey" '(169 169 169)
"darkkhaki" '(189 183 107)
"darkmagenta" '(139 0 139)
"darkolivegreen" '(85 107 47)
"darkorange" '(255 140 0)
"darkorchid" '(153 50 204)
"darkred" '(139 0 0)
"darksalmon" '(233 150 122)
"darkseagreen" '(143 188 143)
"darkslateblue" '(72 61 139)
"darkslategray" '(47 79 79)
"darkslategrey" '(47 79 79)
"darkturquoise" '(0 206 209)
"darkviolet" '(148 0 211)
"deeppink" '(255 20 147)
"deepskyblue" '(0 191 255)
"dimgray" '(105 105 105)
"dimgrey" '(105 105 105)
"dodgerblue" '(30 144 255)
"firebrick" '(178 34 34)
"floralwhite" '(255 250 240)
"forestgreen" '(34 139 34)
"fuchsia" '(255 0 255)
"gainsboro" '(220 220 220)
"ghostwhite" '(248 248 255)
"gold" '(255 215 0)
"goldenrod" '(218 165 32)
"gray" '(128 128 128)
"grey" '(128 128 128)
"green" '(0 128 0)
"greenyellow" '(173 255 47)
"honeydew" '(240 255 240)
"hotpink" '(255 105 180)
"indianred" '(205 92 92)
"indigo" '(75 0 130)
"ivory" '(255 255 240)
"khaki" '(240 230 140)
"lavender" '(230 230 250)
"lavenderblush" '(255 240 245)
"lawngreen" '(124 252 0)
"lemonchiffon" '(255 250 205)
"lightblue" '(173 216 230)
"lightcoral" '(240 128 128)
"lightcyan" '(224 255 255)
"lightgoldenrodyellow" '(250 250 210)
"lightgray" '(211 211 211)
"lightgreen" '(144 238 144)
"lightgrey" '(211 211 211)
"lightpink" '(255 182 193)
"lightsalmon" '(255 160 122)
"lightseagreen" '(32 178 170)
"lightskyblue" '(135 206 250)
"lightslategray" '(119 136 153)
"lightslategrey" '(119 136 153)
"lightsteelblue" '(176 196 222)
"lightyellow" '(255 255 224)
"lime" '(0 255 0)
"limegreen" '(50 205 50)
"linen" '(250 240 230)
"magenta" '(255 0 255)
"maroon" '(128 0 0)
"mediumaquamarine" '(102 205 170)
"mediumblue" '(0 0 205)
"mediumorchid" '(186 85 211)
"mediumpurple" '(147 112 219)
"mediumseagreen" '(60 179 113)
"mediumslateblue" '(123 104 238)
"mediumspringgreen" '(0 250 154)
"mediumturquoise" '(72 209 204)
"mediumvioletred" '(199 21 133)
"midnightblue" '(25 25 112)
"mintcream" '(245 255 250)
"mistyrose" '(255 228 225)
"moccasin" '(255 228 181)
"navajowhite" '(255 222 173)
"navy" '(0 0 128)
"oldlace" '(253 245 230)
"olive" '(128 128 0)
"olivedrab" '(107 142 35)
"orange" '(255 165 0)
"orangered" '(255 69 0)
"orchid" '(218 112 214)
"palegoldenrod" '(238 232 170)
"palegreen" '(152 251 152)
"paleturquoise" '(175 238 238)
"palevioletred" '(219 112 147)
"papayawhip" '(255 239 213)
"peachpuff" '(255 218 185)
"peru" '(205 133 63)
"pink" '(255 192 203)
"plum" '(221 160 221)
"powderblue" '(176 224 230)
"purple" '(128 0 128)
"red" '(255 0 0)
"rosybrown" '(188 143 143)
"royalblue" '(65 105 225)
"saddlebrown" '(139 69 19)
"salmon" '(250 128 114)
"sandybrown" '(244 164 96)
"seagreen" '(46 139 87)
"seashell" '(255 245 238)
"sienna" '(160 82 45)
"silver" '(192 192 192)
"skyblue" '(135 206 235)
"slateblue" '(106 90 205)
"slategray" '(112 128 144)
"slategrey" '(112 128 144)
"snow" '(255 250 250)
"springgreen" '(0 255 127)
"steelblue" '(70 130 180)
"tan" '(210 180 140)
"teal" '(0 128 128)
"thistle" '(216 191 216)
"tomato" '(255 99 71)
"turquoise" '(64 224 208)
"violet" '(238 130 238)
"wheat" '(245 222 179)
"white" '(255 255 255)
"whitesmoke" '(245 245 245)
"yellow" '(255 255 0)
"yellowgreen" '(154 205 50)))
(define c (new (color-mixin object%)))

@ -16,7 +16,7 @@
(syntax-case stx ()
[(_ ref xs) #'(for/list ([x (in-list xs)]) (· x ref))]))
(define-syntax-rule (+= id thing) (set! id (+ id thing)))
(define-syntax-rule (+= id thing) (begin (set! id (+ id thing)) id))
(define-syntax-rule (++ id) (+= id 1))
(define-syntax-rule (-- id) (+= id -1))
(define-syntax-rule (-= id thing) (+= id (- thing)))
@ -67,7 +67,7 @@
;; fancy number->string. bounds are checked, inexact integers are coerced.
(define (number x)
(unless (< -1e21 x 1e21)
(unless (and (number? x) (< -1e21 x 1e21))
(raise-argument-error 'number "valid number" x))
(let ([x (/ (round (* x 1e6)) 1e6)])
(number->string (if (integer? x)
@ -92,4 +92,18 @@
(field [sum 0])
(define/public (add x) (set! sum (+ sum x)) this)))
(define sfo (new SFC))
(check-equal? (get-field sum (send*/fold sfo [add 1] [add 2] [add 3])) 6))
(check-equal? (get-field sum (send*/fold sfo [add 1] [add 2] [add 3])) 6))
(define (bounded low x high)
(if (high . < . low)
(bounded high x low)
(max low (min high x))))
(module+ test
(check-equal? (bounded 0 2 1) 1)
(check-equal? (bounded 1 2 0) 1)
(check-equal? (bounded 0 -2 1) 0)
(check-equal? (bounded 1 -2 0) 0)
(check-equal? (bounded 0 .5 1) 0.5)
(check-equal? (bounded 0 0 1) 0)
(check-equal? (bounded 0 1 1) 1))
Loading…
Cancel
Save