From c239a218852f58451aba9cca0177eb7d757bad62 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sun, 8 Nov 2009 22:00:07 +0000 Subject: [PATCH] added text and text/font (but with some problems still) and changed the image saving setup so the filenames are not so long svn: r16623 --- collects/2htdp/image.ss | 2 + collects/2htdp/private/image-more.ss | 61 ++++++++- collects/mrlib/image-core.ss | 90 +++++++++--- .../teachpack/2htdp/scribblings/image-gen.ss | 36 ++--- .../teachpack/2htdp/scribblings/image-toc.ss | 128 ++++++++++++++++++ .../teachpack/2htdp/scribblings/image-util.ss | 17 ++- .../teachpack/2htdp/scribblings/image.scrbl | 42 +++++- ...{_circle_30__outline___red__.png => 0.png} | Bin .../{_circle_20__solid___blue__.png => 1.png} | Bin .../{_star_40__solid___gray__.png => 10.png} | Bin ..._40_5_2__solid___seagreen__.png => 11.png} | Bin ...40_7_3__outline___darkred__.png => 12.png} | Bin ...3__solid___cornflowerblue__.png => 13.png} | Bin .../teachpack/2htdp/scribblings/img/14.png | Bin 0 -> 1073 bytes .../teachpack/2htdp/scribblings/img/15.png | Bin 0 -> 3766 bytes .../teachpack/2htdp/scribblings/img/16.png | Bin 0 -> 1058 bytes .../teachpack/2htdp/scribblings/img/17.png | Bin 0 -> 1485 bytes .../teachpack/2htdp/scribblings/img/18.png | Bin 0 -> 1388 bytes ...le_30_60__solid___orange___.png => 19.png} | Bin ...pse_40_20__outline___black__.png => 2.png} | Bin ...pse_70_70__solid___black___.png => 20.png} | Bin ...se_60_30__solid___purple___.png => 21.png} | Bin ...gle_50_50__solid___black___.png => 22.png} | Bin ..._10__solid___forestgreen___.png => 23.png} | Bin ...e_10_10__outline___black___.png => 24.png} | Bin ...uote_solid___quote_black___.png => 25.png} | Bin ...uote_solid___quote_black___.png => 26.png} | Bin ...pse_20_10__solid___black___.png => 27.png} | Bin ...ipse_20_10__solid___navy___.png => 28.png} | Bin ...se_20_10__solid___indigo___.png => 29.png} | Bin ...llipse_20_40__solid___blue__.png => 3.png} | Bin .../teachpack/2htdp/scribblings/img/30.png | Bin 0 -> 990 bytes ...60_20__solid___olivedrab___.png => 31.png} | Bin ...e_50_50__outline___black___.png => 32.png} | Bin ...lipse_40_60__solid___blue__.png => 33.png} | Bin ...ipse_20_30__solid___blue___.png => 34.png} | Bin ...lipse_60_60__solid___blue__.png => 35.png} | Bin ...ipse_20_30__solid___blue___.png => 36.png} | Bin ...e_20_20__outline___black___.png => 37.png} | Bin ...ipse_20_10__solid___navy___.png => 38.png} | Bin ..._20__outline___quote_black__.png => 4.png} | Bin ..._20_40__solid___quote_blue__.png => 5.png} | Bin ...olygon_30_3__outline___red__.png => 6.png} | Bin ...lygon_20_4__outline___blue__.png => 7.png} | Bin ...-polygon_20_6__solid___red__.png => 8.png} | Bin ...{_triangle_40__solid___tan__.png => 9.png} | Bin ...ray____ellipse_10_10__solid___black___.png | Bin 1439 -> 0 bytes ...____ellipse_20_10__solid___navyblue___.png | Bin 2264 -> 0 bytes .../img/_ellipse_120_120__solid___blue__.png | Bin 2141 -> 0 bytes .../img/_ellipse_80_120__solid___blue__.png | Bin 1768 -> 0 bytes ...k____rectangle_50_50__solid___black___.png | Bin 241 -> 0 bytes ...ack____rectangle_20_20__solid___red___.png | Bin 214 -> 0 bytes ...10_10__quote_solid___quote_lavender___.png | Bin 1230 -> 0 bytes ..._10_10__quote_outline___quote_black___.png | Bin 121 -> 0 bytes ...-10__rectangle_10_10__solid___black___.png | Bin 142 -> 0 bytes ..._10__rectangle_10_10__solid___black___.png | Bin 144 -> 0 bytes ...5__rectangle_40_40__outline___black___.png | Bin 645 -> 0 bytes ...cale_2__ellipse_40_60__solid___blue___.png | Bin 1768 -> 0 bytes ...xy_3_2__ellipse_40_60__solid___blue___.png | Bin 2141 -> 0 bytes 59 files changed, 332 insertions(+), 44 deletions(-) create mode 100644 collects/teachpack/2htdp/scribblings/image-toc.ss rename collects/teachpack/2htdp/scribblings/img/{_circle_30__outline___red__.png => 0.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_circle_20__solid___blue__.png => 1.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_star_40__solid___gray__.png => 10.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_star-polygon_40_5_2__solid___seagreen__.png => 11.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_star-polygon_40_7_3__outline___darkred__.png => 12.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_star-polygon_20_10_3__solid___cornflowerblue__.png => 13.png} (100%) create mode 100644 collects/teachpack/2htdp/scribblings/img/14.png create mode 100644 collects/teachpack/2htdp/scribblings/img/15.png create mode 100644 collects/teachpack/2htdp/scribblings/img/16.png create mode 100644 collects/teachpack/2htdp/scribblings/img/17.png create mode 100644 collects/teachpack/2htdp/scribblings/img/18.png rename collects/teachpack/2htdp/scribblings/img/{_overlay__ellipse_60_30__solid___purple____rectangle_30_60__solid___orange___.png => 19.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_ellipse_40_20__outline___black__.png => 2.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_overlay__ellipse_10_10__solid___red____ellipse_30_30__solid___black____ellipse_50_50__solid___red____ellipse_70_70__solid___black___.png => 20.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_overlay_places__middle___middle___rectangle_30_60__solid___orange____ellipse_60_30__solid___purple___.png => 21.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_overlay_places__right___bottom___rectangle_20_20__solid___red____rectangle_30_30__solid___black____rectangle_40_40__solid___red____rectangle_50_50__solid___black___.png => 22.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_overlay_xy__ellipse_40_40__outline___black___25_25__ellipse_10_10__solid___forestgreen___.png => 23.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_overlay_xy__rectangle_10_10__outline___red___10_0__rectangle_10_10__outline___black___.png => 24.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_overlay_xy__rectangle_10_10__quote_solid___quote_red___10_10__rectangle_10_10__quote_solid___quote_black___.png => 25.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_overlay_xy__rectangle_10_10__quote_solid___quote_red___-10_-10__rectangle_10_10__quote_solid___quote_black___.png => 26.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_beside__ellipse_20_70__solid___gray____ellipse_20_50__solid___darkgray____ellipse_20_30__solid___dimgray____ellipse_20_10__solid___black___.png => 27.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_beside_places__bottom___ellipse_20_70__solid___lightsteelblue____ellipse_20_50__solid___mediumslateblue____ellipse_20_30__solid___slateblue____ellipse_20_10__solid___navy___.png => 28.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_beside_places__center___ellipse_20_70__solid___mediumorchid____ellipse_20_50__solid___darkorchid____ellipse_20_30__solid___purple____ellipse_20_10__solid___indigo___.png => 29.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_ellipse_20_40__solid___blue__.png => 3.png} (100%) create mode 100644 collects/teachpack/2htdp/scribblings/img/30.png rename collects/teachpack/2htdp/scribblings/img/{_rotate_45__ellipse_60_20__solid___olivedrab___.png => 31.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_rotate_5__rectangle_50_50__outline___black___.png => 32.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_ellipse_40_60__solid___blue__.png => 33.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_scale_2__ellipse_20_30__solid___blue___.png => 34.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_ellipse_60_60__solid___blue__.png => 35.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_scale_xy_3_2__ellipse_20_30__solid___blue___.png => 36.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_frame__ellipse_20_20__outline___black___.png => 37.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_beside_places__bottom___ellipse_20_70__solid___lightsteelblue____frame__ellipse_20_50__solid___mediumslateblue_____ellipse_20_30__solid___slateblue____ellipse_20_10__solid___navy___.png => 38.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_rectangle_40_20__outline___quote_black__.png => 4.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_rectangle_20_40__solid___quote_blue__.png => 5.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_regular-polygon_30_3__outline___red__.png => 6.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_regular-polygon_20_4__outline___blue__.png => 7.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_regular-polygon_20_6__solid___red__.png => 8.png} (100%) rename collects/teachpack/2htdp/scribblings/img/{_triangle_40__solid___tan__.png => 9.png} (100%) delete mode 100644 collects/teachpack/2htdp/scribblings/img/_beside__ellipse_10_70__solid___gray____ellipse_10_50__solid___darkgray____ellipse_10_30__solid___dimgray____ellipse_10_10__solid___black___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_beside_places__bottom___ellipse_20_70__solid___lightsteelblue____ellipse_20_50__solid___mediumslateblue____ellipse_20_30__solid___slateblue____ellipse_20_10__solid___navyblue___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_ellipse_120_120__solid___blue__.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_ellipse_80_120__solid___blue__.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_overlay_places__right___bottom___rectangle_20_20__solid___red____rectangle_40_40__solid___red____rectangle_30_30__solid___black____rectangle_50_50__solid___black___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_overlay_places__right___bottom___rectangle_50_50__solid___black____rectangle_40_40__solid___red____rectangle_30_30__solid___black____rectangle_20_20__solid___red___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_overlay_xy__ellipse_40_40__quote_outline___quote_black___25_25__ellipse_10_10__quote_solid___quote_lavender___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_overlay_xy__rectangle_10_10__quote_outline___quote_red___10_0__rectangle_10_10__quote_outline___quote_black___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_overlay_xy__rectangle_10_10__solid___red___-10_-10__rectangle_10_10__solid___black___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_overlay_xy__rectangle_10_10__solid___red___10_10__rectangle_10_10__solid___black___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_rotate_5__rectangle_40_40__outline___black___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_scale_2__ellipse_40_60__solid___blue___.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/_scale_xy_3_2__ellipse_40_60__solid___blue___.png diff --git a/collects/2htdp/image.ss b/collects/2htdp/image.ss index b3390d3b06..cf2e476d67 100644 --- a/collects/2htdp/image.ss +++ b/collects/2htdp/image.ss @@ -71,6 +71,8 @@ and they all have good sample contracts. (It is amazing what we can do with kids star star-polygon triangle + text + text/font x-place? y-place? diff --git a/collects/2htdp/private/image-more.ss b/collects/2htdp/private/image-more.ss index 9a38042193..a183c8d033 100644 --- a/collects/2htdp/private/image-more.ss +++ b/collects/2htdp/private/image-more.ss @@ -46,6 +46,9 @@ star star-polygon + text + text/font + swizzle) @@ -235,6 +238,26 @@ (if (send the-color-database find-color color-str) color-str "black"))] + [(string) + (check-arg fn-name (string? arg) 'string i arg) + arg] + [(font-size) + (check-arg fn-name (and (integer? arg) (<= 1 arg 255)) 'font-size i arg) + arg] + [(face) + (check-arg fn-name (or (not arg) (string? arg)) 'face i arg) + arg] + [(family) + (check-arg fn-name (memq arg '(default decorative roman script swiss modern symbol system)) 'family i arg) + arg] + [(style) + (check-arg fn-name (memq arg '(normal italic slant)) 'style i arg) + arg] + [(weight) + (check-arg fn-name (memq arg '(normal bold light)) 'weight i arg) + arg] + [(underline) + (and arg #t)] [else (error 'check "the function ~a has an argument with an unknown name: ~s" fn-name @@ -558,7 +581,14 @@ [(text? atomic-shape) (make-text (text-string atomic-shape) (bring-between (+ θ (text-angle atomic-shape)) 360) - (text-font atomic-shape))] + (text-y-scale atomic-shape) + (text-color atomic-shape) + (text-size atomic-shape) + (text-face atomic-shape) + (text-family atomic-shape) + (text-style atomic-shape) + (text-weight atomic-shape) + (text-underline atomic-shape))] [(bitmap? atomic-shape) (make-bitmap (bitmap-raw-bitmap atomic-shape) (bitmap-raw-mask atomic-shape) @@ -626,6 +656,35 @@ ;; line ;; text +;; this is just so that 'text' objects can be sized. +(define text-sizing-bm (make-object bitmap-dc% (make-object bitmap% 1 1))) + +(define/chk (text string font-size color) + (mk-text string font-size color #f 'swiss 'normal 'normal #f)) + +(define/chk (text/font string font-size color face family style weight underline) + (mk-text string font-size color face family style weight underline)) + +(define (mk-text str font-size color face family style weight underline) + (cond + [(<= (string-length str) 1) + (mk-single-text str font-size color face family style weight underline)] + [else + (let ([letters (string->list str)]) + (beside/internal + 'baseline + (mk-single-text (string (car letters)) font-size color face family style weight underline) + (map (λ (letter) + (mk-single-text (string letter) font-size color face family style weight underline)) + (cdr letters))))])) + +(define (mk-single-text letter font-size color face family style weight underline) + (let ([text (make-text letter 0 1 color font-size face family style weight underline)]) + (let-values ([(w h a d) (send text-sizing-bm get-text-extent letter (text->font text))]) + (make-image text + (make-bb w h d) + #f)))) + (define/chk (triangle side-length mode color) (make-polygon/star side-length 3 mode color values)) diff --git a/collects/mrlib/image-core.ss b/collects/mrlib/image-core.ss index e5b1ce6d40..dd7a2f05fd 100644 --- a/collects/mrlib/image-core.ss +++ b/collects/mrlib/image-core.ss @@ -13,6 +13,16 @@ use of this library is the snip class addition it does (and any code that that does not depend on has been moved out). + +-- in the middle of text: + + - bounding boxes + - rotating (and bounding boxes) + - hbl append(?) + - this doesn't work (how to test?) +(beside/places "baseline" + (text "ijy" 12 'black) + (text "ijy" 24 'black)) |# (require scheme/class @@ -115,9 +125,11 @@ has been moved out). ;; - (make-ellipse width height angle mode color) (define-struct/reg-mk ellipse (width height angle mode color) #:transparent #:omit-define-syntaxes) ;; -;; - (make-text string angle font) +;; - (make-text string angle number color +;; number (or/c #f string) family (or/c 'normal 'italic) (or/c 'normal 'light 'bold) boolean) ;; NOTE: font can't be the raw mred font or else copy & paste won't work -(define-struct/reg-mk text (string angle font) #:omit-define-syntaxes #:transparent) +(define-struct/reg-mk text (string angle y-scale color size face family style weight underline) + #:omit-define-syntaxes #:transparent) ;; ;; - (make-bitmap (is-a?/c bitmap%) angle positive-real (or/c #f (is-a?/c bitmap%))) ;; NOTE: bitmap copying needs to happen in 'write' and 'read' methods @@ -355,11 +367,20 @@ has been moved out). (ellipse-angle shape) (ellipse-mode shape) (ellipse-color shape))] - [(text? shape) - (unless (and (= 1 x-scale) - (= 1 y-scale)) - (fprintf (current-error-port) "scaling text, ignoring\n")) - shape] + [(text? shape) + ;; should probably do something different here so that + ;; the y-scale is always greater than 1 + ;; (or else always smaller than 1) + (make-text (text-string shape) + (text-angle shape) + (* (text-y-scale shape) (/ y-scale x-scale)) + (text-color shape) + (* (text-size shape) x-scale) + (text-face shape) + (text-family shape) + (text-style shape) + (text-weight shape) + (text-underline shape))] [(bitmap? shape) (unless (and (= 1 x-scale) (= 1 y-scale)) @@ -388,13 +409,21 @@ has been moved out). ;; render-image : normalized-shape dc dx dy -> void (define (render-image image dc dx dy) - (let loop ([shape (send image get-normalized-shape)]) - (cond - [(overlay? shape) - (render-simple-shape (overlay-bottom shape) dc dx dy) - (loop (overlay-top shape))] - [else - (render-simple-shape shape dc dx dy)]))) + (let ([pen (send dc get-pen)] + [brush (send dc get-brush)] + [font (send dc get-font)] + [fg (send dc get-text-foreground)]) + (let loop ([shape (send image get-normalized-shape)]) + (cond + [(overlay? shape) + (render-simple-shape (overlay-bottom shape) dc dx dy) + (loop (overlay-top shape))] + [else + (render-simple-shape shape dc dx dy)])) + (send dc set-pen pen) + (send dc set-brush brush) + (send dc set-font font) + (send dc set-text-foreground fg))) (define (render-simple-shape simple-shape dc dx dy) (cond @@ -442,9 +471,31 @@ has been moved out). (send the-color-database find-color "black") (bitmap-raw-mask atomic-shape))] [(text? atomic-shape) - (let ([θ (degrees->radians (text-angle atomic-shape))]) - (send dc set-font (text-font atomic-shape)) - (send dc draw-text (text-string atomic-shape) dx dy #f 0 angle))]))])) + (let ([θ (degrees->radians (text-angle atomic-shape))] + [font (send dc get-font)]) + (send dc set-font (text->font atomic-shape)) + (send dc set-text-foreground + (or (send the-color-database find-color (text-color atomic-shape)) + (send the-color-database find-color "black"))) + (send dc draw-text (text-string atomic-shape) dx dy #f 0 θ))]))])) + +(define (text->font text) + (cond + [(text-face text) + (send the-font-list find-or-create-font + (text-size text) + (text-face text) + (text-family text) + (text-style text) + (text-weight text) + (text-underline text))] + [else + (send the-font-list find-or-create-font + (text-size text) + (text-family text) + (text-style text) + (text-weight text) + (text-underline text))])) (define (ellipse-rotated-size ew eh θ) (cond @@ -490,7 +541,8 @@ has been moved out). make-translate translate? translate-dx translate-dy translate-shape make-scale scale-x scale-y scale-shape make-ellipse ellipse? ellipse-width ellipse-height ellipse-angle ellipse-mode ellipse-color - make-text text? text-string text-angle text-font + make-text text? text-string text-angle text-y-scale text-color + text-angle text-size text-face text-family text-style text-weight text-underline make-polygon polygon? polygon-points polygon-mode polygon-color make-bitmap bitmap? bitmap-raw-bitmap bitmap-raw-mask bitmap-angle bitmap-scale bitmap-rendered-bitmap @@ -503,6 +555,8 @@ has been moved out). image-bottom image-baseline + text->font + render-image) ;; method names diff --git a/collects/teachpack/2htdp/scribblings/image-gen.ss b/collects/teachpack/2htdp/scribblings/image-gen.ss index 3ef075b6e7..7089439816 100644 --- a/collects/teachpack/2htdp/scribblings/image-gen.ss +++ b/collects/teachpack/2htdp/scribblings/image-gen.ss @@ -1,7 +1,6 @@ #lang scheme/gui -(require 2htdp/private/image-more - "image-util.ss") +(require 2htdp/private/image-more) (define-namespace-anchor anchor) (define ns (namespace-anchor->namespace anchor)) @@ -23,22 +22,23 @@ (define-namespace-anchor image-anchor) (define image-ns (namespace-anchor->namespace anchor)) -(define (handle-image exp) - (printf "saving ~s\n" exp) - (parameterize ([current-namespace image-ns]) - (save-image (eval exp) - (build-path "img" (exp->filename exp))))) +(define mapping '()) -(let ([ht (make-hash)]) - (for-each - (λ (exp) - (when (hash-ref ht (exp->filename exp) #f) - (error 'image-gen.ss - "~s and ~s go to the same string, namely ~s" - (hash-ref ht (exp->filename exp)) - exp - (exp->filename exp))) - (hash-set! ht (exp->filename exp) exp)) - expressions)) +(define (handle-image exp) + (let* ([i (length mapping)] + [fn (format "~a.png" i)]) + (printf "saving ~s\n" exp) + (set! mapping (cons (list exp fn) mapping)) + (parameterize ([current-namespace image-ns]) + (save-image (eval exp) + (build-path "img" fn))))) (for-each handle-image expressions) +(call-with-output-file "image-toc.ss" + (λ (port) + (fprintf port "#lang scheme/base\n(provide mapping)\n") + (fprintf port ";; this file is generated by image-gen.ss -- do not edit\n\n") + (pretty-print + `(define mapping (list ,@(map (λ (l) `(list ',(car l) ,(cadr l))) mapping))) + port)) + #:exists 'truncate) diff --git a/collects/teachpack/2htdp/scribblings/image-toc.ss b/collects/teachpack/2htdp/scribblings/image-toc.ss new file mode 100644 index 0000000000..83cb660056 --- /dev/null +++ b/collects/teachpack/2htdp/scribblings/image-toc.ss @@ -0,0 +1,128 @@ +#lang scheme/base +(provide mapping) +;; this file is generated by image-gen.ss -- do not edit + +(define mapping + (list + (list + '(beside/places + "bottom" + (ellipse 20 70 "solid" "lightsteelblue") + (frame (ellipse 20 50 "solid" "mediumslateblue")) + (ellipse 20 30 "solid" "slateblue") + (ellipse 20 10 "solid" "navy")) + "38.png") + (list '(frame (ellipse 20 20 "outline" "black")) "37.png") + (list '(ellipse 60 60 "solid" "blue") "36.png") + (list '(scale/xy 3 2 (ellipse 20 30 "solid" "blue")) "35.png") + (list '(ellipse 40 60 "solid" "blue") "34.png") + (list '(scale 2 (ellipse 20 30 "solid" "blue")) "33.png") + (list '(rotate 5 (rectangle 50 50 "outline" "black")) "32.png") + (list '(rotate 45 (ellipse 60 20 "solid" "olivedrab")) "31.png") + (list + '(beside/places "baseline" (text "ijy" 18 "black") (text "ijy" 24 "black")) + "30.png") + (list + '(beside/places + "center" + (ellipse 20 70 "solid" "mediumorchid") + (ellipse 20 50 "solid" "darkorchid") + (ellipse 20 30 "solid" "purple") + (ellipse 20 10 "solid" "indigo")) + "29.png") + (list + '(beside/places + "bottom" + (ellipse 20 70 "solid" "lightsteelblue") + (ellipse 20 50 "solid" "mediumslateblue") + (ellipse 20 30 "solid" "slateblue") + (ellipse 20 10 "solid" "navy")) + "28.png") + (list + '(beside + (ellipse 20 70 "solid" "gray") + (ellipse 20 50 "solid" "darkgray") + (ellipse 20 30 "solid" "dimgray") + (ellipse 20 10 "solid" "black")) + "27.png") + (list + '(overlay/xy + (rectangle 10 10 "solid" "red") + -10 + -10 + (rectangle 10 10 "solid" "black")) + "26.png") + (list + '(overlay/xy + (rectangle 10 10 "solid" "red") + 10 + 10 + (rectangle 10 10 "solid" "black")) + "25.png") + (list + '(overlay/xy + (rectangle 10 10 "outline" "red") + 10 + 0 + (rectangle 10 10 "outline" "black")) + "24.png") + (list + '(overlay/xy + (ellipse 40 40 "outline" "black") + 25 + 25 + (ellipse 10 10 "solid" "forestgreen")) + "23.png") + (list + '(overlay/places + "right" + "bottom" + (rectangle 20 20 "solid" "red") + (rectangle 30 30 "solid" "black") + (rectangle 40 40 "solid" "red") + (rectangle 50 50 "solid" "black")) + "22.png") + (list + '(overlay/places + "middle" + "middle" + (rectangle 30 60 "solid" "orange") + (ellipse 60 30 "solid" "purple")) + "21.png") + (list + '(overlay + (ellipse 10 10 "solid" "red") + (ellipse 30 30 "solid" "black") + (ellipse 50 50 "solid" "red") + (ellipse 70 70 "solid" "black")) + "20.png") + (list + '(overlay + (ellipse 60 30 "solid" "purple") + (rectangle 30 60 "solid" "orange")) + "19.png") + (list + '(text/font "not really a link" 18 "blue" #f 'roman 'normal 'normal #t) + "18.png") + (list + '(text/font "Goodbye" 18 "indigo" #f 'modern 'italic 'normal #f) + "17.png") + (list + '(text/font "Hello" 24 "olive" "Gill Sans" 'swiss 'normal 'bold #f) + "16.png") + (list '(text "Goodbye" 36 "indigo") "15.png") + (list '(text "Hello" 24 "olive") "14.png") + (list '(star-polygon 20 10 3 "solid" "cornflowerblue") "13.png") + (list '(star-polygon 40 7 3 "outline" "darkred") "12.png") + (list '(star-polygon 40 5 2 "solid" "seagreen") "11.png") + (list '(star 40 "solid" "gray") "10.png") + (list '(triangle 40 "solid" "tan") "9.png") + (list '(regular-polygon 20 6 "solid" "red") "8.png") + (list '(regular-polygon 20 4 "outline" "blue") "7.png") + (list '(regular-polygon 30 3 "outline" "red") "6.png") + (list '(rectangle 20 40 "solid" 'blue) "5.png") + (list '(rectangle 40 20 "outline" 'black) "4.png") + (list '(ellipse 20 40 "solid" "blue") "3.png") + (list '(ellipse 40 20 "outline" "black") "2.png") + (list '(circle 20 "solid" "blue") "1.png") + (list '(circle 30 "outline" "red") "0.png"))) diff --git a/collects/teachpack/2htdp/scribblings/image-util.ss b/collects/teachpack/2htdp/scribblings/image-util.ss index a4ef18d348..cc2b8c088b 100644 --- a/collects/teachpack/2htdp/scribblings/image-util.ss +++ b/collects/teachpack/2htdp/scribblings/image-util.ss @@ -3,7 +3,9 @@ scribble/core scribble/manual scribble/scheme - (for-syntax scheme/base)) + (for-syntax scheme/base) + "image-toc.ss") + (provide image-examples exp->filename) @@ -38,8 +40,11 @@ expr-paras val-list+outputs))))) -(define (exp->filename exp) - (regexp-replace* - #rx"[() '\\/\"]" - (format "~s.png" exp) - "_")) +(define (exp->filename exp) + (let ([fn (assoc exp mapping)]) + (cond + [fn + (cadr fn)] + [else + (fprintf (current-error-port) "exp->filename: unknown exp ~s\n" exp) + "unk.png"]))) diff --git a/collects/teachpack/2htdp/scribblings/image.scrbl b/collects/teachpack/2htdp/scribblings/image.scrbl index 55a7e0107c..2ed3b7e91e 100644 --- a/collects/teachpack/2htdp/scribblings/image.scrbl +++ b/collects/teachpack/2htdp/scribblings/image.scrbl @@ -104,6 +104,42 @@ Existing images can be rotated, scaled, and overlaid on top of each other. (star-polygon 20 10 3 "solid" "cornflowerblue")] } + +@defproc[(text [string string?] [font-size (and/c integer? (<=/c 1 255))] [color (or/c symbol? string?)]) + image?]{ + + Constructs an image that draws the given string, using the font size and color. + + @image-examples[(text "Hello" 24 "olive") + (text "Goodbye" 36 "indigo")] +} + +@defproc[(text/font [string string?] [font-size (and/c integer? (<=/c 1 255))] [color (or/c symbol? string?)] + [face (or/c string? #f)] + [family (or/c 'default 'decorative 'roman 'script 'swiss 'modern 'symbol 'system)] + [style (or/c 'normal 'italic 'slant)] + [weight (or/c 'normal 'bold 'light)] + [underline? any/c]) + image?]{ + + Constructs an image that draws the given string, using a complete font specification. + + The @scheme[face] and the @scheme[family] combine to give the complete typeface. If + @scheme[face] is available on the system, it is used, but if not then a default typeface + based on the @scheme[family] is chosen. The @scheme[style] controls if the face is italic + or not (under Windows and Mac OS X, @scheme['slant] and @scheme['italic] are the same), + the @scheme[weight] controls if it is boldface (or light), and @scheme[underline?] + determines if the face is underlined. For more details on these arguments, see @scheme[face%], + which ultimately is what this code uses to draw the font. + + @image-examples[(text/font "Hello" 24 "olive" + "Gill Sans" 'swiss 'normal 'bold #f) + (text/font "Goodbye" 18 "indigo" + #f 'modern 'italic 'normal #f) + (text/font "not really a link" 18 "blue" + #f 'roman 'normal 'normal #t)] +} + @section{Overlaying Images} @@ -186,7 +222,11 @@ Existing images can be rotated, scaled, and overlaid on top of each other. (ellipse 20 70 "solid" "mediumorchid") (ellipse 20 50 "solid" "darkorchid") (ellipse 20 30 "solid" "purple") - (ellipse 20 10 "solid" "indigo"))] + (ellipse 20 10 "solid" "indigo")) + + (beside/places "baseline" + (text "ijy" 18 "black") + (text "ijy" 24 "black"))] } diff --git a/collects/teachpack/2htdp/scribblings/img/_circle_30__outline___red__.png b/collects/teachpack/2htdp/scribblings/img/0.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_circle_30__outline___red__.png rename to collects/teachpack/2htdp/scribblings/img/0.png diff --git a/collects/teachpack/2htdp/scribblings/img/_circle_20__solid___blue__.png b/collects/teachpack/2htdp/scribblings/img/1.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_circle_20__solid___blue__.png rename to collects/teachpack/2htdp/scribblings/img/1.png diff --git a/collects/teachpack/2htdp/scribblings/img/_star_40__solid___gray__.png b/collects/teachpack/2htdp/scribblings/img/10.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_star_40__solid___gray__.png rename to collects/teachpack/2htdp/scribblings/img/10.png diff --git a/collects/teachpack/2htdp/scribblings/img/_star-polygon_40_5_2__solid___seagreen__.png b/collects/teachpack/2htdp/scribblings/img/11.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_star-polygon_40_5_2__solid___seagreen__.png rename to collects/teachpack/2htdp/scribblings/img/11.png diff --git a/collects/teachpack/2htdp/scribblings/img/_star-polygon_40_7_3__outline___darkred__.png b/collects/teachpack/2htdp/scribblings/img/12.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_star-polygon_40_7_3__outline___darkred__.png rename to collects/teachpack/2htdp/scribblings/img/12.png diff --git a/collects/teachpack/2htdp/scribblings/img/_star-polygon_20_10_3__solid___cornflowerblue__.png b/collects/teachpack/2htdp/scribblings/img/13.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_star-polygon_20_10_3__solid___cornflowerblue__.png rename to collects/teachpack/2htdp/scribblings/img/13.png diff --git a/collects/teachpack/2htdp/scribblings/img/14.png b/collects/teachpack/2htdp/scribblings/img/14.png new file mode 100644 index 0000000000000000000000000000000000000000..cd170b1c519191e8a6be40e48ce125ee8e545c33 GIT binary patch literal 1073 zcmV-11kU@3P)X0ssI2>lAw0000B{NklX`8Yo3dX_lDqb5{G>W3q=_Rk%4gd(!z-9{|pD=8EX(=iYR0@Tvyn(eu5Ezb6bGhYG>Gsvb z!bJywXw;9QIuzCUd?Rb+`un?3RA;lD-%vXMOilfXqB^trWZvP%Kwk=NftFg#O*c>z z6TNP?#pfFl3Y9fAZT0o<35CiHRm9^VtMx~ZXBfjAB9T%q*Xneim6z9*43s2;{rz1| z=RnpOAOH2{&C^GY{9ar8PJtyJ&)GFW~_P)Pvbyf~XpWAH_iBw0A{>5Uw0ssod zE`?$jMWt-E3pU&NLO}1{{WccE)#~=chp%Q9j6|}nz5TmHB5Jc;xPJY3clT%}xneP~ zSUe6#koTd{a+jUe`U3#y^`B=bv)Z}yBLH~(c#tIVbwTgnzX$+2-N_shjm8K7b8}+^ z;m07xdur%%l*vlNrbO(w}eV6wWpz3&CUjV?JJKu!EuB;gjyM~5-0)V!*ud;;2pGhjC( z?%kgl3?@3Am33$oMQw%^0OIkG*ZW|8-pS`zR9CkM1XV?pEG#_p`9>m<=Lpgumuom2 rQBI%)p#P6vn)~P$XsNXYT5A0Zi;axwj)&K&00000NkvXXu0mjfOr{CL literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/15.png b/collects/teachpack/2htdp/scribblings/img/15.png new file mode 100644 index 0000000000000000000000000000000000000000..b2593ebe1a14c667d30fec2d72c1fe05b6d530b1 GIT binary patch literal 3766 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 literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/16.png b/collects/teachpack/2htdp/scribblings/img/16.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b7ede7b840c996605040c1ead9c63149c814fe GIT binary patch literal 1058 zcmV+-1l{|IP)W@pMu*C{cZH8QFTAyM{VoFtA)0_qDIlZg*|^GV%< zG0_+j(?OA?SY-3L503nR;CLD0oeqh+Q0wBt)Uwm{#0rM zyJoXPt==oESTf1R;|#Jjno63smm+21frfzrcRrs&wpOb@cP_p)bYkMuJ9n;Px4V1J zWNMUE%y>iVM;DGNJcmUcCiKsvnvfT(E70?&sl)n^-{$+ZfRhkB^nK2CYwzLgX6*AcqDTB)TyrkfN}+dLK9c6ypu?u{&attNu>h4y)80PV*T?nr_-MKT$Bd4Cl+AL=XjodB#J0`$mLOyVAtQ?U zg9lp?DT+cM@QbXRq0q0`uB~mh+1{q8N}4`$;zS?jGZ`)%z5yg>i6qrlYr9mhQ_1A& zLu4+OM2Qf*-e$?3&|H;?OeS6&Utj+!wk?(x2#G@B!J)UdHeXZovV;b;y5jWdAGh*D zL$4R#(+Cj4a`tOFEj`(iAP5yfkfJF3Q-UliM?eViD-TIh;PKB^wR*4F+{m)C$UT1i zlj5Hn0~IS16s0qn?5nGPB9~!Cj~)8}*`d$`)&>ALaKHr=*$*`}FJb%o^$U^6ZHlVI z9{_;gKOBoOkDN0Y91jG320% z*VVbRSuPf1mY09Oe?QaFF=8}6SANc;N4w|ef7sj%0|4^*^rcH}BuNRvzxOnR(B(Rh zYy~tJ40WBIlNT>G$KxTygu}jY*jF3_p}ae;s_Kx(Gv)O*bKEjw{wsiJYx}OT@m=I9 z^Sq?j*LHSJIi1~m_82fp5UPFqo@r?4ID7Uti^VNBr@>I~@k}`!U0SUklMoUX%gHlm ze!>C(08r`wHAJ3|@cf!qYtZSQE}uE^ c*a;f`29#8p@zpSjy8r+H07*qoM6N<$f;}e&MF0Q* literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/17.png b/collects/teachpack/2htdp/scribblings/img/17.png new file mode 100644 index 0000000000000000000000000000000000000000..43659d6e16539e7a25b8916e569f174eeb94179b GIT binary patch literal 1485 zcmV;;1v2`HP)42%o|vJNxDHq5@<{&>^JV^p9fSX=vLew=f@@1AqdyZ7DuG9-i$ zycr<>(-U}g_`lUx1-%YwRXU_MxLUPdtI|zVt!G+A(7_Rvq}1NJ{FqnMqt_xymvowH z1HhG!f7$Po(p1$60G&%W1z|lL{835ec2Gc2+xF689;AN<4J zr>Qmo00NavLpP^k9*@~Gf0^qvl`^!d*P)V>+7rdwX)`E9`qRvJ?c6MJw}T_PceSzS z$$)?@^a^&~e<6~{PDM~#(pp{E+}Ad!R%$mNSnRXZb=JI@ILl*phei99rL(H?xx@W( zAiLYPDM5wO$csPXYvQd;;s>dkV>w(li6?}Fjb?}PF+xz&boU1 z9v1244<>HOJG-r*JcES`zF3!Yc3VMdTAh4Eg%ILYKK*e16+WxiK)o1X(s4Xz!sk0U2GIQ zwJEo*j6X#|RX+Fn>4!wNt-db`65AVvhH2~2cH5+fKQ$3GH!m?W4&TPz?9cDA%K5n4 zTGxAd|1I3D%=_b9Y@yK{F7CbAR^NvZGHhU_OhY#_*e#E`OVd~YKq3K!Mvl9(iA*6? zWV81rtuxyFAsf9FQWa)TDyS`OJ(w0nWak7qInB0l_jkbDu4b`!uya_9A5jw&G56*r z=2*fF-ZeK`7OkHP02-w(C*l6F-1l*|D4DT*tM84AOk##%k!+}62G|L#RqIJ)63)$j z%W21n@Es?@l`_rxy^F{c5&-nJ4%j%G8+FoB)4g!b9L%0rppdGyY8{pe$55Zl!NVF4 z@|fL05p#_)2-rem&@a@DTiu1(-=F+7CO*v6(gbr=GR+Kg6Sw(x_HI_h-`YJ3eU`cc zb}Ug%$Wn;{Pe(VSI(yjyfK(#)S!y`?J2)bRRE_5a0HI(=tH5gD~n zkW@`PZ+XlfGIiYLr`Ms1Y<7I!*t$_@^rdT>Em8jDfX zf%z^stMWB&Wuqw z?khmhAY>G^U^WRM1OO_TCM*7KTSK2;sJodJy_Y{IA5lfcEnc{GHl~wG6lb>;42$GT zqP)9#1Ev-x`;sH9>`n2clM48(zB4iT9sv#>{`OCs#H)7&)|K)*xuWP}p>$JP@i&iX zbZYdm&~vec!I55ORwg52#m0|9i0g(y)G-_vn0lVE*E7(;h#KyfC+#ZgZyySc_EX8! zz5GENNAulZt+sc!8fz7UVnp4^6$5~ax2>g}DLjK7-oWUP(mU9NOeH6V^}$w&H^8B2Y^qj|j`U<27B60Jz`@2d09j%TID3zmX09X|p002}I n%48#+gK_Wbe;aSmzYu={19y$<{ue!N00000NkvXXu0mjfED+5i literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/18.png b/collects/teachpack/2htdp/scribblings/img/18.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe47dc980d9cdbf9445eba5db68a43aa2e4e063 GIT binary patch literal 1388 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 literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/_rotate_45__ellipse_60_20__solid___olivedrab___.png b/collects/teachpack/2htdp/scribblings/img/31.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_rotate_45__ellipse_60_20__solid___olivedrab___.png rename to collects/teachpack/2htdp/scribblings/img/31.png diff --git a/collects/teachpack/2htdp/scribblings/img/_rotate_5__rectangle_50_50__outline___black___.png b/collects/teachpack/2htdp/scribblings/img/32.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_rotate_5__rectangle_50_50__outline___black___.png rename to collects/teachpack/2htdp/scribblings/img/32.png diff --git a/collects/teachpack/2htdp/scribblings/img/_ellipse_40_60__solid___blue__.png b/collects/teachpack/2htdp/scribblings/img/33.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_ellipse_40_60__solid___blue__.png rename to collects/teachpack/2htdp/scribblings/img/33.png diff --git a/collects/teachpack/2htdp/scribblings/img/_scale_2__ellipse_20_30__solid___blue___.png b/collects/teachpack/2htdp/scribblings/img/34.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_scale_2__ellipse_20_30__solid___blue___.png rename to collects/teachpack/2htdp/scribblings/img/34.png diff --git a/collects/teachpack/2htdp/scribblings/img/_ellipse_60_60__solid___blue__.png b/collects/teachpack/2htdp/scribblings/img/35.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_ellipse_60_60__solid___blue__.png rename to collects/teachpack/2htdp/scribblings/img/35.png diff --git a/collects/teachpack/2htdp/scribblings/img/_scale_xy_3_2__ellipse_20_30__solid___blue___.png b/collects/teachpack/2htdp/scribblings/img/36.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_scale_xy_3_2__ellipse_20_30__solid___blue___.png rename to collects/teachpack/2htdp/scribblings/img/36.png diff --git a/collects/teachpack/2htdp/scribblings/img/_frame__ellipse_20_20__outline___black___.png b/collects/teachpack/2htdp/scribblings/img/37.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_frame__ellipse_20_20__outline___black___.png rename to collects/teachpack/2htdp/scribblings/img/37.png diff --git a/collects/teachpack/2htdp/scribblings/img/_beside_places__bottom___ellipse_20_70__solid___lightsteelblue____frame__ellipse_20_50__solid___mediumslateblue_____ellipse_20_30__solid___slateblue____ellipse_20_10__solid___navy___.png b/collects/teachpack/2htdp/scribblings/img/38.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_beside_places__bottom___ellipse_20_70__solid___lightsteelblue____frame__ellipse_20_50__solid___mediumslateblue_____ellipse_20_30__solid___slateblue____ellipse_20_10__solid___navy___.png rename to collects/teachpack/2htdp/scribblings/img/38.png diff --git a/collects/teachpack/2htdp/scribblings/img/_rectangle_40_20__outline___quote_black__.png b/collects/teachpack/2htdp/scribblings/img/4.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_rectangle_40_20__outline___quote_black__.png rename to collects/teachpack/2htdp/scribblings/img/4.png diff --git a/collects/teachpack/2htdp/scribblings/img/_rectangle_20_40__solid___quote_blue__.png b/collects/teachpack/2htdp/scribblings/img/5.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_rectangle_20_40__solid___quote_blue__.png rename to collects/teachpack/2htdp/scribblings/img/5.png diff --git a/collects/teachpack/2htdp/scribblings/img/_regular-polygon_30_3__outline___red__.png b/collects/teachpack/2htdp/scribblings/img/6.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_regular-polygon_30_3__outline___red__.png rename to collects/teachpack/2htdp/scribblings/img/6.png diff --git a/collects/teachpack/2htdp/scribblings/img/_regular-polygon_20_4__outline___blue__.png b/collects/teachpack/2htdp/scribblings/img/7.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_regular-polygon_20_4__outline___blue__.png rename to collects/teachpack/2htdp/scribblings/img/7.png diff --git a/collects/teachpack/2htdp/scribblings/img/_regular-polygon_20_6__solid___red__.png b/collects/teachpack/2htdp/scribblings/img/8.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_regular-polygon_20_6__solid___red__.png rename to collects/teachpack/2htdp/scribblings/img/8.png diff --git a/collects/teachpack/2htdp/scribblings/img/_triangle_40__solid___tan__.png b/collects/teachpack/2htdp/scribblings/img/9.png similarity index 100% rename from collects/teachpack/2htdp/scribblings/img/_triangle_40__solid___tan__.png rename to collects/teachpack/2htdp/scribblings/img/9.png diff --git a/collects/teachpack/2htdp/scribblings/img/_beside__ellipse_10_70__solid___gray____ellipse_10_50__solid___darkgray____ellipse_10_30__solid___dimgray____ellipse_10_10__solid___black___.png b/collects/teachpack/2htdp/scribblings/img/_beside__ellipse_10_70__solid___gray____ellipse_10_50__solid___darkgray____ellipse_10_30__solid___dimgray____ellipse_10_10__solid___black___.png deleted file mode 100644 index b8c5dbe21c54db5e50f590d5e7cf3925a3699372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1439 zcmV;Q1z`G#P)&000GMNkliuS_OdX>uXKZ*xtIXpPru5#@pN5>+5UQy1&0q!2qDD>h|_F zy*@cPSzKH+fdOD`ZEb67>lyp%>dNrr?(UB5{p;7SLZM*%{PE+5aa|}B(&;qY`SSAe z>({RUu(!9zK2TQ6%gd^&KC&Mk9;nk)xm=Fzn$2d}pI28`#-JxBC$cP?hCVtv0stp4 zonJbgCbqDLhX>AU_!{m#Ka>zpU<;4P1B0SB8xGJ`YlP4lXKs{f1jC| zvF=8yxw*N4fdK*ll}g3xnZY)NgzEnO9+>56RW_S#Z*Sk&*sz+$$H&*#*MY9{QmJI^ zfwK#Rf~u-?2DbY7^Ctkz&(H7d>~wc`(?&wb!otGA!2yj&$cbGpmko^7s_S|_pSQh{ zN|Gd9*Ex=xo}QkXno6hBnM`J4Vq#!mz~~cVF;=!L%T7-;pU>OgNF~d1E|+U?D`3p7x zR4NrG69AM-C7f-$P@b`MUAJy9s%o{0nmAp2@O|dlrdA5bK*a zZ(P{OdOHq*mQLNQ800@H6-{0?x4FI@RRaN#(G?Yvx!{M+y8>uD%tu+CF z=lPM55kiQm{r&s*u3&dI9(F+xnwy(Vq*yFAIy&l!jhpeAg+d_!n3|emxAMo2AMtz_ z44X1UQJkHfrPql>;=_jzUcf+WrWeatP{YH+tE;PDzI+)Q8^aIvXKZ{2<6?7aTU*=s z`1oJlPH;AEbLU**wn^LfYEep50?|I@5{=qJ6qwETY!^T%}p688kR({z?^w=FdG&Dq$NivzlUq8JIJO9~oQxJqy zDs_2z>E%T$0JbS}g~MSlZ&}_&kXkyZ*gCS2=l$wz#Bcwng$vtAAXfRW23^?T;2+0v z{~MeBmGGY%csy=2#pCfnNVmkhOT*(UP)NiShxTH002ovPDHLkV1ie9)CB+l diff --git a/collects/teachpack/2htdp/scribblings/img/_beside_places__bottom___ellipse_20_70__solid___lightsteelblue____ellipse_20_50__solid___mediumslateblue____ellipse_20_30__solid___slateblue____ellipse_20_10__solid___navyblue___.png b/collects/teachpack/2htdp/scribblings/img/_beside_places__bottom___ellipse_20_70__solid___lightsteelblue____ellipse_20_50__solid___mediumslateblue____ellipse_20_30__solid___slateblue____ellipse_20_10__solid___navyblue___.png deleted file mode 100644 index f494aab8ec41753c197418a163617fdc964a3058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2264 zcmV;}2q*W6P)m~@+1egzRbHq$^MW+`d_C9U*Msp{UwE&yDlgQWznb$W zMJey0Qwsr6%762}TG+uk92XYXqlFGl3ex=Q*TK{~ID3~ug~E6WFIKk7tj}H`!&#J+ zrHz6{P9c^MHbRLqt5kMmI4^HTMM*AlXbOuPk#g#@7szm4*(_n?6ny?z*_7EMY;%@n zWjz?zBETo5K$tJ5N@d43=gqBzBx}t>>mf~7XWwF*^SYkMv>tr5!`L=wUG5qP^F=e- ze#bWFU_=LJNtQ#=WO?-23m^ap#|14}DjNYk*J!^10YEsW+i0QaE6-WbE4KAD@NKEP*Y`AFNT%de~Lbv$XvvGw~6=Ow;Vme7*carLGc2ni^h2M9T5&GAAS(_ zZ|wL%KB4^mk5K^FKeSN-_qJ4VmL&M|jfjeH8vhuKt*z)Q0m=tdX!=zWs>t`rzZ1&~ z1!JKoD8qxAdeuDu%AV=!LL!-A7z!vOAC+i4=Dp(77yBZ^A-z>+8rgwhmoLPn`O0T?q=mXRD8Hw z9I06F<){uCUydd#-g_h2fSmrJ{B=KpA)*^Tt?Pt}JH*5OB+9|3)SIN<

G7`iEBz|xX{f4xFM*;S)HchE0PO@#d$NdSc;iN+SokuDoa?(#T|GLo!h z1DxYg1!^)M1DnFFzbrm^98}f+)h?#*=S@eCJFrib3q+Cz46WeH#-kZ-)02_k{$_IQ zQ6RVB32Y`my!PT>w|&?r$_1hfcn+!LpY>`%EVdoS7G`6=|G*oI7R%UoZ!LfN(K`0I zR6rE2of(=W47f#^DnR0Nfw;ZLDdU zu}Grw*FP-apDzo@L}U6VYod(w-e#7F$D~j0>+smwndrn=2>Xm_;B&T^DKOBJu~zit zaWJ95tFy5ycQs;Y%(BE{qNw~kp|y!yi6@VOdZnf&!a={$Y6by-xxk~g;^0`CqVes_ zm|$u`_wG?yRz^PyV4pMv1OOHjj=eaRHe2vHN5V-F>v6*Lq|tr02mo09oDm|dEN#Jk zWq~mf(FkUP;(ccH84v;hj-~aA*;s}E;B1(j-5wJAwv0u^HJ_o~ESQ|DI0gV5F3jBS z_Mk)pKe_ui3_Tb?0ARD|=IpRC0AP0@yr#$PA;G{82|_Z+#VcL z*Ef;KK%F1nGBi#@06-96x9HdeK#?fr+W_Ecz{zvX2PnzFs~uGi-Hw@!Z7VrAlXe-W z&6KuL<2Q82d}j^G*$E?)09TEnZ5rF0U3MLuYpdDx-^~Ygb3W8Y0f3dmFXHMN)O&Yy zAA#y^BTZ&~7CYQYg8^IBHL{%DK+&6icaSwv97{(uYzVZnbatFa2oAN= zPoHQFq%=(&?w|pn`87+)gY%-j)0X{F5QOpZ@v*TnpU)Qz1{sE77>4J0S(fYS>e|}c zdV6~vjvb?=%mwpQTO#q&om!*Is#@thrh{|q8#K)T063gTmwUWs+^)5{pzNwZ|tsLoQ7?W1_K9;ph>{~rfjZ$fN z>dl8cH~_eN_ijf=$Bi2|iW3F^Ns@+#hkJW_2L=XYS%z%RF1xv8;q9`UZ8=37W74|c zt=dJly^#?=-dnA=E;#je4FGt(-v0jna9BsPp(x6=Yu5$_20-;3qdCWhDjaO6%DevE zx6E3!?|I9V-Ky7kOeapdN=l{St~Gt{`)&Xj8XAhnab{!JuV0^-nApMjK%KqFxZ7@F z8VdNo+k=kvlrXj3fxdH6oe|&buQ!>sRyAkOH&PS<0Femhdu@uMjEs!z;B02d7LTov zK<9yCx8Dzb!dkgvb?6VzvQ$p_R8>v?>|%3iWdTl{banqfdbPH;Y7xmrV`F1qU!Pjb zwq{4(_t~3kxmpLCyPk%HBhLN8TFApYjxt@x^E<+ur<^}JS6^J$*W0-BziLT;yl~;d zrAwEJi{zrcz5T(12X41pP0!4bT?gH&MF(fq8?(6I8@9$^XjFaZ)3;^M{upW#% zIFr++qZCg;mcctIuKA>vgH-bYeT`RSOMLz`?B5jX8qDqAv}qqR1_FWc@$tF2xz*Lx mrlzKjj*hObE|Sc1_WuE{ep7ji5v!~K0000 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 KMNUMnLSTYE15~I0 diff --git a/collects/teachpack/2htdp/scribblings/img/_overlay_places__right___bottom___rectangle_20_20__solid___red____rectangle_40_40__solid___red____rectangle_30_30__solid___black____rectangle_50_50__solid___black___.png b/collects/teachpack/2htdp/scribblings/img/_overlay_places__right___bottom___rectangle_20_20__solid___red____rectangle_40_40__solid___red____rectangle_30_30__solid___black____rectangle_50_50__solid___black___.png deleted file mode 100644 index a33e0c305453695a28ccde9982ed9869868ee195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^#vshW1SGc}US12Nc6hothE&XXdvhaivw=YCL-!+m zOOi$8XWz{*?{Y7&D)(~~R&@F@fl2S)^{8oeCwoiHU0hrisHaT}YTA82cGJ^$YquW1 zD;dACXSvb5Qx$)w^&UUYxxw4Y?yTkG^qGwR{!i&WA!)mR*{KSx#~?LsnygyZ&Z#z2 zKZYC&mP}qHT06~lw{A34J46l89IeN_X=NK8%_)vkKfBvY^EFS>^^n)UtW)<+V?A&o d%DV6;Q@%i=L7uckxFgUH44$rjF6*2UngEtYWk&!2 diff --git a/collects/teachpack/2htdp/scribblings/img/_overlay_places__right___bottom___rectangle_50_50__solid___black____rectangle_40_40__solid___red____rectangle_30_30__solid___black____rectangle_20_20__solid___red___.png b/collects/teachpack/2htdp/scribblings/img/_overlay_places__right___bottom___rectangle_50_50__solid___black____rectangle_40_40__solid___red____rectangle_30_30__solid___black____rectangle_20_20__solid___red___.png deleted file mode 100644 index 5ddcfa5be0c62c8e2659bf95d5e1c108b9922f75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^#vshW1SGc}US12N=6bp~hE&XXdvhc2VFMo4K&ulG zj4t`dE?RV%ZSX4fTBujRR3o~vyV|x_-xgNQyI$tTN=i?5m$J(b# zro7a+9H_SPsz$Wq%swO8RI5`W?%8GMH0k7i*oe1qv;i*7}GI+ZBxvXR%(Y;J69Y-wpBN%9>Wy%7lE)YOzv zC{!pEYinyhpYN^8kX&9~wzjtNc)ZTePM6CSrt)>$WHObMlu#69Fc=~vLvnX_S65e; zmX@}=yZaBePNyRXVsLQqW9sv)tgH|OF+M&Xk-fdW4FJ&Tbf1TVxxT&@i^UTY6YtoI zi;Dt*fMJ-gf`hSGEC7I!k&!oThG7VTI5|1_S~wV!$s`mCwOZ{fw%hH_%*>phpZ^Xx zn60g?9#R(>BGj8dtrtE>CVW?42NA>nzCzA0X>S1cCm_4+4UrBXFD zHGMZ6%;e;xTrPjKA%rAJUR+#6$A%C}B$B~kB@P`-yh*J;|r6Un|peCiX((#Vq&6f69nOKI4}&u0)ar3 zhYlh9@#6;`7Z-;jTP}WK>~?!%Vj|Ax^KCX;lx>^MmYkf73xz_KWut7=*C5)Q`Y;(|XIhG7_{wzl@suBoXp8jZ)t$Dg!0F3ct5^C19$ zN~KaNmGSZMk9K@~d~a`WOH0cqZ43){H4s3PlamgIBY49fZ2&-heZ9xyQLELTZiYtKhw`>H1hfUgM)()Pja6RhRpD1$9+~-*68Ty^ZLK`M6{SKU%$A$J%dCd>FVlwwdVD`|IEw`pU)o~8~d>B_xroMy9EM4 zm_6Q`-#m;)BSldPg@UH(e^McY)6>(LnVD5pRW~;`VJhFW5keftjgF3zBw1Egwz|3+ z2n52bEX(%w^`)n$%Ve_k_4Rjq`ObGH0D#BinVXv%85y~}ysW6GpeRZzm69Zxl$3OL zcjt6EkB*K`PEOX=)^2ZatE;Q)>+6e(iXwXG-?jh5YPBveFVi&5FpSM+b2^;~2?+#2 sWMyULFSZzn189WdZI@@Ccl z`l7rHot3BD(y}D)N~$h&6;Iia6`DKAd44kgntgkoz2E=Vyz5&~ZMmF^-}fC)7%%FI V$VMH^n-4UL!PC{xWt~$(697wIDX0Jd diff --git a/collects/teachpack/2htdp/scribblings/img/_overlay_xy__rectangle_10_10__solid___red___-10_-10__rectangle_10_10__solid___black___.png b/collects/teachpack/2htdp/scribblings/img/_overlay_xy__rectangle_10_10__solid___red___-10_-10__rectangle_10_10__solid___black___.png deleted file mode 100644 index 2b68c09f3500c9410a923622b5dfb820cb23abb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1SHi;jSd2-P)`@fkcv5PCvD_CV8Ce^L_`T7-R17knKTUKnoZ=UHx3vIVCg!062L#fB*mh diff --git a/collects/teachpack/2htdp/scribblings/img/_overlay_xy__rectangle_10_10__solid___red___10_10__rectangle_10_10__solid___black___.png b/collects/teachpack/2htdp/scribblings/img/_overlay_xy__rectangle_10_10__solid___red___10_10__rectangle_10_10__solid___black___.png deleted file mode 100644 index 79bb91c201d552d52c96bc9f42904b6f06873e2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1SHi;jSd2-a8DPwCKNc)Ey4RpT6RL9Jypsxwe zd3H14JiqsO-v*N>gmABu@B5zTd7kIGu6HTA+Ga#k(b$rfFGL znj@djmr5m7Rg*S`VYFJUq-(KQd@#AYLI`1uQ=4C!rj16UYPI?*o4cZUq&5Xz*B6V$ z+aPXo7>40E&O13W`|^wP`2PNmqG-3edgNg8mdYhsbL3!hrDkw&tlvU@IN1Jl8Rub|=43MAlHck6 zcOHZg$8qpUwryjKEz6=q`NN^>`glBkiKXkh)F$a_+jhBJMkjT<-N9gh5P}eLsXT_m z;ZuIT?^~9YtdEu`NfLyR`Zb%)e!owbk|fY=^_L2z9k#yAK9(=@3cgs|7^A%slR zR21c@dbm_y9LKq?4`aO9Y-+XIIns8!P3u!t^;y4L;?Li;2_d2=>bg!#JO_&qG7N*~ f`Bz!q;b5zOiEsgUmRh2{00000NkvXXu0mjfAVxVD diff --git a/collects/teachpack/2htdp/scribblings/img/_scale_2__ellipse_40_60__solid___blue___.png b/collects/teachpack/2htdp/scribblings/img/_scale_2__ellipse_40_60__solid___blue___.png deleted file mode 100644 index da578427673d4a15d9039401de67757b50a5f892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1768 zcmVP)( zTSydd7{=fIcGcF+zpLe%u6ZEy6drD(C|Npbgi(Y0_iJ2i86H>Ra=0=8SN#_DQ1=7t80jN}Tu=o>dEn2knRzOH=t#fxaO zab$k-1R0|Qw!6HX7qiibN+mt8-Pf+k&;0Qt@swWayLaVe?&?CVmLAf{jA3o9Jj|1m zn4V5g=+giFhrPWrFc%lovw3h%4o*)?%KYdNJ(X8iR!YZgGGTZ)J(5=|6xh%p5p!W7 zJ&%u0PWI_K#0#_0NKfLIuU-v|d2$ltNb^ZjRD(?#}LYS+wby2xHj?Sgq|Xw4Vd?hhYaGqaU<`Kzj6Zcfg} z2)uOvzMBu6#=vUDq$K(hNn)iE2L^nobA3Jh{3&+)xqp6&q>EmFJCU-U!>>uc#*%gTAZ76Rp(EiIFCL*jgLcHn`2jC{_z6_ z2518DQB#v+TVQT!AxXkdE|{B}Ns{nWYpdhJDOi{-7RM>g?E5`El!5qYv91gNdV0WS zqfEm`?d`$_1AwkB$|&6Q^{cSK0HC{@G72}DOv3-122q`DHt6U8urq)AMx2J5?9-b8 zKz~1R6mGJg#cW~%%x3B=ykxH~8yut#!co6|0RXVkQR*NZB`}YTQ3v6u;bB-<2r_1? z6$S@^O;1w?;j5vc;A8&x57^8Mbqc;39|sl;S5!+iF##@~#jbBzEWyV-GZTEw^Yg$I z3hESm6&f0R%o{cU3k#!8!B=WEFtwUG1z%~kz{10+Q}C5m3rwq}PQh23HUW!{rcS|E zdVP>FhlN3GEU+zGsDp4+LINlhz;rqY38BuyONog908F8PxH#%8yd*FK!1nFLQMf5N z8Nkk*kwKe;pK@{l?97>J2@FApH7>KqXPDJcL!#hjZ9_KQdc0D3({MiK|&pxj(x zL%2_}YZqA*Zdzm%nD_1_i^5I&_X``r!km@{2?@fsV{R*zWPvznvBc& zBTIMI<@7cfAU1Z{k!8$%T)p$XZc3e>FWd}r*2-b{`xn(}`Vs~1XU|*|8Qt}8 zxO9m=ae&UqaNG3OHS@s0ns4LauE=hg5wX0SKDTIRXM5^|>6ZEXcT}n9(~I+~S8jnl zG2@!;%(8p8mv*O~m`6u3I+~urFRN7E`xtxanfBlTJ%(Qnv}YP3E-YY94n2vF-ntd1 zrUGV0#Fmy-(Vf>9*VK3i_K6wSNW-|ZXMFH_XF5JW<^HO3y1JSbS5){7>^Cza z&dlJxee|>dc;<}AB~rxn)1R6`gMk>hv{d|RI3m|gFq`qvAu`~~O7V*(h-XH`*;#@X zMU3ISd*W#WWwz_i9e#hA#>8M_W1zqiFe74PBgVza4qQ;+x{0F*Nwcoe=qR2(Ef=j; ziw_?LbOJj`$~C*{>oGG^N?Mf)&!5MU5eYLQO1@6n!U9%RVQOliw4tF`T8bulO|V%aKcv0_9w5abyJEy@R?sXl?b>lPxL=cJ73O2jR#O z$j+88jv#rNm+H?S=C*5MA)_sl9KpD5cEGC39`ETlKk-i0000< KMNUMnLSTYE15~I0 diff --git a/collects/teachpack/2htdp/scribblings/img/_scale_xy_3_2__ellipse_40_60__solid___blue___.png b/collects/teachpack/2htdp/scribblings/img/_scale_xy_3_2__ellipse_40_60__solid___blue___.png deleted file mode 100644 index 150d70633cf4c44afe4de58623bc2fcc7e25b3be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2141 zcmV-j2%`6iP) zU2Icz7{;HTe$aIeDUi{!q3Ax04C01~CW4SiT$f-lk%%!yFAUL;i60lPWZn)hjEyc2B zC@PXJJv%n(0x?1%96yfEPIPslyBj?{xOOe+J8`?QVg;(Iuxb?^d=S;uu-kR$ni3Y- z{d#y9EiE{F7%eUM;}7lczn}mQJOG~$wY6Bi8WxN8KO%8tTn7T!zaLFaXl=#y>jwSM zrAx7SGoE}BYu5@%r-6jSY--|TkI`x+AeOuD<~#4Ox7WzgNzx$KgM)ngZF;?uisNFl z@#&}8(P4}L(g4?eeSG<4I-T-zXUm2SY;V_F1F5U)p&`EdYDQb09-oiD|E`}5QYY8p zFn8^u+bwS}saUOi@kI^}>Y;?x!*zQ*SFV&7mvR;@;+{R4TOqY|ef28q>uIsb`$|8x zwc0;X(aiOU6RfP1ccft!E@V@aR(eRSTz~KZ?RI%PdZfOd;jku>(sq623b$;LH==7E zdWaVHo9E$GYiIQWn-iMt~)wdR3tyGcu4S#P!cV z%Qw#IeDX=cu4`-M>t=OIN_g#B0t~*kFKU9^br-K+pVM_;U;gQb zW@%`Mcdbl+-}~pE8}}}M)ARAiH+*Tz`s5_b%H($kGbQc?sn~wq-i~wUjC|nD&u5>_ zxEXWZ*l2VW)3bLkCMT!eo;rZ!)SH+L%h97Z979f?L|>oCV{dZy?Tc+kT^~9mQ^oXr z`)zDH>iYZdWvZB-3m0(eRCHSbFfoA>CnO7*n}Y|V8wvowKb23}=Sh&Zw&;ce;P`RL zDyHYyF{q#USAf_7C668q597=kKy}^KCEUjJ{Q4`Px;}kcxQglV`vE}t?>`I=OLs9l z>QP$x_h0EEIl!NP0)UeL*W3WkpGPDDB@~h_k^@Xkpsx?g$cS{2++bh;%H_+_Epmf_ z0Vw$sjK*;35|l_px9MaVS=+bc@`;>CC$}3YQB? zCSSzZOx$)Glm!c)CQQ&|b9=Nnh75Uyf+s;dFjbybyc71L8w1E{X=zhAhD=}`?^NQOdK zv`D&+d8w?#*|UJUUoTvk|MRFL>(@s&qOYhv@`zX!(=+8Z>iW?~#j2Pan+xm2uaNa!mU%+h7wr%kjYKgxtj!J#KeAldw!@tx1 zS=o(dZb@EeXU`k3D z2qYvrQP(7ghFD%MKU+q{!$VI(FOb+_NWj(P_CR+18dT&rEK=oj?4Lmgsa{lkDzhMTNWzT~krP)2GuFt$}Nj z!^39&uk!K7IWm&IBvKRCBqI^-*kQIOCk_YSf1i_+niwLra;?(V#yjqicce+Gs_6G? z=!VqRHObLYzVL#)sdQqu^UXKsI&GLT8oO3GawJ>NRjymdQ>XM$Lh9t2WH`+C-eXab zyuJjpd^z{+(@91YyJZtvBw=AAZQO zF#{Zs#<*4q2Km-o^m^qL16;e7d-vXCiA7y8&b3N7%*ICgd@@hQyKYM-6AYrE0nN=gc1-t0BbP11#*Nsr1?$&C@Y;`JuBR9o!NG%QX+di%dU`awTell) z)?nQ_)YW0tD$VXT9pqh4ClEkqCr+M(-;bUioI983B13jN?z|J_