(define main 0) (define aux 1) (define pretty-print (lambda (expr) (format #t "Pretty: ~S\n" expr) expr)) (define every? (lambda (test . lists) (let scan ((tails lists)) (if (member #t (map null? tails)) ;(any null? lists) #t (and (apply test (map car tails)) (scan (map cdr tails))))))) (define (make-entry key font main/aux page) (list key font main/aux page)) (define (entry-key x) (car x)) (define (entry-font x) (cadr x)) (define (entry-main/aux x) (caddr x)) (define (entry-page x) (cadddr x)) (define *database* '()) (define (index-entry key font main/aux page) (set! *database* (cons (make-entry (string-lower key) font main/aux page) *database*)) #t) (define (create-index p) (define (loop) (if (null? *database*) 'done (begin (process-key (collect-entries) p) (loop)))) (set! *database* (sort *database* (lambda (x y) (stringstring '(#\\)))) (define *s2* "{") (define *s3* "}}\\dotfill\\ ") (define *semi* "\; ") (define *comma* ", ") (define (write-entries key font main pages p) (if (and (char-alphabetic? (string-ref key 0)) (not (char=? (string-ref *last-key* 0) (string-ref key 0)))) (begin (display "\\indexspace" p) (newline p) (display "{\\vskip3mm\\LARGE " p) (display (string-upper (substring key 0 1)) p) (display "\\nopagebreak}\\" p) (newline p))) (set! *last-key* key) (display (string-append *s1* font *s2* key *s3*) p) (if main (begin (write main p) (if (not (null? pages)) (display *semi* p)))) (if (not (null? pages)) (begin (write (car pages) p) (for-each (lambda (page) (display *comma* p) (write page p)) (cdr pages)))) (newline p)) (load "manual.idx") (define p (open-output-file "index.tex")) (create-index p)