diff --git a/collects/scribble/html-render.ss b/collects/scribble/html-render.ss index b416864c..1f1a0c77 100644 --- a/collects/scribble/html-render.ss +++ b/collects/scribble/html-render.ss @@ -355,13 +355,13 @@ null) (define/public (render-toc-view d ri) + (define has-sub-parts? + (pair? (part-parts d))) (define sub-parts-on-other-page? (and (pair? (part-parts d)) (part-whole-page? (car (part-parts d)) ri))) (define toc-chain - (let loop ([d d] [r (if sub-parts-on-other-page? - (list d) - '())]) + (let loop ([d d] [r (if has-sub-parts? (list d) '())]) (cond [(collected-info-parent (part-collected-info d ri)) => (lambda (p) (loop p (cons p r)))] [(pair? r) r] @@ -389,9 +389,18 @@ (define children (part-parts t)) ; note: might be empty (define id (format "tocview_~a" i)) (define last? (eq? t (last toc-chain))) - (define expand? (and last? - (or (collected-info-parent (part-collected-info d ri)) ;; => last isn't this page - sub-parts-on-other-page?))) ;; => last is this page, and it's useful to list subs + (define expand? (or (and last? + (or (not has-sub-parts?) + sub-parts-on-other-page?)) + (and has-sub-parts? + (not sub-parts-on-other-page?) + ;; next-to-last? + (let loop ([l toc-chain]) + (cond + [(null? l) #f] + [(eq? t (car l)) + (and (pair? (cdr l)) (null? (cddr l)))] + [else (loop (cdr l))]))))) (define top? (eq? t top)) (define header `(table ([cellspacing "0"] [cellpadding "0"])