From 6707a4a3567830467c105b879b9bd7ea9a18f589 Mon Sep 17 00:00:00 2001 From: "William J. Bowman" Date: Fri, 14 Aug 2026 16:29:47 -0700 Subject: [PATCH] Fix bibtex parser to preserve spaces after nested braced strings The parser was incorrectly consuming whitespace following nested braced strings like {ACM}, causing "Advances in {ACM} Technology" to become "Advances in ACMTechnology". Changed read-braced-value to call itself recursively for nested braces instead of read-value, which consumes trailing whitespace. --- scribble-lib/scriblib/bibtex.rkt | 2 +- .../tests/scriblib/test-braced-space.bib | 16 ++++++++++++++ .../tests/scriblib/test-braced-space.rkt | 21 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 scribble-test/tests/scriblib/test-braced-space.bib create mode 100644 scribble-test/tests/scriblib/test-braced-space.rkt diff --git a/scribble-lib/scriblib/bibtex.rkt b/scribble-lib/scriblib/bibtex.rkt index 8456181298..7bedc96f69 100644 --- a/scribble-lib/scriblib/bibtex.rkt +++ b/scribble-lib/scriblib/bibtex.rkt @@ -138,7 +138,7 @@ ip)) (match (peek-char ip) [#\{ - (string-append first-part (read-value ip) (loop))] + (string-append first-part (read-braced-value ip) (loop))] [#\} (read-char ip) first-part]))) diff --git a/scribble-test/tests/scriblib/test-braced-space.bib b/scribble-test/tests/scriblib/test-braced-space.bib new file mode 100644 index 0000000000..208d2f40cf --- /dev/null +++ b/scribble-test/tests/scriblib/test-braced-space.bib @@ -0,0 +1,16 @@ +@article{test-braced1, + title = {Advances in {ACM} Technology}, + journal = {Proceedings of the {IEEE} Conference}, + year = {2020} +} + +@article{test-braced2, + title = {The {ACM} Framework}, + year = {2021} +} + +@inproceedings{test-braced3, + title = {Testing {SIGPLAN} Methods}, + booktitle = {International {ACM} Conference}, + year = {2022} +} diff --git a/scribble-test/tests/scriblib/test-braced-space.rkt b/scribble-test/tests/scriblib/test-braced-space.rkt new file mode 100644 index 0000000000..77a5fb97f9 --- /dev/null +++ b/scribble-test/tests/scriblib/test-braced-space.rkt @@ -0,0 +1,21 @@ +#lang racket +(require scriblib/bibtex + racket/runtime-path + rackunit) + +(define-runtime-path test.bib "test-braced-space.bib") + +(define db (path->bibdb test.bib)) +(define raw (bibdb-raw db)) + +;; Test that spaces after braced strings are preserved +(test-case "braced strings should preserve following spaces" + (define test1 (hash-ref raw "test-braced1")) + (define test2 (hash-ref raw "test-braced2")) + (define test3 (hash-ref raw "test-braced3")) + + (check-equal? (hash-ref test1 "title") "Advances in ACM Technology") + (check-equal? (hash-ref test1 "journal") "Proceedings of the IEEE Conference") + (check-equal? (hash-ref test2 "title") "The ACM Framework") + (check-equal? (hash-ref test3 "title") "Testing SIGPLAN Methods") + (check-equal? (hash-ref test3 "booktitle") "International ACM Conference"))