change Scribble xref formats, so that HTML info works for Latex

There's no particular reason that any one format will have all
the information that other formats need, but it conveniently works
for now that HTML info can subsume Latex info.

original commit: a1fd742ed022035732b4a0c778168cc6b862933a
This commit is contained in:
Matthew Flatt 2012-01-11 16:39:52 -07:00
parent bf6b952964
commit e151e32b82
5 changed files with 54 additions and 49 deletions

View File

@ -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))

View File

@ -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))
;; ----------------------------------------

View File

@ -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)

View File

@ -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

View File

@ -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]