diff --git a/collects/scribble/base-render.rkt b/collects/scribble/base-render.rkt index eb2c8b42..c9a428e6 100644 --- a/collects/scribble/base-render.rkt +++ b/collects/scribble/base-render.rkt @@ -433,11 +433,15 @@ (define/public (collect-part-tags d ci number) (for ([t (part-tags d)]) (let ([t (generate-tag t ci)]) - (hash-set! (collect-info-ht ci) - t - (list (or (part-title-content d) '("???")) - number - (add-current-tag-prefix t)))))) + (collect-put! ci + t + ;; INFO SHAPE: + ;; The HTML renderer defines its info as an + ;; extension of this vector's shape, so that + ;; other renderers can use HTML info. + (vector (or (part-title-content d) '("???")) + (add-current-tag-prefix t) + number))))) (define/public (collect-paragraph p ci) (collect-content (paragraph-content p) ci)) @@ -490,7 +494,10 @@ (define/public (collect-target-element i ci) (let ([t (generate-tag (target-element-tag i) ci)]) - (collect-put! ci t (list i (add-current-tag-prefix t))))) + (collect-put! ci t + ;; See "INFO SHAPE" above. + (vector (element-content i) + (add-current-tag-prefix t))))) (define/public (collect-index-element i ci) (collect-put! ci @@ -699,8 +706,8 @@ (null? (element-content i))) (let ([v (resolve-get part ri (link-element-tag i))]) (if v - (render-content (strip-aux (car v)) part ri) - (render-content (list "[missing]") part ri)))] + (render-content (strip-aux (or (vector-ref v 0) "???")) part ri) + (render-content (list "[missing]") part ri)))] [(element? i) (when (render-element? i) ((render-element-render i) this part ri)) diff --git a/collects/scribble/html-render.rkt b/collects/scribble/html-render.rkt index 2162c1fa..2ade7cd1 100644 --- a/collects/scribble/html-render.rkt +++ b/collects/scribble/html-render.rkt @@ -284,48 +284,42 @@ (for ([t (part-tags d)]) (let ([key (generate-tag t ci)]) (collect-put! ci key - (vector (and (current-output-file) + (vector (or (part-title-content d) '("???")) + (add-current-tag-prefix key) + number ; for consistency with base + (and (current-output-file) (path->relative (current-output-file))) - (or (part-title-content d) '("???")) - (current-part-whole-page? d) - (add-current-tag-prefix key)))))) + (current-part-whole-page? d)))))) (define/override (collect-target-element i ci) (let ([key (generate-tag (target-element-tag i) ci)]) (collect-put! ci key - (vector (path->relative - (let ([p (current-output-file)]) - (if (redirect-target-element? i) - (let-values ([(base name dir?) (split-path p)]) - (build-path base - (redirect-target-element-alt-path i))) - p))) - (let ([tag (target-element-tag i)]) - (if (and (pair? tag) (eq? 'part (car tag))) - (element-content i) - #f)) - (page-target-element? i) - (if (redirect-target-element? i) - (make-literal-anchor - (redirect-target-element-alt-anchor i)) - (add-current-tag-prefix key)))))) + (vector (let ([tag (target-element-tag i)]) + (if (and (pair? tag) (eq? 'part (car tag))) + (element-content i) + #f)) + (if (redirect-target-element? i) + (make-literal-anchor + (redirect-target-element-alt-anchor i)) + (add-current-tag-prefix key)) + #f ; for consistency with 'part info + (path->relative + (let ([p (current-output-file)]) + (if (redirect-target-element? i) + (let-values ([(base name dir?) (split-path p)]) + (build-path base + (redirect-target-element-alt-path i))) + p))) + (page-target-element? i))))) (define (dest-path dest) - (if (vector? dest) ; temporary - (vector-ref dest 0) - (list-ref dest 0))) + (vector-ref dest 3)) (define (dest-title dest) - (if (vector? dest) - (vector-ref dest 1) - (list-ref dest 1))) + (vector-ref dest 0)) (define (dest-page? dest) - (if (vector? dest) - (vector-ref dest 2) - (list-ref dest 2))) + (vector-ref dest 4)) (define (dest-anchor dest) - (if (vector? dest) - (vector-ref dest 3) - (list-ref dest 3))) + (vector-ref dest 1)) ;; ---------------------------------------- diff --git a/collects/scribble/latex-render.rkt b/collects/scribble/latex-render.rkt index a47ad09e..1cdbda22 100644 --- a/collects/scribble/latex-render.rkt +++ b/collects/scribble/latex-render.rkt @@ -247,9 +247,10 @@ (printf "\\label{t:~a}" (t-encode (add-current-tag-prefix (tag-key (target-element-tag e) ri))))) (when part-label? - (let ([dest (resolve-get part ri (link-element-tag e))]) + (let* ([dest (resolve-get part ri (link-element-tag e))] + [number (and dest (vector-ref dest 2))]) (printf "\\~aRef~a{" - (case (and dest (length (cadr dest))) + (case (and dest (length number)) [(0) "Book"] [(1) "Chap"] [else "Sec"]) @@ -259,8 +260,8 @@ "")) (render-content (if dest - (if (list? (cadr dest)) - (format-number (cadr dest) null) + (if (list? number) + (format-number number null) (begin (fprintf (current-error-port) "Internal tag error: ~s -> ~s\n" (link-element-tag e) @@ -390,7 +391,7 @@ (printf ", \\pageref{t:~a}" (t-encode (let ([v (resolve-get part ri (link-element-tag e))]) - (and v (last v)))))) + (and v (vector-ref v 1)))))) null)) (define/private (t-encode s) diff --git a/collects/scribblings/scribble/running.scrbl b/collects/scribblings/scribble/running.scrbl index 49cc4743..7e2bc1e7 100644 --- a/collects/scribblings/scribble/running.scrbl +++ b/collects/scribblings/scribble/running.scrbl @@ -77,7 +77,7 @@ content of @filepath{scribble.css} or @filepath{scribble.tex} is weakly specified; replacements must define all of the same styles, and the set of styles can change across versions of Racket. -Use @DFlag{prefix} to specify an alternate format-specific to start of +Use @DFlag{prefix} to specify an alternate format-specific start of the output file. For HTML output, the starting file specifies the @tt{DOCTYPE} declaration of each output HTML file as a substitute for @filepath{scribble-prefix.html} in the @filepath{scribble} @@ -96,8 +96,9 @@ the file automatically). Cross references within a document or documents rendered together are always resolved. When cross references span documents that are -rendered separately, format-specific cross-reference information needs -to be saved and loaded explicitly. +rendered separately, cross-reference information needs to be saved and +loaded explicitly. Cross-reference information is format-specific, but +HTML-format information is usable for Latex (or PDF) or text rendering. A Racket installation includes HTML-format cross-reference information for all installed documentation. Each document's information is in a diff --git a/collects/scribblings/scribble/xref.scrbl b/collects/scribblings/scribble/xref.scrbl index 34202d93..45619972 100644 --- a/collects/scribblings/scribble/xref.scrbl +++ b/collects/scribblings/scribble/xref.scrbl @@ -32,7 +32,9 @@ its result is ignored. Since the format of serialized information is specific to a rendering class, the optional @racket[using-render%] argument accepts the -relevant class. It default to HTML rendering. +relevant class. It defaults to HTML rendering, partly because +HTML-format information is usable by other formats (including +Latex/PDF and text). If @racket[root-path] is not @racket[#f], then file paths that are serialized as relative to an instantiation-supplied @racket[root-path]