racket/collects/setup/xref.ss
2007-12-15 23:36:23 +00:00

48 lines
2.4 KiB
Scheme

#lang scheme/base
(require scribble/xref
setup/getinfo
setup/dirs)
(provide load-collections-xref)
(define cached-xref #f)
(define (load-collections-xref [report-loading void])
(or cached-xref
(begin
(report-loading)
(let* ([dirs (find-relevant-directories '(scribblings))]
[infos (map get-info/full dirs)]
[dests (filter
values
(apply append
(map (lambda (i dir)
(let ([s (i 'scribblings)])
(map (lambda (d)
(if (pair? d)
(let ([flags (if (pair? (cdr d))
(cadr d)
null)])
(let ([name (if (and (pair? (cdr d))
(pair? (cddr d))
(caddr d))
(cadr d)
(let-values ([(base name dir?) (split-path (car d))])
(path-replace-suffix name #"")))])
(build-path
(if (memq 'main-doc flags)
(build-path (find-doc-dir) name)
(build-path dir "compiled" "doc" name))
"out.sxref")))
#f))
s)))
infos
dirs)))])
(set! cached-xref (load-xref (map (lambda (dest)
(lambda ()
(let ([r (with-input-from-file dest read)])
(cadr r))))
dests)))
cached-xref))))