From 8b576eaca0b0c6bb4110142a656c3aeeed31d29f Mon Sep 17 00:00:00 2001 From: Francois-Rene Rideau Date: Mon, 9 Nov 2026 20:10:54 -0500 Subject: [PATCH 1/3] 1.70: include any explicitly specified date in the HTML output --- scribble-doc/scribblings/scribble/base.scrbl | 11 ++++-- scribble-lib/info.rkt | 2 +- scribble-lib/scribble/html-render.rkt | 33 +++++++++------- scribble-lib/scribble/scribble.css | 9 +++++ scribble-test/tests/scribble/html-render.rkt | 40 +++++++++++++++++++- 5 files changed, 77 insertions(+), 18 deletions(-) diff --git a/scribble-doc/scribblings/scribble/base.scrbl b/scribble-doc/scribblings/scribble/base.scrbl index f40fab7de8..e4879c362b 100644 --- a/scribble-doc/scribblings/scribble/base.scrbl +++ b/scribble-doc/scribblings/scribble/base.scrbl @@ -102,15 +102,20 @@ structure. Use @racket[""] as @racket[vers] to suppress version rendering in the output. The @racket[date] argument is propagated to the @racket[title-decl] -structure via a @racket[document-date] @tech{style property}. Use -@racket[""] as @racket[date] to suppress date rendering in Latex -output. +structure via a @racket[document-date] @tech{style property}. +In HTML output, a nonempty date is shown in the version box. +In LaTeX output, a supplied date is passed to the @tt{\date} command. +If @racket[date] is @racket[#f] (the default), HTML omits the date +and LaTeX uses the document class's default, typically @tt{\today}. +Use @racket[""] as @racket[date] to suppress the date in both formats. The section title is automatically indexed by @racket[decode-part]. For the index key, leading whitespace and a leading ``A'', ``An'', or ``The'' (followed by more whitespace) is removed.} +@history[#:changed "1.70" + @elem{A nonempty @racket[#:date] is now displayed in HTML output.}] @def-section-like[section part-start?]{ Like @racket[title], but generates a @racket[part-start] of depth @racket[0] to be picked up by diff --git a/scribble-lib/info.rkt b/scribble-lib/info.rkt index aff8fe797a..4b5f7dacb4 100644 --- a/scribble-lib/info.rkt +++ b/scribble-lib/info.rkt @@ -21,7 +21,7 @@ (define pkg-authors '(mflatt eli)) -(define version "1.69") +(define version "1.70") (define license '((Apache-2.0 OR MIT) diff --git a/scribble-lib/scribble/html-render.rkt b/scribble-lib/scribble/html-render.rkt index ba7da08059..fea4833a73 100644 --- a/scribble-lib/scribble/html-render.rkt +++ b/scribble-lib/scribble/html-render.rkt @@ -279,6 +279,7 @@ quiet-table-of-contents extract-part-style-files extract-version + extract-date extract-authors extract-pretitle extend-part-context @@ -1132,19 +1133,25 @@ (render-one-part d ri fn null)) (define/public (render-version d ri) - (let ([v (current-version)]) - (if (equal? v "") - ;; don't show empty version: - null - ;; show version: - `((div ([class "versionbox"]) - ,@(render-content - (list (make-element (if (include-navigation?) - "version" - "versionNoNav") - v)) - d - ri)))))) + (define v (current-version)) + (define date (extract-date d)) + (define show-version? (not (equal? v ""))) + (define show-date? (and date (not (equal? date "")))) + (if (or show-version? show-date?) + `((div ([class "versionbox"]) + ,@(if show-version? + (render-content + (list (make-element (if (include-navigation?) + "version" + "versionNoNav") + v)) + d + ri) + null) + ,@(if show-date? + `((span ([class "document-date"]) ,date)) + null))) + null)) (define/private (render-language-family d ri) (define show-fam? (extract-show-language-family d ri)) diff --git a/scribble-lib/scribble/scribble.css b/scribble-lib/scribble/scribble.css index 28ae1d5faa..6a718c4c16 100644 --- a/scribble-lib/scribble/scribble.css +++ b/scribble-lib/scribble/scribble.css @@ -209,6 +209,15 @@ table td { .version:before, .versionNoNav:before { content: "Version "; } +.versionbox .document-date { + display: block; + font-family: sans-serif; + font-size: small; +} +.versionNoNav + .document-date { + font-size: xx-small; +} + /* ---------------------------------------- */ /* Language Family */ diff --git a/scribble-test/tests/scribble/html-render.rkt b/scribble-test/tests/scribble/html-render.rkt index 40b476c38f..4298705221 100644 --- a/scribble-test/tests/scribble/html-render.rkt +++ b/scribble-test/tests/scribble/html-render.rkt @@ -1,12 +1,15 @@ #lang racket/base (require racket/class + racket/file rackunit scribble/base scribble/base-render scribble/core + (only-in scribble/decode decode) scribble/html-properties - (prefix-in html: scribble/html-render)) + (prefix-in html: scribble/html-render) + (only-in scribble/render render)) (define renderer (new (html:render-mixin render%) @@ -61,3 +64,38 @@ (check-equal? (render-content (elem #:style "emph" "custom style")) '((span ((class "emph")) "custom style")))) + +(define (render-title version date) + (define dest (make-temporary-directory)) + (dynamic-wind + void + (lambda () + (define doc + (decode (list (title #:version version #:date date "Example")))) + (render (list doc) (list "example") + #:render-mixin html:render-mixin + #:dest-dir dest) + (file->string (build-path dest "example.html"))) + (lambda () (delete-directory/files dest)))) + +(test-case "document date in the HTML version box" + (define date "2026-11-09") + (define date-element + #rx"2026-11-09") + (define version-class #rx"class=\"versionNoNav\"") + (define date-only (render-title "" date)) + + (check-true + (regexp-match? + #px"class=\"versionNoNav\">1\\.2\\.3\\s*2026-11-09" + (render-title "1.2.3" date))) + (check-true (regexp-match? date-element date-only)) + (check-false (regexp-match? version-class date-only)) + + (for ([absent-date (in-list (list #f ""))]) + (define version-only (render-title "1.2.3" absent-date)) + (check-true (regexp-match? version-class version-only)) + (check-false (regexp-match? #rx"class=\"document-date\"" version-only))) + + (check-false + (regexp-match? #rx"class=\"versionbox\"" (render-title "" "")))) From 5e7998d0d6384cf25f7eed086c41ee65c4727310 Mon Sep 17 00:00:00 2001 From: Francois-Rene Rideau Date: Mon, 9 Nov 2026 23:43:52 -0500 Subject: [PATCH 2/3] document-date: better fallback wrt out-of-sync CSS --- scribble-lib/scribble/html-render.rkt | 3 ++- scribble-test/tests/scribble/html-render.rkt | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/scribble-lib/scribble/html-render.rkt b/scribble-lib/scribble/html-render.rkt index fea4833a73..ca7bddde04 100644 --- a/scribble-lib/scribble/html-render.rkt +++ b/scribble-lib/scribble/html-render.rkt @@ -1148,8 +1148,9 @@ d ri) null) + ,@(if (and show-version? show-date?) '(" ") null) ,@(if show-date? - `((span ([class "document-date"]) ,date)) + `((div ([class "document-date"]) ,date)) null))) null)) diff --git a/scribble-test/tests/scribble/html-render.rkt b/scribble-test/tests/scribble/html-render.rkt index 4298705221..0cad3ab6d5 100644 --- a/scribble-test/tests/scribble/html-render.rkt +++ b/scribble-test/tests/scribble/html-render.rkt @@ -81,13 +81,13 @@ (test-case "document date in the HTML version box" (define date "2026-11-09") (define date-element - #rx"2026-11-09") + #rx"
2026-11-09
") (define version-class #rx"class=\"versionNoNav\"") (define date-only (render-title "" date)) (check-true (regexp-match? - #px"class=\"versionNoNav\">1\\.2\\.3\\s*2026-11-09" + #px"class=\"versionNoNav\">1\\.2\\.3\\s*
2026-11-09
" (render-title "1.2.3" date))) (check-true (regexp-match? date-element date-only)) (check-false (regexp-match? version-class date-only)) From 65736cf4274f5f81185f94f25e54712e4610091c Mon Sep 17 00:00:00 2001 From: Francois-Rene Rideau Date: Tue, 10 Nov 2026 00:41:41 -0500 Subject: [PATCH 3/3] Fix link borders enclosing bibliography indentation Use a list margin instead of \leftskip in Autobibentry so links that wrap across lines exclude the hanging indentation. Preserve paragraph indentation, entry spacing and page breaking. --- scribble-lib/scriblib/autobib.tex | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/scribble-lib/scriblib/autobib.tex b/scribble-lib/scriblib/autobib.tex index b3342922b3..7a3ff0eb1e 100644 --- a/scribble-lib/scriblib/autobib.tex +++ b/scribble-lib/scriblib/autobib.tex @@ -32,17 +32,23 @@ \ifnum\AutobibNeedlines>0 \Needspace{\AutobibNeedlines\baselineskip}% \fi - \begingroup - \AutobibEntrySetup - \leftskip=\ABindent - \parindent=\AutobibParindent - \parskip=0pt - \noindent - \hspace*{-\ABindent}% - \ignorespaces + \begin{list}{}{% + \setlength{\leftmargin}{\ABindent}% + \setlength{\rightmargin}{0pt}% + \setlength{\itemindent}{-\ABindent}% + \setlength{\listparindent}{\AutobibParindent}% + \setlength{\labelwidth}{0pt}% + \setlength{\labelsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + }% + \AutobibEntrySetup + \item\relax + \ignorespaces }{% - \par - \endgroup + \end{list}% \addvspace{1ex}% }