bkyk8rc3zvpnsf5inmcqq4n3k98cv6hj-my-site-hyper-literate-git.test.suzanne.soy-0.0.1

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 7a53e8ef7e965b688a0f69bec2ea9cd7fe70857a
parent 2dcde7a5e2f448d10844fb464246ca4b13e348e4
Author: Matthew Flatt <mflatt@racket-lang.org>
Date:   Sat, 15 Dec 2007 22:10:29 +0000

split setup/scribble-index into setup/xref and scribble/xref

svn: r8020

original commit: c9aecb01f011513749adee4d311d545fcb760b7a

Diffstat:
Mcollects/help/search.ss | 12+++++-------
Acollects/scribble/xref.ss | 120+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dcollects/setup/scribble-index.ss | 152------------------------------------------------------------------------------
3 files changed, 125 insertions(+), 159 deletions(-)

diff --git a/collects/help/search.ss b/collects/help/search.ss @@ -1,6 +1,7 @@ #lang scheme/base -(require setup/scribble-index +(require setup/xref + scribble/xref scribble/struct scribble/manual-struct scribble/decode @@ -10,11 +11,8 @@ net/sendurl mzlib/contract) -;; Restore the contract when keywords are supported: -(provide generate-search-results) -#; (provide/contract - [generate-search-results (-> (listof string?) #:xref xref? void?)]) + [generate-search-results (-> (listof string?) void?)]) (define (make-extra-content desc) ;; Use `desc' to provide more details on the link: @@ -58,7 +56,7 @@ (append (cdr search-results-files) (list (car search-results-files)))))) -(define (generate-search-results search-keys #:xref [xref #f]) +(define (generate-search-results search-keys) (let ([file (next-search-results-file)] [search-regexps (map (λ (x) (regexp (regexp-quote x #f))) search-keys)] [exact-search-regexps (map (λ (x) (regexp (format "^~a$" (regexp-quote x #f)))) search-keys)] @@ -71,7 +69,7 @@ (car search-keys) (map (λ (x) (format ", or ~a" x)) (cdr search-keys)))])]) - (let ([x (or xref (load-xref))]) + (let ([x (load-collections-xref)]) (xref-render x (decode `(,(title (format "Search results for ~a" search-key-string)) diff --git a/collects/scribble/xref.ss b/collects/scribble/xref.ss @@ -0,0 +1,120 @@ +#lang scheme/base + +(require scribble/struct + scribble/manual-struct + scribble/decode-struct + scribble/base-render + (prefix-in html: scribble/html-render) + scheme/class + mzlib/serialize + scheme/path + setup/main-collects) + +(provide load-xref + xref? + xref-render + xref-index + xref-binding->definition-tag + xref-tag->path+anchor + (struct-out entry)) + +(define-struct entry (words ; list of strings: main term, sub-term, etc. + content ; Scribble content to the index label + link-key ; for generating a Scribble link + desc)) ; further info that depends on the kind of index entry + +;; Private: +(define-struct xrefs (renderer ri)) + +(define (xref? x) (xrefs? x)) + +;; ---------------------------------------- +;; Xref loading + +(define-namespace-anchor here) + +(define (load-xref sources) + (let* ([renderer (new (html:render-mixin render%) + [dest-dir (find-system-path 'temp-dir)])] + [ci (send renderer collect null null)]) + (for-each (lambda (src) + (parameterize ([current-namespace (namespace-anchor->empty-namespace here)]) + (let ([r (with-input-from-file src read)]) + (send renderer deserialize-info (cadr r) ci)))) + sources) + (make-xrefs renderer (send renderer resolve null null ci)))) + +;; ---------------------------------------- +;; Xref reading + +(define (xref-index xrefs) + (filter + values + (hash-table-map (collect-info-ext-ht (resolve-info-ci (xrefs-ri xrefs))) + (lambda (k v) + (and (pair? k) + (eq? (car k) 'index-entry) + (make-entry (car v) + (cadr v) + (cadr k) + (caddr v))))))) + +(define (xref-render xrefs doc dest-file) + (let* ([dest-file (if (string? dest-file) + (string->path dest-file) + dest-file)] + [renderer (new (html:render-mixin render%) + [dest-dir (path-only dest-file)])] + [ci (send renderer collect (list doc) (list dest-file))]) + (send renderer transfer-info ci (resolve-info-ci (xrefs-ri xrefs))) + (let ([ri (send renderer resolve (list doc) (list dest-file) ci)]) + (send renderer render (list doc) (list dest-file) ri) + (void)))) + +;; Returns (values <tag-or-#f> <form?>) +(define (xref-binding-tag xrefs src id) + (let ([search + (lambda (src) + (let ([base (format ":~a:~a" + (if (path? src) + (path->main-collects-relative src) + src) + id)] + [ht (collect-info-ext-ht (resolve-info-ci (xrefs-ri xrefs)))]) + (let ([form-tag `(form ,base)] + [val-tag `(def ,base)]) + (if (hash-table-get ht form-tag #f) + (values form-tag #t) + (if (hash-table-get ht val-tag #f) + (values val-tag #f) + (values #f #f))))))]) + (let loop ([src src]) + (cond + [(path? src) + (if (complete-path? src) + (search src) + (loop (path->complete-path src)))] + [(path-string? src) + (loop (path->complete-path src))] + [(resolved-module-path? src) + (let ([n (resolved-module-path-name src)]) + (if (pair? n) + (loop n) + (search n)))] + [(module-path-index? src) + (loop (module-path-index-resolve src))] + [(module-path? src) + (loop (module-path-index-join src #f))] + [else + (raise-type-error 'xref-binding-definition->tag + "module path, resolved module path, module path index, path, or string" + src)])))) + +(define (xref-binding->definition-tag xrefs src id) + (let-values ([(tag form?) (xref-binding-tag xrefs src id)]) + tag)) + +(define (xref-tag->path+anchor xrefs tag) + (let ([renderer (new (html:render-mixin render%) + [dest-dir (find-system-path 'temp-dir)])]) + (send renderer tag->path+anchor (xrefs-ri xrefs) tag))) diff --git a/collects/setup/scribble-index.ss b/collects/setup/scribble-index.ss @@ -1,152 +0,0 @@ -#lang scheme/base - -(require scribble/struct - scribble/manual-struct - scribble/decode-struct - scribble/base-render - (prefix-in html: scribble/html-render) - scheme/class - setup/getinfo - setup/dirs - mzlib/serialize - scheme/path - setup/main-collects) - -(provide load-xref - xref? - xref-render - xref-index - xref-binding->definition-tag - xref-tag->path+anchor - (struct-out entry)) - -(define-struct entry (words ; list of strings: main term, sub-term, etc. - content ; Scribble content to the index label - link-key ; for generating a Scribble link - desc)) ; further info that depends on the kind of index entry - -;; Private: -(define-struct xrefs (renderer ri)) - -(define (xref? x) (xrefs? x)) - -;; ---------------------------------------- -;; Xref loading - -(define-struct doc (source dest)) - -(define-namespace-anchor here) - -(define (load-xref) - (let* ([renderer (new (html:render-mixin render%) - [dest-dir (find-system-path 'temp-dir)])] - [dirs (find-relevant-directories '(scribblings))] - [infos (map get-info/full dirs)] - [docs (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 #"")))]) - (make-doc - (build-path dir (car d)) - (if (memq 'main-doc flags) - (build-path (find-doc-dir) name) - (build-path dir "compiled" "doc" name))))) - #f)) - s))) - infos - dirs)))] - [ci (send renderer collect null null)]) - (for-each (lambda (doc) - (parameterize ([current-namespace (namespace-anchor->empty-namespace here)]) - (let ([r (with-input-from-file (build-path (doc-dest doc) "out.sxref") - read)]) - (send renderer deserialize-info (cadr r) ci)))) - docs) - (make-xrefs renderer (send renderer resolve null null ci)))) - -;; ---------------------------------------- -;; Xref reading - -(define (xref-index xrefs) - (filter - values - (hash-table-map (collect-info-ext-ht (resolve-info-ci (xrefs-ri xrefs))) - (lambda (k v) - (and (pair? k) - (eq? (car k) 'index-entry) - (make-entry (car v) - (cadr v) - (cadr k) - (caddr v))))))) - -(define (xref-render xrefs doc dest-file) - (let* ([dest-file (if (string? dest-file) - (string->path dest-file) - dest-file)] - [renderer (new (html:render-mixin render%) - [dest-dir (path-only dest-file)])] - [ci (send renderer collect (list doc) (list dest-file))]) - (send renderer transfer-info ci (resolve-info-ci (xrefs-ri xrefs))) - (let ([ri (send renderer resolve (list doc) (list dest-file) ci)]) - (send renderer render (list doc) (list dest-file) ri) - (void)))) - -;; Returns (values <tag-or-#f> <form?>) -(define (xref-binding-tag xrefs src id) - (let ([search - (lambda (src) - (let ([base (format ":~a:~a" - (if (path? src) - (path->main-collects-relative src) - src) - id)] - [ht (collect-info-ext-ht (resolve-info-ci (xrefs-ri xrefs)))]) - (let ([form-tag `(form ,base)] - [val-tag `(def ,base)]) - (if (hash-table-get ht form-tag #f) - (values form-tag #t) - (if (hash-table-get ht val-tag #f) - (values val-tag #f) - (values #f #f))))))]) - (let loop ([src src]) - (cond - [(path? src) - (if (complete-path? src) - (search src) - (loop (path->complete-path src)))] - [(path-string? src) - (loop (path->complete-path src))] - [(resolved-module-path? src) - (let ([n (resolved-module-path-name src)]) - (if (pair? n) - (loop n) - (search n)))] - [(module-path-index? src) - (loop (module-path-index-resolve src))] - [(module-path? src) - (loop (module-path-index-join src #f))] - [else - (raise-type-error 'xref-binding-definition->tag - "module path, resolved module path, module path index, path, or string" - src)])))) - -(define (xref-binding->definition-tag xrefs src id) - (let-values ([(tag form?) (xref-binding-tag xrefs src id)]) - tag)) - -(define (xref-tag->path+anchor xrefs tag) - (let ([renderer (new (html:render-mixin render%) - [dest-dir (find-system-path 'temp-dir)])]) - (send renderer tag->path+anchor (xrefs-ri xrefs) tag)))