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:
parent
bf6b952964
commit
e151e32b82
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
||||
;; ----------------------------------------
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Reference in New Issue
Block a user