#!/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 "dirs.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)" #"A Geometry Library (HtDC)" #"A Colors Library (HtDC)" )) (define dest-dir (build-path (find-doc-dir) "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 "