From 30ae71202d92b39a9edbde8f121bb195c8191d1a Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 1 Oct 2016 10:51:18 -0600 Subject: [PATCH] fix references lifted to table of contents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Certain lifted reference forms carried the prefix of the original section, but in general the section needs to be similarly carried for rendering elements that may contain references. Also, fix the contract on `elemref` and `elemtag` to use `taglet?` instead of `tag?`. Thanks to Dupéron Georges. --- scribble-doc/scribblings/scribble/base.scrbl | 4 ++-- scribble-lib/scribble/base.rkt | 4 ++-- scribble-lib/scribble/html-render.rkt | 15 ++++++++------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/scribble-doc/scribblings/scribble/base.scrbl b/scribble-doc/scribblings/scribble/base.scrbl index 75a8bd75..72422f5b 100644 --- a/scribble-doc/scribblings/scribble/base.scrbl +++ b/scribble-doc/scribblings/scribble/base.scrbl @@ -691,13 +691,13 @@ renders as a hyperlink with the text: }|} -@defproc[(elemtag [t (or/c tag? string?)] [pre-content pre-content?] ...) element?]{ +@defproc[(elemtag [t (or/c taglet? generated-tag?)] [pre-content pre-content?] ...) element?]{ The tag @racket[t] refers to the content form of @racket[pre-content].} -@defproc[(elemref [t (or/c tag? string?)] [pre-content pre-content?] ... +@defproc[(elemref [t (or/c taglet? generated-tag?)] [pre-content pre-content?] ... [#:underline? underline? any/c #t]) element?]{ The @tech{decode}d @racket[pre-content] is hyperlinked to @racket[t], diff --git a/scribble-lib/scribble/base.rkt b/scribble-lib/scribble/base.rkt index 14102588..3e4b4abd 100644 --- a/scribble-lib/scribble/base.rkt +++ b/scribble-lib/scribble/base.rkt @@ -572,11 +572,11 @@ ;; ---------------------------------------- (provide/contract - [elemtag (->* ((or/c tag? string?)) + [elemtag (->* ((or/c taglet? generated-tag?)) () #:rest (listof pre-content?) element?)] - [elemref (->* ((or/c tag? string?)) + [elemref (->* ((or/c taglet? generated-tag?)) (#:underline? any/c) #:rest (listof pre-content?) element?)] diff --git a/scribble-lib/scribble/html-render.rkt b/scribble-lib/scribble/html-render.rkt index e9d3a5d8..2de02bba 100644 --- a/scribble-lib/scribble/html-render.rkt +++ b/scribble-lib/scribble/html-render.rkt @@ -731,24 +731,25 @@ (if (or (nearly-top? d) (part-style? d 'toc-hidden)) null - (list (cons d prefixes))) + (list (vector d prefixes d))) ;; get internal targets: - (map (lambda (v) (cons v prefixes)) (append-map block-targets (part-blocks d))) + (map (lambda (v) (vector v prefixes d)) (append-map block-targets (part-blocks d))) (map (lambda (p) (if (or (part-whole-page? p ri) (and (part-style? p 'toc-hidden) (all-toc-hidden? p))) null (flatten p prefixes #f))) (part-parts d))))))) - (define any-parts? (ormap (compose part? car) ps)) + (define any-parts? (ormap (compose part? (lambda (p) (vector-ref p 0))) ps)) (if (null? ps) null `((div ([class ,box-class]) ,@(get-onthispage-label) (table ([class "tocsublist"] [cellspacing "0"]) ,@(map (lambda (p) - (let ([p (car p)] - [prefixes (cdr p)] + (let ([p (vector-ref p 0)] + [prefixes (vector-ref p 1)] + [from-d (vector-ref p 2)] [add-tag-prefixes (lambda (t prefixes) (if (null? prefixes) @@ -765,7 +766,7 @@ '("")) ,@(if (toc-element? p) (render-content (toc-element-toc-content p) - d ri) + from-d ri) (parameterize ([current-no-links #t] [extra-breaking? #t]) `((a ([href @@ -793,7 +794,7 @@ (if (toc-target2-element? p) (toc-target2-element-toc-content p) (element-content p))) - d ri))))))))) + from-d ri))))))))) ps))))))) (define/private (extract-inherited d ri pred extract)