diff --git a/teachpack/htdc/Docs/draw.thtml b/teachpack/htdc/Docs/draw.thtml new file mode 100644 index 0000000000..f4e0803f65 --- /dev/null +++ b/teachpack/htdc/Docs/draw.thtml @@ -0,0 +1,49 @@ +{ (define LIBNAME "A Functional Drawing Library (HtDC)") + (include "head.tinc") } + +This `draw' package provides classes and methods for modeling in a visual +world. Here is its class diagram of public fields and methods: +
+
+ +-----------------------------------+
+ | abstract World                    |
+ +-----------------------------------+       +---------------------------------------+
+ | Canvas theCanvas                  |------>| Canvas                                |
+ +-----------------------------------+       +---------------------------------------+
+ | boolean bigBang(int,int,double)   |       +---------------------------------------+
+ | boolean endOfTime()               |       | boolean start(int,int)                |
+ | boolean endOfWorld()              |       | boolean stop()                        |
+ | World lastWorld()                 |       | boolean drawCircle(Posn,int,Color)    |
+ |                                   |       | boolean drawDisk(Posn,int,Color)      |
+ | abstract World onTick()           |       | boolean drawRect(Posn,int,int,Color)  |
+ | abstract World onKeyEvent(String) |       | boolean drawLine(Posn,Posn,Color)     |
+ | abstract boolean draw()           |       | boolean drawString(Posn,String)       |
+ | abstract boolean erase(           |       | boolean clearCircle(Posn,int,Color)   |
+ +-----------------------------------+       | boolean clearDisk(Posn,int,Color)     |
+                                             | boolean clearRect(Posn,int,int,Color) |
+                                             | boolean clearLine(Posn,Posn,Color)    |
+                                             +---------------------------------------+
+
+		      +----------+
+		      | Posn     |
+		      +----------+
+		      | int x    |
+		      | int y    |
+		      +----------+
+
+                              +-------+
+                              | Color |
+                              +-------+
+                                  |
+                                 / \
+                                 ---
+                                  |
+             ------------------------------------------
+             |          |         |         |         |     
+         +-------+  +-------+ +-------+ +-------+ +-------+  
+         | Blue  |  | Green | | Red   | | White | | Yellow| 
+         +-------+  +-------+ +-------+ +-------+ +-------+ 
+
+
+ +{(include "foot.tinc")} diff --git a/teachpack/htdc/Docs/foot.tinc b/teachpack/htdc/Docs/foot.tinc new file mode 100644 index 0000000000..454bc56343 --- /dev/null +++ b/teachpack/htdc/Docs/foot.tinc @@ -0,0 +1,4 @@ +
+
+ + diff --git a/teachpack/htdc/Docs/head.tinc b/teachpack/htdc/Docs/head.tinc new file mode 100644 index 0000000000..d719284951 --- /dev/null +++ b/teachpack/htdc/Docs/head.tinc @@ -0,0 +1,12 @@ + + +Teachpack : {LIBNAME} + + + +Teachpacks for How to Design Programs + +

{LIBNAME}

+ +

{(idx ,FILENAME)}

diff --git a/teachpack/htdc/Docs/idraw.thtml b/teachpack/htdc/Docs/idraw.thtml new file mode 100644 index 0000000000..9ed2082653 --- /dev/null +++ b/teachpack/htdc/Docs/idraw.thtml @@ -0,0 +1,52 @@ +{ (define LIBNAME "An Imperative Drawing Library (HtDC)") + (include "head.tinc") } + + +This `idraw' package provides classes and imperative methods for modeling +in a visual world. Here is its class diagram of public fields and methods: + +
+
+  +---------------------------------+     
+  | abstract World                  |
+  +---------------------------------+       +------------------------------------+
+  | Canvas theCanvas                |------>| Canvas                             |
+  +---------------------------------+       +------------------------------------+
+  | void bigBang(int,int,double)    |       +------------------------------------+
+  | void endOfTime()                |       | void start(int,int)                |
+  |                                 |       | void stop()                        |
+  | abstract void onTick()          |       | void drawCircle(Posn,int,Color)    |
+  | abstract void onKeyEvent(String)|       | void drawDisk(Posn,int,Color)      |
+  | abstract void draw()            |       | void drawRect(Posn,int,int,Color)  |
+  | abstract void erase()           |       | void drawLine(Posn,Posn,Color)     |
+  +---------------------------------+       | void drawString(Posn,String)       |
+					    | void clearCircle(Posn,int,Color)   |
+					    | void clearDisk(Posn,int,Color)     |
+					    | void clearRect(Posn,int,int,Color) |
+					    | void clearLine(Posn,Posn,Color)    |
+					    +------------------------------------+
+
+		      +----------+
+		      | Posn     |
+		      +----------+
+		      | int x    |
+		      | int y    |
+		      +----------+
+
+                              +-------+
+                              | Color |
+                              +-------+
+                                  |
+                                 / \
+                                 ---
+                                  |
+             ------------------------------------------
+             |          |         |         |         |     
+         +-------+  +-------+ +-------+ +-------+ +-------+  
+         | Blue  |  | Green | | Red   | | White | | Yellow| 
+         +-------+  +-------+ +-------+ +-------+ +-------+ 
+
+
+
+ +{(include "foot.tinc")} diff --git a/teachpack/htdc/Docs/index.thtml b/teachpack/htdc/Docs/index.thtml new file mode 100644 index 0000000000..acafc6acad --- /dev/null +++ b/teachpack/htdc/Docs/index.thtml @@ -0,0 +1,11 @@ + + +Teachpacks for How to Design Classes + + +

Teachpacks for "How to Design Classes"

+ + + +{(include "foot.tinc")} diff --git a/teachpack/htdc/Docs/mkdocs b/teachpack/htdc/Docs/mkdocs new file mode 100755 index 0000000000..30a69d7fb5 --- /dev/null +++ b/teachpack/htdc/Docs/mkdocs @@ -0,0 +1,114 @@ +#!/bin/sh +#| +if [ -x "$PLTHOME/bin/mzscheme" ]; then + exec "$PLTHOME/bin/mzscheme" -qgr "$0" "$@" +else + exec "mzscheme" -qgr "$0" "$@" +fi +|# + +(require (lib "etc.ss") (lib "plthome.ss" "setup")) +(current-directory (this-expression-source-directory)) + +; for john? + +;; This list determines the order of libraries in the index file: +(define libraries* + '(#"A Functional Drawing Library (HtDC)" + #"An Imperative Drawing Library (HtDC)" + )) + +(define dest-dir (build-path plthome "collects" "doc" "teachpack-htdc")) +(printf "writing docs to ~s\n" (path->string dest-dir)) + +(require (lib "list.ss")) + +(define thtml-files + (filter (lambda (x) (regexp-match #rx#"[.]thtml$" (path->bytes x))) + (directory-list))) + +(unless (directory-exists? dest-dir) (make-directory dest-dir)) + +;; Get list of (list name file-basename) for library names +;; (assuming that foo.thtml is always the documentation for ../foo.ss) +(define lib-names + (let ([rx (regexp (string-append "\\(define +LIBNAME +\"(.*?)\"\\)"))]) + (map (lambda (s) + (let* ([m (or (regexp-match rx (open-input-file s)) + (error 'mkdocs "LIBNAME+FILENAME not found in ~s" s))] + [basename (regexp-replace #rx#"[.]thtml$" (path->bytes s) #"")] + [ss-name (bytes->path (bytes-append basename #".ss"))]) + (unless (file-exists? (build-path 'up ss-name)) + (error 'mkdocs "Found ~s but no ~s teachpack found" s ss-name)) + (list (cadr m) (bytes->path basename)))) + (filter (lambda (f) (not (equal? (path->bytes f) #"index.thtml"))) thtml-files)))) +;; Check that `lib-names' exactly match `libraires': +(let ([file-libs (map car lib-names)]) + (define (test x) (and (pair? x) x)) + (cond + [(test (remove* libraries* lib-names (lambda (x y) (equal? x (car y))))) => + (lambda (libs) + (error 'mkdocs "found libraries unlisted in mkdocs: ~s" libs))] + [(test (remove* file-libs libraries*)) => + (lambda (libs) + (error 'mkdocs "non-existent libraries listed in mkdocs: ~s" libs))]) + (let loop ([libs lib-names]) + (cond [(null? libs) 'ok] + [(assoc (caar libs) (cdr libs)) => + (lambda (m) + (error 'mkdocs "library ~s has two .thtml files: ~s and ~s" + (caar libs) (cdar libs) (cdr m)))] + [else (loop (cdr libs))]))) + +;; Just like lib-names, but ordered according to libraries* +(define libraries (map (lambda (l) (assoc l lib-names)) libraries*)) + +(define LIBLINKS + (map (lambda (lib) + (format "
  • ~a
  • \n" + (string-append (bytes->string/utf-8 (path->bytes (cadr lib))) ".html") + (car lib) + #;(string-append (bytes->string/utf-8 (path->bytes (cadr lib))) ".ss"))) + libraries)) + +;; Stuff for the preprocessed files +(require (lib "mzpp.ss" "preprocessor")) +(beg-mark "{") (end-mark "}") +(define index-entries '()) +(define FILENAME #f) +(define LIBNAME #f) +(define HTMLNAME #f) +(define-syntax idx + (syntax-rules () + [(_ x) + (begin (set! index-entries (cons (list FILENAME LIBNAME HTMLNAME `x) + index-entries)) + (list ""`x""))])) + +;; Make html files +(for-each (lambda (thtml) + (define html (bytes->path (regexp-replace #rx#"[.]thtml" (path->bytes thtml) #".html"))) + (printf "Processing ~a...\n" thtml) + (set! HTMLNAME html) + #;(set! FILENAME (bytes->path (regexp-replace #rx#"[.]thtml" (path->bytes thtml) #".ss"))) + (with-output-to-file (build-path dest-dir html) + (lambda () (preprocess thtml)) + 'replace)) + thtml-files) + +;; Make hdindex file: +(let ([ifile (build-path dest-dir "hdindex")]) + (printf "Writing hdindex...\n") + (with-output-to-file ifile + (lambda () + (define (writeln x) (printf "~s\n" x)) + (define (do-entry filename libname html entry) + (let ([entry (format "~a" entry)] + [title (format "~a teachpack" libname)]) + (writeln `(,entry ,(bytes->string/utf-8 (path->bytes html)) ,entry ,title)))) + (printf "(\n") + (let ([title "Teachpacks for \"How to Design Classes\""]) + (writeln `(,title "index.html" "HtDC" ,title))) + (for-each (lambda (x) (apply do-entry x)) (reverse index-entries)) + (printf ")\n")) + 'truncate)) diff --git a/teachpack/htdc/draw.ss b/teachpack/htdc/draw.ss new file mode 100644 index 0000000000..4ea13039b3 --- /dev/null +++ b/teachpack/htdc/draw.ss @@ -0,0 +1 @@ +(printf "this is just a stand-in for the plt/collects/htdch/draw/ library\n") diff --git a/teachpack/htdc/idraw.ss b/teachpack/htdc/idraw.ss new file mode 100644 index 0000000000..73e2ad7b68 --- /dev/null +++ b/teachpack/htdc/idraw.ss @@ -0,0 +1 @@ +(printf "this is just a stand-in for the plt/collects/htdch/idraw/ library\n") diff --git a/teachpack/htdp/Docs/world.thtml b/teachpack/htdp/Docs/world.thtml index 21fb2ee42c..0b48c56d79 100644 --- a/teachpack/htdp/Docs/world.thtml +++ b/teachpack/htdp/Docs/world.thtml @@ -58,6 +58,12 @@ students to simulate a small world of animated drawings and games: (place-image image x y scene) places image at (x,y) into scene; (x,y) are comp. graph. coordinates +
  • {(idx add-line)} : Scene Number Number Number Number Color -> Scene
    + (add-line scene x0 y0 x1 y1 c) + places a line of color c from (x0,y0) to + (x1,y1) into scene; + (x,y) are comp. graph. coordinates +
  • {(idx run-movie)} : (Listof Image) -> true
    (run-movie loi) shows the list of images in loi, time-delayed