v0.14.1, 2026 August 2 * Distribution fixes (problems identified by the CTAN maintainers, to whom, thanks). v0.14.0, 2026 August 2 * Substantial reworking of the internal representation of parsed data, and its processing, with (intentionally) little visible effect at the level of the interface exposed by the programs in `examples/`. Most processing is now in terms of `ustring?` objects, rather than `string?` ones, supported by functions which are intended to translate back and forth smoothly. * Renamed `braced?` to `bstring?` (and associated functions). Various associated internal restructurings, which mostly removed this from the public interface. This might evolve further. This was quite a substantial internal change, but the main visible change is the `ustring->ustring` function mentioned below. * Markdown: the parser now identifies single-tab indents as indents. * JSON: Reworking the parser, which is now more fully conformant to RFC 8259. * Unicode: various additions to the support, and to the interface in the `unicode` module. - `unicode-decode/utf8` now returns a ustring?, rather than a list. - Added `char-wordbreak?` and `char-nbsp?`. - Added ustrings `#"..."`. - Add `ustring->ustring` for mildly adjusting the formatting of ustrings for output (specifically, controlling whether braces or `~` appear). - Various similar changes. * Completed (ie, made up my mind, and documented) `user-char-command` (allowing commands such as `\LaTeX` to be recognised and expanded in `.bib` files), and `bib-string-table-set!` (with the equivalent effect to `@string` in a `.bib` file or a `MACRO` in a `.bst` file). * Regularised option handling for consistency (specifically, calling as `repl` no longer ignores all other options, and `-e` is handled more systematically). * Replaced the clumsy ‘untexify’ functionality with a `untexify-string-or-list`, which wraps the `ustring->ustring` function from the `'subtex` module. This function can remove braces and tilde-quotes in a principled way. This is intended to make it easier to produce non-TeX output. Correspondingly removed the `BEASTIE_UNTEXIFY_FIELDS` environment variable. * Changed the behaviour of `printf.push$$` and `printf.pop$$`, to include writing to strings. * Now uses s7 v11.9 (6-Jul-2026). * `*beastie*`: added keys `'unicode-version`, `'build-platform` and `'run-platform`. * Refactoring throughout the code, including documentation and tests. * Added [REUSE headers](https://reuse.software), throughout, to mechanically confirm the licensing. v0.13.1, 2025 October 26 * CI/release bug: fix the `upload` stage in the CI configuration. v0.13, 2025 October 26 * When parsing author lists, the string `and` is (now) identified as an author-separator only _case-sensitively_. Surprisingly, BibTeX matches this case-insensitively, which seems rather unfair on people called ‘And’ (I can find no evidence of that as an in-use surname, but if there exist people surnamed ‘Null’, there's bound to be someone surnamed ‘And’). * There is now preliminary support for Unicode-sensitive sorting, and locales, with an optional dependency on the ICU library. This is compiled in if the ICU library is available, or suppressed with `./configure --without-icu`. * The allowed characters for field names now include those in the set `[-_.:]` (a pragmatic rather than a particularly principled extension). * Documentation: the repository now includes the TUGboat paper: Norman Gray, TUGboat 46:2, 228–234 (2025) . * Added the `*beastie*` function, to show metadata. * The REPL now behaves well when printing multiple values. * The program compiles tidily as C99 with clang 17 (macOS), clang 19 (FreeBSD), and GCC 14 & 15 (Debian and RHEL), at least. This isn't a particular change, but it required some effort when the compilation was switched to mandate C99. v0.12, 2025 August 3 * Reworked the author-name parsing, attending to some of the edge-cases mentioned at the end of btxhak (including the `~~` thing, and more systematic handling of the non-default name-part separators). I wouldn't claim that the interpretation of the document is bulletproof here, but the copy-editing of names is an area where it is hard to be dogmatic (well, to be honest, it's an area where it's probably quite _easy_ to be ‘dogmatic’, but hard to get anyone to agree with your personal dogma). Fixes issue #7. * The JSON reader is now more robust, and consequently now documented. * Markdown: `` elements now contain a reference anchor formed from the element content. * Utils: various additions (specifically `circular-list`, `intersperse`, `zip`). v0.11.2, 2025 July 18 * Fix a minor lexer error reading .bib (in `"{foo...}"`, the opening brace was missed). * Add `ustringpage-range`. * Rename `entry-print` to `entry-print!` (since it's called for side-effects), and `entry-local-variable` to `entry-get-local-variable` (for symmetry). * Added the `citation?` object. * Adjustments to example programs, to match changes in this version. * Reworking/expanding `examples/plain.scm`, and new example program `aux-to-refs.scm`. * Renamed `list/true` and friends to `maybe-list`, and moved them to module `bibtex`. Added `sentence` to the same place. * Added more SRFI-1 and SRFI-13 functions. * Added `regexp` function, and friends. * Changed `parse-aux-file` so that the list of citations it returns is returned as a list of symbols, rather than a list of strings. v0.8, 2024 May 11 * Adjusted the options in the Bison grammars so Bison 3.x doesn't give deprecation warnings. Still works with Bison 2.x. * Utils: added `string-index-right`, `split-path`, and `symbol SPDX-License-Identifier: BSD-2-Clause