diff --git a/collects/scribble/html-render.rkt b/collects/scribble/html-render.rkt index a9325c4977..6e39453f7f 100644 --- a/collects/scribble/html-render.rkt +++ b/collects/scribble/html-render.rkt @@ -92,9 +92,6 @@ (define current-version (make-parameter (version))) (define current-part-files (make-parameter #f)) -(define (toc-part? d) - (part-style? d 'toc)) - ;; HTML anchors should be case-insensitively unique. To make them ;; distinct, add a "." in front of capital letters. Also clean up ;; characters that give browers trouble (i.e., the ones that are not @@ -698,6 +695,11 @@ (define/private (part-parent d ri) (collected-info-parent (part-collected-info d ri))) + (define (toc-part? d ri) + (and (part-style? d 'toc) + ;; topmost part doesn't count as toc, since it + (part-parent d ri))) + (define/private (find-siblings d ri) (let ([parent (collected-info-parent (part-collected-info d ri))]) (let loop ([l (cond @@ -729,17 +731,19 @@ (define prev (if prev0 (let loop ([p prev0]) - (if (and (toc-part? p) (pair? (part-parts p))) + (if (and (toc-part? p ri) (pair? (part-parts p))) (loop (last (part-parts p))) p)) - (and parent (toc-part? parent) parent))) + (and parent (toc-part? parent ri) parent))) (define next - (cond [(and (toc-part? d) (pair? (part-parts d))) (car (part-parts d))] + (cond [(and (toc-part? d ri) (pair? (part-parts d))) (car (part-parts d))] [(not next0) (let loop ([p parent]) - (and p (toc-part? p) + (and p + (toc-part? p ri) (let-values ([(prev next) (find-siblings p ri)]) - (or next (loop (part-parent p ri))))))] + (or next + (loop (part-parent p ri))))))] [else next0])) (define index (let loop ([d d]) @@ -779,7 +783,9 @@ (make-style #f (list - (make-target-url url) + (make-target-url (if (equal? url "") + "#" + url)) (make-attributes `([title . ,(if title* (string-append label " to " title*) label)] [pltdoc . "x"] @@ -822,7 +828,7 @@ sep-element (make-element (cond - [(and (part? parent) (toc-part? parent) + [(and (part? parent) (toc-part? parent ri) (part-parent parent ri)) (titled-url "up" parent)] [parent (titled-url "up" "index.html" #:title-from parent)] @@ -1472,7 +1478,7 @@ (define/override (collect-part d parent ci number) (let ([prev-sub (collecting-sub)]) - (parameterize ([collecting-sub (if (toc-part? d) + (parameterize ([collecting-sub (if (part-style? d 'toc) 1 (add1 prev-sub))] [collecting-whole-page (prev-sub . <= . 1)])