fix Scribble rendering of links when tag-prefixed sub-sections appear in the same output anchor scope
svn: r14608 original commit: 22864b594d11e027b7162fa82b30e207f91d7e1f
This commit is contained in:
parent
b0a3be38f4
commit
4b6b80d7fc
|
@ -109,6 +109,22 @@
|
||||||
(and (pair? p)
|
(and (pair? p)
|
||||||
(mobile-root? (car p))))
|
(mobile-root? (car p))))
|
||||||
|
|
||||||
|
;; ----------------------------------------
|
||||||
|
|
||||||
|
(define/public (fresh-tag-collect-context? d ci)
|
||||||
|
#f)
|
||||||
|
(define/public (fresh-tag-resolve-context? d ri)
|
||||||
|
#f)
|
||||||
|
(define/public (fresh-tag-render-context? d ri)
|
||||||
|
#f)
|
||||||
|
|
||||||
|
(define/private (extend-prefix d fresh?)
|
||||||
|
(cond
|
||||||
|
[fresh? null]
|
||||||
|
[(part-tag-prefix d)
|
||||||
|
(cons (part-tag-prefix d) (current-tag-prefixes))]
|
||||||
|
[else (current-tag-prefixes)]))
|
||||||
|
|
||||||
;; ----------------------------------------
|
;; ----------------------------------------
|
||||||
;; marshal info
|
;; marshal info
|
||||||
|
|
||||||
|
@ -174,6 +190,8 @@
|
||||||
(make-collected-info number
|
(make-collected-info number
|
||||||
parent
|
parent
|
||||||
(collect-info-ht p-ci)))
|
(collect-info-ht p-ci)))
|
||||||
|
(parameterize ([current-tag-prefixes
|
||||||
|
(extend-prefix d (fresh-tag-collect-context? d p-ci))])
|
||||||
(when (part-title-content d)
|
(when (part-title-content d)
|
||||||
(collect-content (part-title-content d) p-ci))
|
(collect-content (part-title-content d) p-ci))
|
||||||
(collect-part-tags d p-ci number)
|
(collect-part-tags d p-ci number)
|
||||||
|
@ -193,7 +211,7 @@
|
||||||
(if (or (unnumbered-part? s)
|
(if (or (unnumbered-part? s)
|
||||||
(part-style? s 'unnumbered))
|
(part-style? s 'unnumbered))
|
||||||
pos
|
pos
|
||||||
(add1 pos))))))
|
(add1 pos)))))))
|
||||||
(let ([prefix (part-tag-prefix d)])
|
(let ([prefix (part-tag-prefix d)])
|
||||||
(for ([(k v) (collect-info-ht p-ci)])
|
(for ([(k v) (collect-info-ht p-ci)])
|
||||||
(when (cadr k)
|
(when (cadr k)
|
||||||
|
@ -284,11 +302,13 @@
|
||||||
(map (lambda (d) (resolve-part d ri)) ds))
|
(map (lambda (d) (resolve-part d ri)) ds))
|
||||||
|
|
||||||
(define/public (resolve-part d ri)
|
(define/public (resolve-part d ri)
|
||||||
|
(parameterize ([current-tag-prefixes
|
||||||
|
(extend-prefix d (fresh-tag-resolve-context? d ri))])
|
||||||
(when (part-title-content d)
|
(when (part-title-content d)
|
||||||
(resolve-content (part-title-content d) d ri))
|
(resolve-content (part-title-content d) d ri))
|
||||||
(resolve-flow (part-flow d) d ri)
|
(resolve-flow (part-flow d) d ri)
|
||||||
(for ([p (part-parts d)])
|
(for ([p (part-parts d)])
|
||||||
(resolve-part p ri)))
|
(resolve-part p ri))))
|
||||||
|
|
||||||
(define/public (resolve-content c d ri)
|
(define/public (resolve-content c d ri)
|
||||||
(for ([i c])
|
(for ([i c])
|
||||||
|
@ -373,6 +393,11 @@
|
||||||
(render-part d ri))
|
(render-part d ri))
|
||||||
|
|
||||||
(define/public (render-part d ri)
|
(define/public (render-part d ri)
|
||||||
|
(parameterize ([current-tag-prefixes
|
||||||
|
(extend-prefix d (fresh-tag-render-context? d ri))])
|
||||||
|
(render-part-content d ri)))
|
||||||
|
|
||||||
|
(define/public (render-part-content d ri)
|
||||||
(list
|
(list
|
||||||
(when (part-title-content d)
|
(when (part-title-content d)
|
||||||
(render-content (part-title-content d) d ri))
|
(render-content (part-title-content d) d ri))
|
||||||
|
|
|
@ -230,6 +230,7 @@
|
||||||
(class %
|
(class %
|
||||||
(inherit render-content
|
(inherit render-content
|
||||||
render-block
|
render-block
|
||||||
|
render-part
|
||||||
collect-part
|
collect-part
|
||||||
install-file
|
install-file
|
||||||
get-dest-directory
|
get-dest-directory
|
||||||
|
@ -295,6 +296,13 @@
|
||||||
(define/public (current-part-whole-page? d)
|
(define/public (current-part-whole-page? d)
|
||||||
(eq? d (current-top-part)))
|
(eq? d (current-top-part)))
|
||||||
|
|
||||||
|
(define/override (fresh-tag-collect-context? d ci)
|
||||||
|
(current-part-whole-page? d))
|
||||||
|
(define/override (fresh-tag-resolve-context? d ri)
|
||||||
|
(part-whole-page? d ri))
|
||||||
|
(define/override (fresh-tag-render-context? d ri)
|
||||||
|
(part-whole-page? d ri))
|
||||||
|
|
||||||
(define/override (collect-part-tags d ci number)
|
(define/override (collect-part-tags d ci number)
|
||||||
(for ([t (part-tags d)])
|
(for ([t (part-tags d)])
|
||||||
(let ([key (generate-tag t ci)])
|
(let ([key (generate-tag t ci)])
|
||||||
|
@ -303,7 +311,7 @@
|
||||||
(path->relative (current-output-file)))
|
(path->relative (current-output-file)))
|
||||||
(or (part-title-content d) '("???"))
|
(or (part-title-content d) '("???"))
|
||||||
(current-part-whole-page? d)
|
(current-part-whole-page? d)
|
||||||
key)))))
|
(add-current-tag-prefix key))))))
|
||||||
|
|
||||||
(define/override (collect-target-element i ci)
|
(define/override (collect-target-element i ci)
|
||||||
(let ([key (generate-tag (target-element-tag i) ci)])
|
(let ([key (generate-tag (target-element-tag i) ci)])
|
||||||
|
@ -320,7 +328,7 @@
|
||||||
(if (redirect-target-element? i)
|
(if (redirect-target-element? i)
|
||||||
(make-literal-anchor
|
(make-literal-anchor
|
||||||
(redirect-target-element-alt-anchor i))
|
(redirect-target-element-alt-anchor i))
|
||||||
key)))))
|
(add-current-tag-prefix key))))))
|
||||||
|
|
||||||
(define (dest-path dest)
|
(define (dest-path dest)
|
||||||
(if (vector? dest) ; temporary
|
(if (vector? dest) ; temporary
|
||||||
|
@ -556,10 +564,11 @@
|
||||||
,(format
|
,(format
|
||||||
"#~a"
|
"#~a"
|
||||||
(anchor-name
|
(anchor-name
|
||||||
|
(add-current-tag-prefix
|
||||||
(tag-key (if (part? p)
|
(tag-key (if (part? p)
|
||||||
(car (part-tags p))
|
(car (part-tags p))
|
||||||
(target-element-tag p))
|
(target-element-tag p))
|
||||||
ri)))]
|
ri))))]
|
||||||
[class
|
[class
|
||||||
,(cond
|
,(cond
|
||||||
[(part? p) "tocsubseclink"]
|
[(part? p) "tocsubseclink"]
|
||||||
|
@ -795,13 +804,15 @@
|
||||||
d
|
d
|
||||||
ri))))))
|
ri))))))
|
||||||
|
|
||||||
(define/override (render-part d ri)
|
(define/override (render-part-content d ri)
|
||||||
(let ([number (collected-info-number (part-collected-info d ri))])
|
(let ([number (collected-info-number (part-collected-info d ri))])
|
||||||
`(,@(cond
|
`(,@(cond
|
||||||
[(and (not (part-title-content d)) (null? number)) null]
|
[(and (not (part-title-content d)) (null? number)) null]
|
||||||
[(part-style? d 'hidden)
|
[(part-style? d 'hidden)
|
||||||
(map (lambda (t)
|
(map (lambda (t)
|
||||||
`(a ((name ,(format "~a" (anchor-name (tag-key t ri)))))))
|
`(a ((name ,(format "~a" (anchor-name
|
||||||
|
(add-current-tag-prefix
|
||||||
|
(tag-key t ri))))))))
|
||||||
(part-tags d))]
|
(part-tags d))]
|
||||||
[else `((,(case (length number)
|
[else `((,(case (length number)
|
||||||
[(0) 'h2]
|
[(0) 'h2]
|
||||||
|
@ -811,7 +822,8 @@
|
||||||
,@(format-number number '((tt nbsp)))
|
,@(format-number number '((tt nbsp)))
|
||||||
,@(map (lambda (t)
|
,@(map (lambda (t)
|
||||||
`(a ([name ,(format "~a" (anchor-name
|
`(a ([name ,(format "~a" (anchor-name
|
||||||
(tag-key t ri)))])))
|
(add-current-tag-prefix
|
||||||
|
(tag-key t ri))))])))
|
||||||
(part-tags d))
|
(part-tags d))
|
||||||
,@(if (part-title-content d)
|
,@(if (part-title-content d)
|
||||||
(render-content (part-title-content d) d ri)
|
(render-content (part-title-content d) d ri)
|
||||||
|
@ -875,8 +887,9 @@
|
||||||
;; (commented) hack in scribble-common.js)
|
;; (commented) hack in scribble-common.js)
|
||||||
`(noscript ,@(render-plain-element e part ri))))]
|
`(noscript ,@(render-plain-element e part ri))))]
|
||||||
[(target-element? e)
|
[(target-element? e)
|
||||||
`((a ([name ,(format "~a" (anchor-name (tag-key (target-element-tag e)
|
`((a ([name ,(format "~a" (anchor-name (add-current-tag-prefix
|
||||||
ri)))]))
|
(tag-key (target-element-tag e)
|
||||||
|
ri))))]))
|
||||||
,@(render-plain-element e part ri))]
|
,@(render-plain-element e part ri))]
|
||||||
[(and (link-element? e) (not (current-no-links)))
|
[(and (link-element? e) (not (current-no-links)))
|
||||||
(parameterize ([current-no-links #t])
|
(parameterize ([current-no-links #t])
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
(inherit render-block
|
(inherit render-block
|
||||||
render-content
|
render-content
|
||||||
|
render-part
|
||||||
install-file
|
install-file
|
||||||
format-number
|
format-number
|
||||||
extract-part-style-files)
|
extract-part-style-files)
|
||||||
|
@ -69,7 +70,7 @@
|
||||||
(render-part d ri)
|
(render-part d ri)
|
||||||
(printf "\n\n\\postDoc\n\\end{document}\n")))
|
(printf "\n\n\\postDoc\n\\end{document}\n")))
|
||||||
|
|
||||||
(define/override (render-part d ri)
|
(define/override (render-part-content d ri)
|
||||||
(let ([number (collected-info-number (part-collected-info d ri))])
|
(let ([number (collected-info-number (part-collected-info d ri))])
|
||||||
(when (and (part-title-content d) (pair? number))
|
(when (and (part-title-content d) (pair? number))
|
||||||
(when (part-style? d 'index)
|
(when (part-style? d 'index)
|
||||||
|
|
|
@ -376,7 +376,9 @@
|
||||||
(define deserialize-generated-tag
|
(define deserialize-generated-tag
|
||||||
(make-deserialize-info values values))
|
(make-deserialize-info values values))
|
||||||
|
|
||||||
(provide generate-tag tag-key)
|
(provide generate-tag tag-key
|
||||||
|
current-tag-prefixes
|
||||||
|
add-current-tag-prefix)
|
||||||
|
|
||||||
(define (generate-tag tg ci)
|
(define (generate-tag tg ci)
|
||||||
(if (generated-tag? (cadr tg))
|
(if (generated-tag? (cadr tg))
|
||||||
|
@ -397,6 +399,13 @@
|
||||||
(hash-ref (collect-info-tags (resolve-info-ci ri)) (cadr tg)))
|
(hash-ref (collect-info-tags (resolve-info-ci ri)) (cadr tg)))
|
||||||
tg))
|
tg))
|
||||||
|
|
||||||
|
(define current-tag-prefixes (make-parameter null))
|
||||||
|
(define (add-current-tag-prefix t)
|
||||||
|
(let ([l (current-tag-prefixes)])
|
||||||
|
(if (null? l)
|
||||||
|
t
|
||||||
|
(cons (car t) (append l (cdr t))))))
|
||||||
|
|
||||||
;; ----------------------------------------
|
;; ----------------------------------------
|
||||||
|
|
||||||
(provide content->string
|
(provide content->string
|
||||||
|
|
|
@ -189,7 +189,7 @@ added to a list value using @scheme[cons]; a prefix is not added to a
|
||||||
outside the part, including the use of tags in the part's
|
outside the part, including the use of tags in the part's
|
||||||
@scheme[tags] field. Typically, a document's main part has a tag
|
@scheme[tags] field. Typically, a document's main part has a tag
|
||||||
prefix that applies to the whole document; references to sections and
|
prefix that applies to the whole document; references to sections and
|
||||||
defined terms within the document from other documents must include,
|
defined terms within the document from other documents must include the prefix,
|
||||||
while references within the same document omit the prefix. Part
|
while references within the same document omit the prefix. Part
|
||||||
prefixes can be used within a document as well, to help disambiguate
|
prefixes can be used within a document as well, to help disambiguate
|
||||||
references within the document.
|
references within the document.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user