Version 1.25.0 released 2026-11-07
==================================

2026-11-02  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/env.cpp (environment::dump): Aid the user to
	distinguish the concepts of alignment and adjustment.

2026-11-02  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/env.cpp (environment::dump): Align wording of
	reported space sizes with the terminology in our documentation.

2026-11-01  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/div.cpp (need_vertical_space_request)
	(save_vertical_space_request): Throw warning in category "range"
	and ignore request if a negative argument is specified.

	Fixes <https://savannah.gnu.org/bugs/?68871>.

2026-10-31  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/node.cpp (translate_font_request): Distinguish
	and improve error diagnostics thrown when user attempts to
	employ a font mounting position as either request argument.

2026-10-31  G. Branden Robinson <g.branden.robinson@gmail.com>

	* tmac/an-ext.tmac (SY): Configure hyphenation mode via `mY`
	macro call even if invalidly given no arguments.  This prevents
	later emission of a potentially confusing warning in category
	"reg".

2026-10-28  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/utils/pdfmom/pdfmom.pl (autopsy): If the wait status of
	the groff command we tried to run is -1, report the name of the
	groff command we actually tried to run, not "groff" literally.

2026-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68837.

	* src/roff/troff/input.cpp (read_font_identifier): Replace
	assert(3)ion that could be tripped by invalid characters in
	font identifier (or mounting position) with skip of input
	line and early return.  Add assert(3)ion that the `symbol`
	returned by `read_identifier()` is not `empty()`, since that
	appears to be impossible at present.  Add fallback conditional
	test for `NDEBUG` builds to return `false` if that is the case.
	Since we now return early if the symbol is not invalid and not
	empty, drop subsequent tests of these conditions.

	Fixes <https://savannah.gnu.org/bugs/?68837>.  Problem
	introduced by me in commit 3dc11a61aa, 18 April.

2026-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68837.

	* src/roff/groff/tests/\
	error-fzoom-request-given-bogus-argument.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/node.cpp (translate_font_request): Replace
	assert(3)ion that could be tripped by invalid characters in
	font identifier with skip of input line.  Also revise logic to
	use more early returns, simplifying conditional tests.

	Fixes <https://savannah.gnu.org/bugs/?68836>.  Problem
	introduced by me in commit ddfc1b7045, 2023-08-27.

2026-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68836.

	* src/roff/groff/tests/\
	error-ftr-request-given-bogus-arguments.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-24  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/input.cpp (do_zero_width_output, do_register):
	Revise self-descriptions of the `\Z` and `\R` escape sequences
	for clarity.

2026-10-24  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/input.cpp (do_overstrike, do_bracket)
	(do_name_test, do_zero_width_output, read_size, do_register)
	(do_width, read_title_parts, do_device_extension)
	(read_drawing_command): Rephrase warnings in category "delim" to
	consistently identify the delimited context.

2026-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/input.cpp (do_overstrike, do_bracket)
	(do_name_test, do_expr_test, do_zero_width_output, do_width)
	(do_device_extension, read_drawing_command): Prevent emission of
	confusing warning diagnostic when a newline is used
	{deprecatedly} as a delimiter.

2026-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/input.cpp (is_char_usable_as_delimiter): Revise
	and restructure.  Revise: return `true` for Control+A (default
	leader character) through Control+I (default tab character) plus
	Control+L (form feed) and DEL.  Restructure: because this
	function is "hot"--it gets hit over 4.6 million times in a groff
	build--arrange the most expected case of delimiter (a valid
	printable character) on the "straight-line" path, assuming a
	forward branch is not taken.

2026-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68832.

	* src/roff/troff/input.cpp (do_overstrike, do_bracket)
	(do_name_test, do_zero_width_output, do_register)
	(read_title_parts, do_device_extension, read_drawing_command):
	Fix misleading warnings in category "delim"; when reporting use
	of a deprecated delimiter, identify the correct token as
	deprecated.  This change also avoids assert(3)ion failures when
	`NDEBUG` is not defined and the input parser is in a certain
	state.

	Fixes <https://savannah.gnu.org/bugs/?68832>.  Problems
	introduced by me in commits d7824cb7ba, 12032e1211, a38054a1d1,
	201833b36d, 5d570e2210, ffcf52f605, and b459b2c6b0 (all
	2025-11-23), and commit 4b09e1688c, 2025-12-29.

2026-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68832.

	* src/roff/groff/tests/\
	error-badly-delimited-escape-sequences.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-23  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/preproc/tbl/table.cpp (table::add_entry): Fix duplicative
	and misleading warning about *roff comment escape sequences in
	table entries arising due to logic error.  Resequence update of
	`commentpos` local to follow warning about use of `\#` in table
	entry, and revise a conditional to use `gcommentpos`.

	Fixes <https://savannah.gnu.org/bugs/?68825>.  Problem
	introduced by me in commit 207723e5bf, 2024-10-06.

2026-10-22  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68819.

	* src/roff/troff/input.cpp (chop_request): Replace assert(3)ion
	that could be tripped by invalid characters in macro/string/
	request/diversion identifier with skip of input line.

	Fixes <https://savannah.gnu.org/bugs/?68819>.  Problem
	introduced by me in commit 12cb5ec593, 2024-09-20.

2026-10-22  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68819.

	* src/roff/groff/tests/\
	error-chop-request-given-bogus-argument.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-22  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68817.

	* src/roff/troff/input.cpp (alias_macro): Replace assert(3)ion
	that could be tripped by invalid characters in macro/string/
	request/diversion identifier with skip of input line.

	Fixes <https://savannah.gnu.org/bugs/?68817>.  Problem
	introduced by me in commit 12cb5ec593, 2024-09-20.

2026-10-22  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68817.

	* src/roff/groff/tests/\
	error-als-request-given-bogus-arguments.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-21  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/groff/tests/pi-request-works.sh: Add test of multiple
	pipeline command construction.  Dump new `.pi` register while
	we're at it.

2026-10-21  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Implement `.pi` register for orthogonality and to make
	the output filtration pipeline readily inspectable.

	* src/roff/troff/input.cpp (pipe_command_reg): New file-local
	class handles dynamically computed data.  (The class
	`readonly_text_reg` is not appropriate because it has _static_
	contents that are computed once only, at formatter startup.  The
	global `pipe_command` is populated, and can be updated, by the
	input stream--until output commences.)
	(pipe_command_reg::get_string): Member function returns
	`pipe_command` (a C string).

	* doc/groff.texi.in (Host System Service Access):
	* man/groff.7.man.in (Read-only registers):
	* man/groff_diff.7.man (New register): Document it.

	Fixes <https://savannah.gnu.org/bugs/?68816>.

2026-10-21  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/input.cpp (init_input_requests): Trivially
	refactor.  Sort definitions of read-only registers in en_US
	lexicographic order.

2026-10-21  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68815.

	* src/roff/troff/input.cpp (pipe_output): Drop array-deletion of
	`pc` on unconditional path through command (after validation
	checks).  We _don't_ want to delete `pc` if we have copied its
	value to the global `pipe_command`, as we then risk a use-after-
	free (detected by GCC 12's ASAN).

	Fixes <https://savannah.gnu.org/bugs/?68815>.  Problem
	introduced by me in commit 8a62f58d92, 2025-02-23.

2026-10-21  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/groff/tests/pi-request-works.sh: Improve test.  Fail
	if groff exits with a nonzero status, which happens if an
	ASAN-enabled build detects memory untidiness.  This enables us
	to detect problems like Savannah #68815.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Revise `rn` input validation.

	* src/roff/troff/input.cpp (rename_macro): Use `has_arg()` to
	check for arguments after the first, more reliably issuing
	warning in category "missing".  Since per the previous change to
	this function, we have returned early if the `s1` symbol
	`is_null()`, we no longer need a `!s1.is_null()` condition
	here--that is tautologically true.  Drop the conditional,
	putting collection of second argument on main execution trace.
	Check the second identifier for bogosity just as we checked the
	first.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68797.

	* src/roff/troff/input.cpp (rename_macro): Replace assert(3)ion
	that could be tripped by invalid characters in macro/string/
	request/diversion identifier with skip of input line.

	Fixes <https://savannah.gnu.org/bugs/?68797>.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68797.

	* src/roff/groff/tests/\
	error-rn-request-given-bogus-arguments.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: `pcolor` req advances past invalid args.

	* src/roff/troff/input.cpp (print_color_request): If a request
	argument is an invalid identifier, skip over it instead of
	giving up on the control line.  This change improves symmetry
	with `pm` and `pnr`.  (We don't report the names of invalid
	identifiers because we have defined no convention for encoding
	unprintable characters in this context.)

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Clarify "color" warning diagnostics.

	* src/roff/troff/input.cpp (read_rgb, read_cmy, read_cmyk)
	(read_gray): Do it.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68796.

	* src/roff/troff/input.cpp (define_color): Improve `defcolor`
	request argument validation.  Replace assert(3)ion that could be
	tripped by invalid characters in color identifier with skip of
	input line.  Throw warnings in category "missing" if second or
	third arguments are absent.

	Fixes <https://savannah.gnu.org/bugs/?68796>.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68796.

	* src/roff/groff/tests/\
	error-defcolor-request-given-bogus-arguments.sh: New file; do
	it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Test `pcolor` error path.

	* src/roff/groff/tests/\
	error-pcolor-request-given-bogus-argument.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run tests.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68794.

	* src/roff/troff/env.cpp (environment_copy): Instead of throwing
	assert(3)ion when given invalid environment identifier, perform
	no operation.

	Fixes <https://savannah.gnu.org/bugs/?68794>.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68794.

	* src/roff/groff/tests/\
	error-evc-request-given-bogus-argument.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	src/roff/troff/input.cpp: Improve `\D` error diagnostics.

	* src/roff/troff/input.cpp (read_drawing_command)
	(read_drawing_command_color_arguments): When diagnosing invalid
	drawing command parameters, make the interpretation context
	clear.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: `pm` request advances past invalid args.

	* src/roff/troff/input.cpp (print_macro_request): If a request
	argument is an invalid identifier, skip over it instead of
	giving up on the control line.  Apart from maintaining a
	consistent symmetry with `rm` request behavior, if there's a
	troublesome `rm` control line (perhaps involving constructed
	register identifiers), this way you can duplicate the `rm` line,
	change `rm` to `pm`, and isolate the troublesome argument(s) by
	its/their absence in the list.  (We don't report the names of
	invalid identifiers because we have defined no convention for
	encoding unprintable characters in this context.)

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: `pnr` request advances past invalid args.

	* src/roff/troff/reg.cpp (print_register_request): If a request
	argument is an invalid identifier, skip over it instead of
	giving up on the control line.  Apart from maintaining a
	consistent symmetry with `rr` request behavior, if there's a
	troublesome `rr` control line (perhaps involving constructed
	register identifiers), this way you can duplicate the `rr` line,
	change `rr` to `pnr`, and isolate the troublesome argument(s) by
	its/their absence in the list.  (We don't report the names of
	invalid identifiers because we have defined no convention for
	encoding unprintable characters in this context.)

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68791.

	* src/roff/troff/input.cpp (remove_macro): Skip invalid
	arguments.

	Fixes <https://savannah.gnu.org/bugs/?68791>.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68791.

	* src/roff/groff/tests/error-rm-request-given-bogus-argument.sh:
	New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Adjust `rm` request handler.

	* src/roff/troff/input.cpp (remove_macro): Add early loop
	termination condition; `break` when `has_arg()` returns false.
	This changes no observable behavior right now, but prepares for
	a bug fix.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Unit-test `rm` request.

	* src/roff/groff/tests/rm-request-works.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68790.

	* src/roff/troff/reg.cpp (remove_register_request): Skip invalid
	arguments.

	Fixes <https://savannah.gnu.org/bugs/?68790>.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68790.

	* src/roff/groff/tests/error-rr-request-given-bogus-argument.sh:
	New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Add `skip_rest_of_argument()`.

	* src/roff/troff/input.cpp (skip_rest_of_argument): New function
	pumps input stream until a newline, space, or EOF token is
	reached.
	* src/roff/troff/token.h: Declare for external visibility.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Unit-test `rr` request.

	* src/roff/groff/tests/rr-request-works.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-18  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Improve error diagnostics.

	* src/roff/troff/input.cpp (diagnose_invalid_identifier)
	(read_input_until_terminator): When squawking about an invalid
	input token in an identifier, articulate the consequence: the
	identifier is ignored, as if it were not present.  That is
	uniformly how the formatter's request and escape sequence
	handlers deal with them.  While `read_input_until_terminator()`
	is a more general function used to collect language tokens other
	than identifiers (like names of color spaces), the diagnostic
	message changed here is only reachable if the function parameter
	`want_identifier` is `true`.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/input.cpp (read_line_rule_expression): Throw
	error diagnostic if input attempts to draw a rule with `\l` or
	`\L` with an argument that isn't a character.

	Fixes <https://savannah.gnu.org/bugs/?68788>.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68788.

	* src/roff/groff/tests/\
	error-glyph-rule-escape-given-non-character.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Add `NDEBUG` fallback to `lookup_request()`.

	* src/roff/troff/input.cpp (lookup_request) [NDEBUG]: Return
	null pointer `request_or_macro` if the `nm` `symbol` passed in
	`is_null()`.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix code style nits.

	* src/roff/troff/input.cpp (read_color_channel_value): Return
	correctly typed zero literals.  Parenthesize formally complex
	expressions.  Put space around dyadic operators.  Favor C++
	`static_cast<>` operator over omnipotent C-style cast.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Improve `lf` request input validation.

	* src/roff/troff/input.cpp (line_file): Throw warning in
	category "missing" if request is given no arguments.  Throw
	warning in category "syntax" if an empty interpolation is given
	as the second (file name) argument.

	* doc/groff.texi.in (Warnings):
	* src/roff/troff/troff.1.man (Warnings): Document it.

	Fixes <https://savannah.gnu.org/bugs/?68787>.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Improve diagnostic messages.

	* src/roff/troff/input.cpp (pipe_source_request, pipe_output)
	(system_request): Use more consistent wording when diagnosing
	input validity problems.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68786.

	* src/roff/troff/input.cpp (pipe_source_request, pipe_output)
	(system_request): Withdraw assert(3)ion in favor of
	real input validation, already present.
	(pipe_source_request): Pump the token stream if the argument
	interpolated nothing or was otherwise invalid, to get past the
	pending newline.
	(close_request): Replace assert(3)ion with real input
	validation.

	Fixes <https://savannah.gnu.org/bugs/?68786>.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68786.

	* src/roff/groff/tests/
	error-close-request-given-empty-argument.sh:
	* src/roff/groff/tests/error-pi-request-given-empty-argument.sh:
	* src/roff/groff/tests/
	error-pso-request-given-empty-argument.sh:
	* src/roff/groff/tests/error-sy-request-given-empty-argument.sh:
	New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run tests.

2026-10-16  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68784.

	* src/roff/troff/input.cpp (do_macro_source): Throw warning in
	category "missing" if either the `mso` or `msoquiet` request is
	not given an argument.  Deduce identity of calling request
	handler from value of `quietly` argument, which while at present
	perfectly logically coupled to that identity, leaves me uneasy.
	{But in the long term I hope to turn `msoquiet` into a macro
	anyway, which should be easy after Savannah #68242 is fixed.}

	Fixes <https://savannah.gnu.org/bugs/?68784>.

2026-10-16  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68784.

	* src/roff/groff/tests/\
	error-mso-request-given-empty-argument.sh: New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-16  G. Branden Robinson <g.branden.robinson@gmail.com>

	[libgroff]: Add `NDEBUG` assert(3)ion fallback.

	* src/libs/libgroff/searchpath.cpp (search_path::open_file)
	[NDEBUG]: Return null pointer if one is passed in as the `name`
	argument.

2026-10-16  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Unit-test `mso` request.

	* src/roff/groff/tests/mso-request-works.sh: New file; do it.
	* src/roff/groff/tests/artifacts/macro-file: New file.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-17  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Add error handling to `file_iterator` constructor.

	* src/roff/troff/input.cpp (file_iterator::file_iterator):
	Handle invalid constructor arguments.  Make assert(3)ion that
	the pointers `f` (a `FILE`) or `fn` (a C string) are not null.
	In `NDEBUG` builds, return early if either one is.

2026-10-16  G. Branden Robinson <g.branden.robinson@gmail.com>

	[troff]: Fix Savannah #68783.

	* src/roff/troff/input.cpp (do_source): Throw warning in
	category "missing" if either the `so` or `soquiet` request is
	not given an argument.  Deduce identity of calling request
	handler from value of `quietly` argument, which while at present
	perfectly logically coupled to that identity, leaves me uneasy.
	{But in the long term I hope to turn `soquiet` into a macro
	anyway, which should be easy after Savannah #68242 is fixed.}

	Fixes <https://savannah.gnu.org/bugs/?68783>.

2026-10-16  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Regression-test Savannah #68783.

	* src/roff/groff/tests/error-so-request-given-empty-argument.sh:
	New file; do it.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.

2026-10-16  G. Branden Robinson <g.branden.robinson@gmail.com>

	[groff]: Unit-test `so` request.

	* src/roff/groff/tests/so-request-works.sh: New file; do it.
	* src/roff/groff/tests/artifacts/sourced-file: New file.
	* src/roff/groff/groff.am: Update `groff_TESTS` to run test.
	Update `EXTRA_DIST` to ship new artifact file.

2026-10-14  G. Branden Robinson <g.branden.robinson@gmail.com>

	* m4/groff.m4 (GROFF_G): Fix logic botch; we were treating the
	total absence of an installed `troff` from the build
	environment as equivalent to a groff-incompatible one being
	present.  That was incorrect.  Do not apply a command prefix
	when no troff is present.

	Fixes <https://savannah.gnu.org/bugs/?68775>.  Thanks to Alexis
	Hildebrandt for the report.  Problem introduced by me in commit
	142b8d93fc, 8 October.

2026-10-13  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/utils/afmtodit/afmtodit.tables: Regenerate using Unicode
	18.0.0's "UnicodeData.txt".  No material changes.

2026-10-13  Deri James  <deri@chuzzlewit.myzen.co.uk>

	[gropdf]: Correctly handle multi-line hexstring.

	* src/devices/gropdf/gropdf.pl (ParsePDFHexString): Concatenate
	hex strings on multiple lines.

	Fixes <https://savannah.gnu.org/bugs/?68771>.

2026-10-12  Deri James  <deri@chuzzlewit.myzen.co.uk>

	[pdfmom]: Fix typo.

	* src/utils/pdfmom/pdfmom.pl: Remove hyphen after colon.

	See <https://savannah.gnu.org/bugs/?68765>

2026-10-12  Deri James  <deri@chuzzlewit.myzen.co.uk>

	[pdfmom]: Fix Savannah #68765.

	* src/utils/pdfmom/pdfmom.pl: Remove newline from end of pdfroff
	command output.

	Fixes <https://savannah.gnu.org/bugs/?68765>.  Thanks to Jakub
	Kulik for the report.

2026-08-06  Bruno Haible <bruno@clisp.org>

	* doc/doc.am ($(DOC_LINE_LAYOUT_EPS)): Remove the %%CreationDate
	line from the generated PostScript.

2026-10-11  G. Branden Robinson <g.branden.robinson@gmail.com>

	* tmac/an.tmac (an*check-legacy-argument-count): New macro
	checks a passed-in macro argument count for a value too large to
	work with AT&T troff man.
	(SH, SS, B, I, SM, SB, BI, BR, IB, IR, RB, RI): Call it.

	* tmac/groff_man.7.man.in (Options <CHECKSTYLE>):
	* NEWS: Document it.

2026-10-11  G. Branden Robinson <g.branden.robinson@gmail.com>

	* man/man.am (man/groff.7.man): Pass soelim(1) its new `-x`
	option, so that the build halts on a befouled document.

2026-10-09  G. Branden Robinson <g.branden.robinson@gmail.com>

	[soelim]: Implement undocumented new `-x` option.

	* src/preproc/soelim/soelim.cpp: Add new global of type `bool`,
	`want_exit_on_inclusion_failure`, defaulting false.
	(main): Instruct getopt_long(3) to accept `x` as an
	unparameterized option.  If specified, make the new `bool`
	`true`.

	* src/preproc/soelim/tests/x-option-works.sh: New unit test
	exercises functionality.
	* src/preproc/soelim/soelim.am (soelim_TESTS): Run test.

	See <https://savannah.gnu.org/bugs/?68761>.

2026-10-08  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/preproc/eqn/neqn.sh: Use the documented run-time
	environment variable `GROFF_COMMAND_PREFIX` to name the
	corresponding GNU eqn executable, not the build-time `g` prefix.
	Resolves failure of "neqn-finds-matching-eqn.sh" on Solaris 11.
	{The host to which I have access has groff 1.23.0's troff as its
	"/usr/bin/troff"; presumably it's running SRU66.  So I simulated
	the situation by installing an "echo 0" shell script as "troff"
	in "$HOME/bin", adding that directory to the $PATH, and running
	a build.}

	Fixes <https://savannah.gnu.org/bugs/?68764>.  Thanks to Bruno
	Haible for the report.

2026-10-08  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/libs/libdriver/printer.cpp (printer::load_font)
	(printer::find_font): Use ISO C++98 exceptions to handle heap
	storage allocation failure, catching `std::bad_alloc`.

	Continues the long process of fixing Savannah #68192.

2026-10-08  G. Branden Robinson <g.branden.robinson@gmail.com>

	* m4/groff.m4 (GROFF_G): Revise test to rebalance its
	sensitivity vs. validity.  The test _was_ deciding that a build
	system's installed `troff` was not GNU troff if, when given some
	*roff syntax as input, it wrote `0` to its standard output.
	This means that a `troff` that produced no output or
	interpolated `2` as the value of the `.g` register would pass
	the test and make our configuration process decide that a
	non-groff troff was _not_ installed.  Flip the sense of the test
	and check the `troff` command's output for an exact match of
	`1`--that means the `troff` claims GNU troff compatibility.

2026-10-08  G. Branden Robinson <g.branden.robinson@gmail.com>

	* tmac/tmac.am ($(M4CHECK)): Revise recipe to work with what
	seems to be an older, more primitive Make.  This seems to be the
	only hack required to build groff with the Solaris 11
	/usr/bin/make.  Therefore I feel okay supporting it on a
	probationary basis of minimal tolerance for shenanigans.

2026-10-08  G. Branden Robinson <g.branden.robinson@gmail.com>

	* man/man.am (man/groff.7.man): Try _again_ to fix
	man/groff.7.man generation.  Update soelim(1)'s `-I` argument to
	search in `$(abs_top_srcdir)` for `$(DOC_LINE_LAYOUT_ROFF)`.  I
	missed the impotence of my previous "fix" because soelim(1)
	thinks it's just fine if the files marked for inclusion don't
	exist.

	Continues fixing Savannah #68716.

2026-10-08  G. Branden Robinson <g.branden.robinson@gmail.com>

	Defuse land mine planted by our support code coverage report
	generation, and set off by pre-POSIX Issue 8 (2024) make(1)s.

	* Makefile.am: Comment out `?=` conditional macro definitions.
	* configure.ac: Use POSIX shell conditional parameter expansion
	and `AC_SUBST()` instead.

2026-10-05  G. Branden Robinson <g.branden.robinson@gmail.com>

	* man/man.am (man/groff.7.man): Fix man/groff.7.man generation.
	Add `$(DOC_LINE_LAYOUT_ROFF)` as prerequisite.  Run soelim(1)
	with a `-I` so that even in a "distcheck" build (or an
	exotically out-of-tree ordinary one), that file can be found.

	Continues fixing Savannah #68716.

2026-10-05  G. Branden Robinson <g.branden.robinson@gmail.com>

	* doc/doc.am: Tidy up.  Define `DOC_LINE_LAYOUT_ROFF` macro
	before appendment to `EXTRA_DIST` macro so that we can
	interpolate it there.

2026-10-05  Álvar Ibeas <a.ibeas@gmx.com>

	* man/groff_char(7)
	(Eight-bit encodings and Latin-1 supplement): Fix typo in
	description of special character `'i`.

	Fixes <https://savannah.gnu.org/bugs/?68741>.  [Problem
	introduced by me in commit 3e583c9541, 2020-09-01.  --GBR]

2026-10-03  G. Branden Robinson <g.branden.robinson@gmail.com>

	[grn]: Fix Savannah #68686.

	* src/preproc/grn/hgraph.cpp: Preprocessor-include "errarg.h"
	and "error.h" headers so that libgroff's `fatal()` function is
	visible.
	(drawwig): Add check of static value `MAXPOINTS` limiting the
	quantity of a curve's control points.  Exceeding the limit is a
	fatal error.
	* src/preproc/grn/grn.1.man (Exit status): Document that command
	may exit with status 3--that's what `fatal()` does.

	Fixes <https://savannah.gnu.org/bugs/?68686>.  Thanks to Pavol
	Sloboda for the report and a reproducer.  Problem appears to
	date back "forever"; groff imported a C++-ported version of grn
	in commit a75cf74b60, 2000-02-20.  While the original C code
	from "Berkeley ditroff" is hard to track down, it appears likely
	that the defect was present there, too.  Taking the SCCS what(1)
	information in the "last non-groff version" comment at face
	value would push the date of the defect back to 1984-11-27, and
	it might be older still.

2026-10-03  G. Branden Robinson <g.branden.robinson@gmail.com>

	[grn]: Regression-test Savannah #68686.

	* src/preproc/grn/tests/\
	avoids-stack-overflow-on-curve-commands.sh: Do it.
	* src/preproc/grn/grn.am (grn_TESTS): Run test.

2026-10-01  G. Branden Robinson <g.branden.robinson@gmail.com>

	* HACKING: Rename "Automake" section to "Managing Makefiles",
	and greatly expand.

2026-10-01  G. Branden Robinson <g.branden.robinson@gmail.com>

	* doc/doc.am (doc/pic.html, doc/webpage.html): Tweak recipes to
	work with BSD Make by using a subshell to run the part of it
	that requires a change of directory (which is in turn due to a
	limitation in grohtml(1)'s `img` element population).

2026-10-01  G. Branden Robinson <g.branden.robinson@gmail.com>

	Revise build of man pages to avoid POSIX-unportable make(1)
	trick, which worked with GNU but not BSD Make.

	* Makefile.am (.man): Stop running all man pages through the
	built soelim(1).
	* doc/doc.am: Drop prerequisite-only rule of
	`GROFF_MAN_PAGES_ALL` expansion on the built soelim.
	* man/groff.7.man: Rename this file...
	* man/groff.7.man.in: ...to this.
	* man/man.am: Define new macro `man_srcdir`.  Migrate
	`EXTRA_DIST` to ship maintained form of groff(7) under its new
	name.  Add the constructed version to `MOSTLYCLEANFILES`.
	(man/groff.7.man): New target rule uses the built soelim(1) to
	construct this file from its "*.in" counterpart.

	Fixes <https://savannah.gnu.org/bugs/?68716>.  Thanks to Ingo
	Schwarze for the report and explanation.

2026-10-01  G. Branden Robinson <g.branden.robinson@gmail.com>

	* Makefile.am: Trivially resequence macro definitions.

2026-10-01  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/utils/hpftodit/hpftodit.cpp (output_font_name): Use ISO
	C++98 exceptions to handle heap storage allocation failure,
	catching `std::bad_alloc`.

	Continues the long process of fixing Savannah #68192.

2026-09-30  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/utils/hpftodit/hpftodit.cpp (output_font_name): Heavily
	revise to more carefully validate TFM input file and manage
	memory.  Fatally error out upon reading a font name length
	claimed by the file that is absurd, avoiding unpredictable,
	input-driven heap memory allocation.  Zero out the
	heap-allocated buffer immediately.  Fatally error out upon
	reading a font name that starts with whitespace character.
	Rewrite trailing whitespace-stripping loop to avoid overwriting
	and backwards-overreading the buffer.

	Fixes <https://savannah.gnu.org/bugs/?68684>.  Thanks to Pavol
	Sloboda for the report and a reproducer.  Problem appears to
	date back to commit 65a386ebce, 2003-12-27.

2026-09-30  G. Branden Robinson <g.branden.robinson@gmail.com>

	[hpftodit]: Regression-test Savannah #68684.

	* src/utils/hpftodit/tests/handles-font-names-carefully.sh: Do
	it.
	* src/utils/hpftodit/hpftodit.am (hpftodit_TESTS): Run test.

2026-09-29  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/utils/hpftodit/hpftodit.cpp (hp_msl_to_ucode_name)
	(unicode_to_ucode_name): Use ISO C++98 exceptions to handle heap
	storage allocation failure, catching `std::bad_alloc`.
	Preprocessor-include C++ "<new>" header file.

	Continues the long process of fixing Savannah #68192.

2026-09-29  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/utils/hpftodit/hpftodit.cpp (hp_msl_to_ucode_name)
	(unicode_to_ucode_name): Prevent heap buffer overwrite by
	adequately sizing buffer for the `u` character we prefix to a
	Unicode code point identifier if the character is not unnamed.

	Fixes <https://savannah.gnu.org/bugs/?68680>.  Thanks to Pavol
	Sloboda for the report and a reproducer.  Problem appears to
	date back to commit 65a386ebce, 2003-12-27.

2026-09-29  G. Branden Robinson <g.branden.robinson@gmail.com>

	[hpftodit]: Regression-test Savannah #68680.

	* src/utils/hpftodit/tests/avoids-heap-buffer-overflow.sh: Do
	it.
	* src/utils/hpftodit/hpftodit.am (hpftodit_TESTS): Run test.
	(TESTS, EXTRA_DIST): Wire `hpftodit_TESTS` into Automake test
	harness and ship this and any future hpftodit test scripts.

2026-09-24  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/roff/troff/input.cpp (charinfo::dump): Clarify `pchar`
	output.

2026-09-23  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/preproc/html/pre-html.cpp (imageList::createImage): Recast
	diagnostic message to identify its severity.

2026-09-23  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/preproc/html/pre-html.cpp (imageList::createImage): Add
	assert(3)ions and explicit null pointer checks (for `NDEBUG`
	builds) before dereferencing `i` pointer-to-structure and its
	`imageName` pointer-to-`char` member.

2026-09-24  G. Branden Robinson <g.branden.robinson@gmail.com>

	[mdoc]: Import groff man(7)'s "you forgot to run tbl"
	diagnostic.

	* tmac/doc.tmac (TE): New macro throws warning diagnostic if
	`TW` register is not defined, and marks warning as thrown.
	* tmac/mdoc/doc-common (Dd): At document initialization, delete
	`TW` register and reset "warning thrown" state.

2026-09-27  G. Branden Robinson <g.branden.robinson@gmail.com>

	Unsplit groff's Info manual.

	* doc/doc.am ($(GROFF_INFO)): Run `$(MAKEINFO)` with
	`--no-split` option.  Also name the output file explicitly based
	on expansion of the `doc_builddir` macro since that appears to
	be necessary to support in-tree builds from a Git working copy.
	(dist-hook, dist-info-bits): Drop prerequisite declaration and
	target; we no longer need to override what Automake does for us
	to ship our Info manual.
	(mostlyclean_doc): Stop manually deleting "doc/groff.info-*"
	files; they are no longer created.

2026-09-27  G. Branden Robinson <g.branden.robinson@gmail.com>

	* doc/doc.am: Fix code style nit.  Favor interpolation of
	`GROFF_INFO` macro over "doc/groff.info" literal.

2026-09-26  G. Branden Robinson <g.branden.robinson@gmail.com>

	* doc/doc.am: Avoid use of GNU Make extension: special variable
	`$<` expansion in target (cf. suffix) rules.  Define new macros
	`DOC_MEINTRO_FR`, `GROFF_TEXI`, and `DOC_LINE_LAYOUT_ROFF`
	to avoid repeating ourselves in prerequisites and recipes.
	(doc/meintro_fr.ps):
	($(GROFF_HTML)):
	($(DOC_LINE_LAYOUT_EPS)):
	($(DOC_LINE_LAYOUT_PNG)): Expand macros as necessary.
	$(DOC_LINE_LAYOUT_EPS)): Kludge in a workaround for the damnably
	discrepant GNU vs. BSD Make handling of `VPATH`.

	Thanks to Ingo Schwarze for the report in <https://\
	lists.gnu.org/archive/html/groff/2026-09/msg00079.html>.

2026-09-19  G. Branden Robinson <g.branden.robinson@gmail.com>

	* src/preproc/eqn/box.cpp (set_param): Fix off-by-one error in
	loop bounds leading to 1-byte heap overread diagnosed by ASAN.

	Fixes <https://savannah.gnu.org/bugs/?68683>.  Thanks to Pavol
	Sloboda for the report.  Problem introduced in commit
	81bf236e4a, 2025-12-07.

2026-09-19  G. Branden Robinson <g.branden.robinson@gmail.com>

	[eqn]: Regression-test Savannah #68707.

	* src/preproc/eqn/tests/\
	error-diagnose-invalid-parameter-name.sh: Do it.
	* src/preproc/eqn/eqn.am (eqn_TESTS): Run test.

2026-09-23  Deri James  <deri@chuzzlewit.myzen.co.uk>

	[gropdf]: Fix loading of PDF files exported from Inkscape.
