;; generate index.html ;; sawfish menu specification format ;; spec ::= (item ...) ;; item ::= (name command) | ;; (submenu-name . spec) (define entries '(("singular" "toplevel") ("scheme" . (("r5rs" "/lisp/r5rs/r5rs_toc.html") ("sicp" "/lisp/sicp/book-Z-H-4.html") ("tspl" "/lisp/tspl2d/index.html") ("htdp" "/lisp/htdp/Book/curriculum-Z-H-1.html") ("scheme48" "/lisp/scheme48/s48manual.html") ("guile" . (("reference" "") ("goops" "") ("tutorial" ""))))) ("lisp" . (("test1" "/lisp") ("test2" "/lisp"))))) (define multi-part-submenu '(("e1" "c1") ("e2" "c2"))) (define multi-part `(("singular" "c1") ("submenu" . ,multi-part-submenu) () ; separator ("in-place" . (("item1" "foo") ("item2" "bar"))) () ("singular" "c2"))) (define (generate-entries spec) (cond ((null? spec) 'done) (else (let ((entry (car spec))) (cond ;;((null? entry) 'separator) ((string? (cadr entry)) ; single menu entry (make-entry entry)) ((pair? (cdr entry)) ; sublist (format #t "
~a:\n" (car entry)) (generate-entries (cdr entry)) (format #t "
\n")) (else (print "The entry-specification is fuxx0red."))) (generate-entries (cdr spec)))))) ; process rest at same nesting level ;; simplified, one level (define entries/simple '(("scheme" . (("r5rs" "/lisp/r5rs/r5rs_toc.html") ("sicp" "/lisp/sicp/book-Z-H-4.html") ("tspl" "/lisp/tspl2d/index.html") ("htdp" "/lisp/htdp/Book/curriculum-Z-H-1.html") ("scheme48" "/lisp/scheme48/s48manual.html"))) ("guile" . (("reference" "") ("goops" "") ("tutorial" ""))) ("lisp" . (("test1" "/lisp") ("test2" "/lisp"))))) ;; simplified generator, iterative (define (generate-entries/simple spec) (dolist (item spec) (format #t "~a:\n" (car item)) (dolist (entry (cdr item)) (make-entry entry)) (format #t "
\n"))) (define (make-entry spec) (format #t "~a\n" (cadr spec) (car spec))) (define header "