summaryrefslogtreecommitdiffstats
path: root/ChangeLog
diff options
context:
space:
mode:
Diffstat (limited to 'ChangeLog')
-rw-r--r--ChangeLog18665
1 files changed, 18665 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..bfcc345
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,18665 @@
+2023-06-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Offer advice to users of PDF who want a table of contents
+ at the front of the document.
+
+ * doc/groff.texi (ms Document Structure): Move mention of
+ pdfjam(1) from here...
+ (ms TOC): ...to here, and identify alternatives, including
+ gropdf(1)'s `pdfswitchtopage` macro.
+
+ * doc/ms.ms (General structure of an ms document):
+ (Creating a table of contents): Similar.
+
+ Fixes <https://savannah.gnu.org/bugs/?64278>. Thanks to Michał
+ Kruszewski for the report.
+
+2023-06-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Migrate terminology to "scaling unit".
+
+ ...from "scaling indicator".
+
+ Fixes <https://savannah.gnu.org/bugs/?60957>. Thanks to Ingo
+ Schwarze for the discussion.
+
+2023-05-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Revise discussion of fonts.
+
+ * doc/groff.texi:
+ - Rename node/section "Fonts and Symbols" to "Using Fonts". Add
+ giant new introduction, properly establishing terminology.
+ - Rename node/section "Changing Fonts" to "Selecting Fonts".
+ Shift location of `.fn` and `.sty` register documentation.
+ Rewrite presentation of `ft` and `\f`. Discuss typeface
+ selection by mounting position and font (or style) name
+ together; since arguments to these formatter instructions are
+ always interpreted as mounting positions first, it doesn't
+ make much sense to me to present them separately, and the new
+ introduction provides the necessary background. Tighten
+ example. Document that current and previous font selections
+ are environment properties.
+ - Add several concept index entries.
+ - Do more migration from "symbol" and "glyph" names to "special
+ character" names.
+
+ * man/groff.7 (Using fonts): Introduce new section, synced with
+ the renamed node from our Texinfo manual above.
+
+ Fixes <https://savannah.gnu.org/bugs/?62973>.
+
+2023-05-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Revise "Page Layout" material.
+
+ * doc/groff.texi:
+ - Recast generally.
+ - Describe behavior of `pl` in more detail.
+ - Migrate terminology from "scaling indicator" to "scaling
+ unit".
+ - Stop discussing page margins in the context of the `pl`
+ request.
+ - Move concept index entries regarding margins from here to
+ "Traps".
+ - Move discussion of `pn` request to precede `tl` request.
+ - Add concept index entries.
+ - Recast description of `tl` request. Migrate terminology from
+ "justification" to "alignment".
+ - Recast description of `lt` request. Describe behavior in more
+ detail.
+ - Recast description of `pc` request.
+ - Add example of `lt` and `tl` usage. Add forward reference to
+ "Traps", mentioning page header and footer traps.
+
+ Fixes <https://savannah.gnu.org/bugs/?55124>. Thanks to Dave
+ Kemper for the report.
+
+2023-05-22 Dave Kemper <saint.snit@gmail.com>
+
+ [docs]: Correct minor punctuation, grammar, and spelling issues.
+
+ Also remove a couple instances of unnecessarily telling the
+ reader to note something.
+
+ * doc/groff.texi:
+ * man/groff.7.man:
+ * man/groff_char.7.man:
+ * man/groff_diff.7.man:
+ * man/roff.7.man:
+ * src/roff/nroff/nroff.1.man: Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?64230>. [I threw in a few
+ more fixes. --GBR]
+
+2023-04-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Attempt to further clarify end-of-sentence detection.
+
+ * doc/groff.texi (Sentences):
+ * man/roff.7 (Concepts): Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?64091>. Thanks to Ingo
+ Schwarze and Dave Kemper for the report.
+
+2023-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Minimally document `tag`, `taga` requests.
+
+ * doc/groff.texi (Postprocessor Access):
+ * man/groff.7 (Request short reference): Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?62695>.
+
+2023-04-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Fix typos.
+
+ * doc/groff.texi (ms basic information):
+ * doc/ms.ms (Basic information): Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?64032>. Thanks to an
+ anonymous reporter.
+
+2023-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Operators in Conditionals):
+ * man/groff.7.in (Conditional expressions): Clarify how the
+ output comparison operator is recognized.
+
+ Fixes <https://savannah.gnu.org/bugs/?63812>. Thanks to John
+ Gardner for the report.
+
+2023-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Use a better type for symbol hashes.
+
+ * bootstrap.conf: Add "stdint" module to ensure that the
+ `uintptr_t` type is available.
+ * src/include/symbol.h: Include <stdint.h> for `uintptr_t`.
+ (class symbol):
+ (symbol::hash): Change return type from `unsigned long`, which
+ causes build failures on 64-bit MinGW, to `uintptr_t`.
+ (symbol::hash): Use a C++ type cast, not a C-style one.
+
+ Thanks to Bruno Haible for reporting the build failure in the
+ 64-bit MinGW environment, and for suggesting a remedy.
+
+2023-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [groff]: Revise a test to be more revealing.
+
+ * src/roff/groff/tests/initialization_is_quiet.sh: Stop using
+ "set -e". Instead use `fail` variable and `wail` function (and
+ lowercase names for our internal variables) like many of our
+ other tests. If the "unset" shell built-in fails, skip the
+ test (prompted by /usr/xpg4/bin/sh on Solaris). Attempt every
+ groff locale, with and without compatibility mode initially
+ enabled, instead of stopping at the first failure. Report
+ standard error and standard output content separately. Use
+ groff's `-a` flag to prepare the standard output, for
+ readability.
+ * PROBLEMS: Document that this test might be skipped rather than
+ failing on Solaris. (What actually happens depends on which
+ shell you run it with, and we advise a variety of approaches.)
+
+ Thanks to Bruno Haible for feedback regarding mysterious
+ failures of this test on GNU/Hurd and NetBSD systems.
+
+2023-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * bootstrap.conf (gnulib_modules): Add "stdbool-c99" per
+ recommendation from Bruno Haible.
+
+ Fixes build problem on Solaris using Sun compiler.
+
+2023-03-06 Bruno Haible <bruno@clisp.org>
+
+ * Makefile.am (AR): Remove hardcoded value. Let Automake use the
+ value from config.status.
+
+ {Fixes build problem on 64-bit AIX. Problem appears to date
+ back to commit 5fec19d453, 2014-08-15. --GBR}
+
+2023-03-06 Bruno Haible <bruno@clisp.org>
+
+ * arch/misc/misc.am (shdeps.sed): Rename target from this...
+ ($(SH_DEPS_SED_SCRIPT)): ...to this, to work better with make(1)
+ on FreeBSD, NetBSD, and AIX.
+
+2023-03-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Discard now-unneeded Autoconf macro and variables.
+
+ * configure.ac: Stop calling `GROFF_POPPLER`. Stop populating
+ the Automake conditional `HAVE_PDFTOOLS`. Eliminate chatter
+ about their availability in the configuration report.
+ * m4/groff.m4 (GROFF_POPPLER): Delete.
+
+2023-03-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_URW_FONTS_NOTICE): Adapt wording of notice
+ to presence and identity of Ghostscript interpreter command.
+ Clarify that it is gropdf(1) specifically that traverses the
+ Ghostscript search path reported by its "-h" option.
+
+ Continues <https://savannah.gnu.org/bugs/?63808>. Thanks to
+ Deri James for the ongoing discussion.
+
+2023-02-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [devpdf]: Revise tests.
+
+ * font/devpdf/tests/check-default-foundry.sh.in: Test only the
+ base 14 fonts of the PDF standard unconditionally. Test the
+ remainder from the set of 35 commonly distributed only if a
+ Ghostscript interpreter was detected at configuration time,
+ because the latter fonts _must_ be embedded in PDF documents.
+ If they're not present, skip the test rather than failing it.
+ * font/devpdf/tests/check-urw-foundry.sh.in: Skip test if no URW
+ fonts detected at configuration time, rather than failing it.
+ * m4/groff.m4 (GROFF_GROPDF_PROGRAM_NOTICE)
+ (GROFF_URW_FONTS_NOTICE): Drop warnings of expected test
+ failures. The tests no longer fail in the anticipated
+ circumstances.
+
+2023-02-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [devpdf]: Generate tests from template files, so we can populate
+ the test scripts with information determined at configuration.
+ The default foundry test depends on $GHOSTSCRIPT, and the URW
+ foundry test on $urwfontsdir.
+
+ * font/devpdf/tests/check-default-foundry.sh:
+ * font/devpdf/tests/check-urw-foundry.sh: Rename these...
+ * font/devpdf/tests/check-default-foundry.sh.in:
+ * font/devpdf/tests/check-urw-foundry.sh.in: ...to these.
+
+ * font/devpdf/devpdf.am (font_devpdf_default_test)
+ (font_devpdf_urw_test): New variables store names of generated
+ test scripts.
+ (font/devpdf/tests/check-default-foundry.sh):
+ (font/devpdf/tests/check-urw-foundry.sh): New targets produce
+ test scripts from corresponding .in files.
+
+2023-02-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [devpdf]: Trivially refactor. Rename sed-substitutum [Lat.]
+ from "@GROFF_GHOSTSCRIPT_INTERPRETERS@" to "@GHOSTSCRIPT@" for
+ clarity and brevity; this is a scalar value containing the
+ Autoconf-determined name of the Ghostscript interpreter. It is
+ not the same as the replacement that occurs in contrib/pdfmark.
+
+ * font/devpdf/devpdf.am:
+ * font/devpdf/util/BuildFoundries.pl: Do it.
+
+2023-02-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Stop scraping output of Ghostscript executable with
+ "-h" option to attempt to find URW fonts. Fonts that ship with
+ Ghostscript are regarded as the "default" foundry, not the URW
+ foundry (though they often ultimately originate with URW fonts).
+ They are often missing Adobe Font Metric (AFM) files, so it is
+ impossible for groff to generate font description files for them
+ at build time.
+
+ * m4/groff.m4 (GROFF_URW_FONTS_CHECK): Drop `AC_REQUIRE` on
+ `GROFF_AWK_PATH`. Drop awk-based scraping of Ghostscript "-h"
+ output. Annotate need for sync between this list of
+ characteristic font file names and the one in BuildFoundries.
+
+ Thanks to Deri James for the ongoing discussions.
+
+2023-02-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Drop now-redundant explicit
+ `GROFF_URW_FONTS_CHECK`. `GROFF_GROPDF_DEPENDENCIES_CHECK`
+ `AC_REQUIRE`s it as of commit ec001d2a23, 18 February.
+
+2023-02-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_URW_FONTS_CHECK): When looking for a
+ characteristic URW font by its file name, also check for
+ "URWGothic-Book" with no file extension. Avoids false negatives
+ in URW Type 1 font detection when using Ghostscript 9.53.3.
+ Thanks to Deri James for suggesting the test procedure that
+ uncovered this flaw.
+
+2023-02-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am (uninstall_groffdirs): Remove "html.mono" and
+ "html.node" directories corresponding to HTML version of our
+ Texinfo manual.
+ * doc/doc.am (uninstall-html): Uninstall HTML version of our
+ Texinfo manual more reliably.
+
+ Fixes a regression introduced by me in commit c2698aade, 6 April
+ {my claim "we're only deleting files with this command, not
+ directories" was not correct}.
+
+2023-02-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [doc]: Handle output formats of our Texinfo manual more
+ consistently.
+
+ * doc/doc.am (install-doc): Add dependency on (Automake
+ standard) target 'install-dvi'.
+ (maintainer-clean-local): Remove our Texinfo manual in plain
+ text format.
+ (install-data-local): Add dependency on new target
+ 'install-txt'.
+ (install-txt): Install our Texinfo manual in plain text format.
+ (uninstall-local): Add dependency on new target 'uninstall-txt'.
+ (uninstall-txt): Uninstall our Texinfo manual in plain text
+ format.
+
+ Thanks to T. Kurt Bond for noticing the discrepancy.
+
+2023-02-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (install-pdf-local, install-html-local): Enable
+ rules to work in out-of-tree builds.
+
+2023-02-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (uninstall-hook): Drop dependency on
+ "uninstall_mom"; this is not the appropriate place to declare
+ it, and "uninstall_groffdirs" already depends on it in mom's
+ Automake file.
+
+2023-02-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Have more tests report output.
+
+ * src/roff/groff/tests/ab_works.sh:
+ * src/roff/groff/tests/handle_special_input_code_points.sh:
+ * src/roff/groff/tests/initialization_is_quiet.sh:
+ * src/roff/groff/tests/msoquiet_works.sh:
+ * src/roff/groff/tests/soquiet_works.sh:
+ * tmac/tests/an-ext_MR-works.sh:
+ * tmac/tests/an_MR-works.sh: Do it.
+
+2023-02-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Prevent failures when $GROFF_ENCODING is set.
+
+ * src/roff/groff/tests/ab_works.sh:
+ * src/roff/groff/tests/handle_special_input_code_points.sh:
+ * src/roff/groff/tests/initialization_is_quiet.sh:
+ * src/roff/groff/tests/msoquiet_works.sh:
+ * src/roff/groff/tests/soquiet_works.sh:
+ * tmac/tests/an-ext_MR-works.sh:
+ * tmac/tests/an_MR-works.sh:
+ * tmac/tests/an_font-remapping-does-not-affect-titles.sh: Unset
+ $GROFF_ENCODING before running test because preconv(1) confounds
+ these tests.
+
+ Thanks to Alexis for reporting this problem.
+
+2023-02-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Rename test.
+
+ * tmac/tests/s_no-excess-space-around-displays.tmac: Rename...
+ * tmac/tests/s_no-excess-space-around-displays.sh: ...to this.
+ * tmac/tmac.am (tmac_TESTS): Update.
+
+2023-02-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [gropdf]: Revise tests to run unconditionally, rather than
+ configuring them away at build time, which can cause a
+ distribution archive to be incorrectly structured. Update
+ configuration notices when optional dependencies are absent.
+
+ * font/devpdf/devpdf.am (font_devpdf_TESTS): Remove `USE_GROPDF`
+ and `HAVE_URW_FONTS` conditionals.
+ * m4/groff.m4 (GROFF_GROPDF_PROGRAM_NOTICE):
+ (GROFF_URW_FONTS_NOTICE): Warn reader that a gropdf test failure
+ is to be expected.
+
+ Fixes <https://savannah.gnu.org/bugs/?63824> (2/2).
+
+2023-02-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Revise tests to check for requisite programs at test
+ time and skip if not found, rather than configuring them away at
+ build time, which can cause a distribution archive to be
+ incorrectly structured.
+
+ * m4/groff.m4: Annotate requisite program list since we're
+ violating the DRY principle.
+ * src/roff/groff/groff.am (groff_TESTS): Populate
+ unconditionally.
+
+ * src/roff/groff/tests/html_works_with_grn_and_eqn.sh:
+ * src/roff/groff/tests/smoke-test_html_device.sh: Check for
+ requisite programs and skip test if any are not found.
+
+ Fixes <https://savannah.gnu.org/bugs/?63824> (1/2).
+
+2023-02-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man pages]: Define page-local `MR` fallback.
+
+ [man pages]: Provide page-local fallback definition of new `MR`
+ macro. I didn't think I was going to have to do this, but the
+ premier site on the web for viewing Linux man pages, Michael
+ Kerrisk's man7.org, has been pulling snapshots of the pages
+ themselves without upgrading the underlying macros, and so man
+ page cross references set with `MR` are getting lost in its
+ presentations. (I acknowledge: Ingo Schwarze warned me
+ something like this could happen.) This definition is intended
+ as a stopgap measure only. I want to revert this after groff
+ 1.23 is released and has spread to some reasonable degree.
+
+ * contrib/chem/chem.1.man:
+ * contrib/eqn2graph/eqn2graph.1.man:
+ * contrib/gdiffmk/gdiffmk.1.man:
+ * contrib/glilypond/glilypond.1.man:
+ * contrib/gperl/gperl.1.man:
+ * contrib/gpinyin/gpinyin.1.man:
+ * contrib/grap2graph/grap2graph.1.man:
+ * contrib/hdtbl/groff_hdtbl.7.man:
+ * contrib/mm/groff_mm.7.man:
+ * contrib/mm/groff_mmse.7.man:
+ * contrib/mm/mmroff.1.man:
+ * contrib/mom/groff_mom.7.man:
+ * contrib/pdfmark/pdfroff.1.man:
+ * contrib/pic2graph/pic2graph.1.man:
+ * contrib/rfc1345/groff_rfc1345.7.man:
+ * man/groff.7.man:
+ * man/groff_char.7.man:
+ * man/groff_diff.7.man:
+ * man/groff_font.5.man:
+ * man/groff_out.5.man:
+ * man/groff_tmac.5.man:
+ * man/roff.7.man:
+ * src/devices/grodvi/grodvi.1.man:
+ * src/devices/grohtml/grohtml.1.man:
+ * src/devices/grolbp/grolbp.1.man:
+ * src/devices/grolj4/grolj4.1.man:
+ * src/devices/gropdf/gropdf.1.man:
+ * src/devices/gropdf/pdfmom.1.man:
+ * src/devices/grops/grops.1.man:
+ * src/devices/grotty/grotty.1.man:
+ * src/devices/xditview/gxditview.1.man:
+ * src/preproc/eqn/eqn.1.man:
+ * src/preproc/eqn/neqn.1.man:
+ * src/preproc/grn/grn.1.man:
+ * src/preproc/pic/pic.1.man:
+ * src/preproc/preconv/preconv.1.man:
+ * src/preproc/refer/refer.1.man:
+ * src/preproc/soelim/soelim.1.man:
+ * src/preproc/tbl/tbl.1.man:
+ * src/roff/groff/groff.1.man:
+ * src/roff/nroff/nroff.1.man:
+ * src/roff/troff/troff.1.man:
+ * src/utils/addftinfo/addftinfo.1.man:
+ * src/utils/afmtodit/afmtodit.1.man:
+ * src/utils/grog/grog.1.man:
+ * src/utils/hpftodit/hpftodit.1.man:
+ * src/utils/indxbib/indxbib.1.man:
+ * src/utils/lkbib/lkbib.1.man:
+ * src/utils/lookbib/lookbib.1.man:
+ * src/utils/pfbtops/pfbtops.1.man:
+ * src/utils/tfmtodit/tfmtodit.1.man:
+ * src/utils/xtotroff/xtotroff.1.man:
+ * tmac/groff_man.7.man.in:
+ * tmac/groff_me.7.man:
+ * tmac/groff_ms.7.man:
+ * tmac/groff_trace.7.man:
+ * tmac/groff_www.7.man: Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?63825>. Thanks greatly to
+ Alexis for identifying an issue with mandoc(1)'s handling of an
+ earlier iteration of this fallback, and to John Gardner for
+ identifying a method of detecting mandoc as the renderer at
+ formatting time.
+
+2023-02-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh: Improve
+ portability of script by using shell constructs instead of the
+ nonstandard GNU coreutils 'seq' utility. Resolves test failure
+ on Solaris 10.
+ * HACKING: Document this problem.
+
+2023-02-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_MAKE_DEFINES_RM): Test the make(1) in the
+ environment variable $MAKE if defined, not a literal "make".
+ Required on (some) Solaris 10 configurations where traditional
+ make(1) is not installed but GNU make is installed as "gmake".
+
+2023-02-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/latin2_works.sh: Fix missing backslash in printf.
+ Solaris printf(1) was sensitive to this error; macOS and GNU
+ printf were not. Fixes a test failure on Solaris 11.
+
+2023-02-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/regression_savannah_58153.sh: Improve
+ portability. Avoid the unpredictability of implementations when
+ putting backslashes inside a groff-piped printf shell command
+ inside a here document inside a command substitution by changing
+ the groff escape character to something meaningless to the shell
+ and to printf ('@'). Fixes a test failure on Solaris 11.
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/Foundry.in: Recognize URW foundry replacements for
+ Helvetica Bold-Oblique and Helvetica Oblique under the file
+ names "NimbusSans-BoldItalic.t1" and "NimbusSans-Italic.t1",
+ respectively.
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (uninstall-pdf): Clean more fastidiously; try to
+ remove the configured `pdfdocdir` in the event it is empty, but
+ do not fail if it isn't. (It can be a directory shared with
+ other groff components; we don't know in what order the
+ uninstall targets will serialize, but the last one run should
+ succeed.)
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Detangle "pdfroff" and "gropdf" configuration (2/2).
+
+ * m4/groff.m4: Give pdfroff its own Autoconf macros to handle
+ dependency checking, build objectives, and user notice.
+ (GROFF_PDFROFF_DEPENDENCIES_CHECK): New macro requires
+ `GROFF_AWK_PATH` and `GROFF_GHOSTSCRIPT_PATH`, determines
+ whether pdfroff can be used at build time, and (if not)
+ constructs part of message to be shown to user explaining why.
+ (GROFF_PDFROFF_PROGRAM_NOTICE): New macro requires
+ `GROFF_PDFROFF_DEPENDENCIES_CHECK` and emits message if needed.
+ (GROFF_GHOSTSCRIPT_AVAILABILITY_NOTICE): Drop mention of impact
+ on pdfroff since its dedicated notice covers this now.
+ * configure.ac: Call the new macros at appropriate times.
+ Produce a new Automake macro, `USE_PDFROFF`, to replace
+ inapposite use of `USE_GROPDF` in pdfmark.am.
+ * contrib/pdfmark/pdfmark.am: Use `USE_PDFROFF` instead of
+ `USE_GROPDF`.
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Detangle "pdfroff" and "gropdf" configuration (1/2).
+
+ * m4/groff.m4 (GROFF_GROPDF_DEPENDENCIES_CHECK): Add
+ `AC_REQUIRE`ment on `GROFF_URW_FONTS_CHECK`. Per discussion
+ with Deri James, if _either_ Ghostscript or the URW fonts are
+ avilable, gropdf will be fully functional, consequent to commit
+ d5515, 22 June. Drop dependency on awk; it is used only at
+ configuration time (in an Autoconf macro) and since Savannah
+ #62775 was resolved (19 September), it has not been strictly
+ necessary. (It is useful for searching more locations for URW
+ fonts, but several others are searched even if it is absent.)
+ Stop populating notice text here, instead moving it...
+ (GROFF_GROPDF_PROGRAM_NOTICE): ...here, since it no longer needs
+ to be dynamically constructed.
+
+ Continues <https://savannah.gnu.org/bugs/?63808>. Thanks to
+ Deri James for the continued discussion.
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Rename `GROFF_CHECK_GROPDF_PROGRAMS` macro to
+ `GROFF_GROPDF_DEPENDENCIES_CHECK` to generalize for greater
+ accuracy in forthcoming change.
+
+ * configure.ac:
+ * m4/groff.m4: Do it.
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [gropdf]: Don't run automated tests if 'gropdf' will be
+ operating with reduced function. If neither Ghostscript nor the
+ URW fonts are available at configuration time, there is no point
+ testing for successful build-time population of the font
+ descriptions for the default and URW foundries.
+
+ * font/devpdf/devpdf.am (font_devpdf_TESTS) [USE_GROPDF]: Run
+ "check-default-foundry" only if gropdf is fully functional.
+ (font_devpdf_TESTS) [USE_GROPDF && HAVE_URW_FONTS]: Run
+ "check-urw-foundry" only if the URW fonts were found.
+
+ Continues <https://savannah.gnu.org/bugs/?63808>. Thanks to
+ Deri James for the continued discussion.
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [gropdf]: Rename tests to more accurately characterize their
+ purpose.
+
+ * font/devpdf/tests/basic-fonts-present.sh:
+ * font/devpdf/tests/urw-fonts-present.sh: Rename these...
+ * font/devpdf/tests/check-default-foundry.sh:
+ * font/devpdf/tests/check-urw-foundry.sh: ...to these.
+ * font/devpdf/devpdf.am (font_devpdf_TESTS): Reflect rename.
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [gropdf]: Revise tests to be foundry-focussed.
+
+ * font/devpdf/tests/basic-fonts-present.sh: Stop trying to match
+ font descriptions in the "devps" directory with ones in
+ "devpdf"; instead, test whether "BuildFoundries" did its job.
+ Test for font descriptions corresponding to the full 35
+ PostScript Level 2 font repertoire, plus groff's "EURO".
+ * font/devpdf/tests/urw-fonts-present.sh: Drop stale comment and
+ rename variable for better parallelism with the other test
+ above.
+
+ Continues <https://savannah.gnu.org/bugs/?63808>. Thanks to
+ Deri James for the continued discussion.
+
+2023-02-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Tweak fix to Savannah #63768.
+
+ * tmac/an.tmac (MR): Ensure `an*url` always has a value,
+ defaulting to "format 1" (man:page(section)). Resequence the
+ macOS URL formats to sort the contemporary one before the
+ others.
+ * tmac/man.local: Reflect resequencing of integer assignments to
+ formats. Clarify historicity of annotations.
+
+ Continues <https://savannah.gnu.org/bugs/?63768>. Thanks to
+ John Gardner for further discussion.
+
+2023-02-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Port a test to Solaris 11 sed.
+
+ * tmac/tests/s_TC-works-with-percent-in-custom-titles.sh: Put
+ newlines after opening braces in sed scripts. macOS and GNU sed
+ tolerate their absence, but this sed does not.
+ * HACKING: Document this problem.
+
+2023-02-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.am (groff_TESTS) [!USE_GROHTML]: Don't
+ test the 'grohtml' driver if we know it won't work.
+
+2023-02-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/\
+ device_control_escapes_express_basic_latin.sh: Use printf(1),
+ which is often a shell built-in command, more consistently.
+ Double backslashes intended as literals in the format string,
+ and single-quote format strings using them. Fixes test failure
+ seen on Solaris 11 with GNU Bash 4.4 and ksh 93u+ (2012-08-01).
+
+2023-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an_use-input-traps-correctly.sh: Explicitly test
+ `SM` and `SB` with 'ps' output device. If one set
+ GROFF_TYPESETTER=utf8 in the test environment, these test cases
+ would fail. Thanks to John Gardner for the report.
+
+2023-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Add Automake conditional, `HAVE_GHOSTSCRIPT`, so
+ that we can populate the list of PDF device font tests
+ dynamically. Call new macro
+ `GROFF_GHOSTSCRIPT_AVAILABILITY_NOTICE`. Call
+ `GROFF_GHOSTSCRIPT_VERSION_NOTICE` after it, but before
+ `GROFF_URW_FONTS_NOTICE`.
+ * m4/groff.m4 (GROFF_AWK_NOTICE): New macro produces warning if
+ no awk could be found. This reduces gropdf functionality, but
+ so do missing URW fonts, so we report this problem separately.
+ Report the names under which we sought it, since there's a
+ configure script option for that.
+ (GROFF_GHOSTSCRIPT_AVAILABILITY_NOTICE): New macro explains
+ consequences of missing optional dependency on Ghostscript
+ program: reduced grohtml functionality, nonfunctional pdfroff.
+ Report the names under which we sought it, since there's a
+ configure script option for that.
+ (GROFF_CHECK_GROPDF_PROGRAMS): Better characterize gropdf's
+ reduced function, pointing out the ways in which it would be
+ more useful if the dependencies were met. Also simplify the
+ computational grammar.
+ (GROFF_URW_FONTS_NOTICE): Identify 'U' as the foundry name
+ gropdf uses for the URW fonts. Confirm continuing availability
+ of most recent URW fonts release; bump date.
+ * font/devpdf/devpdf.am: Test availability of "basic" (PDF base
+ 14) fonts (plus groff's "EURO") if either Ghostscript or URW
+ fonts are available. Test availability of URW fonts (35) only
+ if Ghostscript _and_ the URW fonts were found at configuration
+ time.
+
+ Fixes <https://savannah.gnu.org/bugs/?63808>. Thanks to Deri
+ James for the report and extremely helpful pseudocode.
+
+2023-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_GHOSTSCRIPT_VERSION_CHECK,
+ GROFF_URW_FONTS_NOTICE): Add macro dependency on
+ `GROFF_GHOSTSCRIPT_PATH`, which should have been there already.
+ (GROFF_GROHTML_PROGRAM_NOTICE): Add macro dependency on
+ `GROFF_CHECK_GROHTML_PROGRAMS`, which should have been there
+ already.
+
+ (GROFF_CHECK_GROHTML_PROGRAMS, GROFF_PNMTOOLS_CAN_BE_QUIET):
+ Move `AC_REQUIRE` expansions to precede shell variable
+ assignments (after checking that the required macros don't
+ clobber the assignments we're making).
+
+2023-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/tests/basic-fonts-present.sh: Revise test again,
+ per feedback from Deri James. Even without Ghostscript or URW
+ fonts available, gropdf can generate valid PDF documents; it
+ simply can't embed fonts in general (without further
+ arrangements made on the host system), which means it is
+ restricted to the PDF base 14 fonts. That's enough for many
+ purposes, including generating our compiled man pages document
+ {with minor degradations to the typeface lists in gropdf(1) and
+ grops(1)}. Drop the 'gs' command check, which also didn't check
+ for the name of the Ghostscript interpreter determined by the
+ "configure" script. Replace dynamically generated font list
+ with a static one (the base 14 fonts plus groff's EURO).
+
+2023-02-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/tests/basic-fonts-present.sh: Revise test.
+ Improve explanation of why we're looking for the gs(1) command
+ in a font availability test. Prefix diagnostic output with name
+ of test script. Perform a search for the 'ps' device font
+ descriptions that will work in more build scenarios (i.e., don't
+ assume an out-of-tree build taking place in an immediate
+ subdirectory of the source). Distinguish failure to find the
+ font descriptions from a failure to locate the 'gs' command,
+ skipping the test in both scenarios. Reduce noise in output.
+ * m4/groff.m4 (GROFF_CHECK_GROPDF_PROGRAMS): Revise warning
+ issued when awk and Ghostscript are unavailable; gropdf will not
+ be completely inoperative. Characterize its reduced function.
+
+ Thanks to Deri James in <https://lists.gnu.org/archive/html/\
+ groff-commit/2023-02/msg00089.html> for prompting me to take a
+ another look at this.
+
+2023-02-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/latin2_works.sh:
+ * tmac/tests/latin5_works.sh:
+ * tmac/tests/latin9_works.sh: Port to work around macOS's
+ apparently POSIX non-conforming 'od' command. Use single-byte
+ octal output format instead of "character", and update test
+ expectations accordingly. Apparently gratuitously, macOS also
+ puts more spaces after the octal address field when using this
+ output format.
+ * HACKING: Document, and elaborate upon, this problem.
+
+2023-02-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Port a test to work with macOS sed.
+
+ * tmac/tests/doc_heading-font-remapping-works.sh: Put semicolons
+ between commands and closing braces in sed script. Put each of
+ multiple closing braces on a separate input line, because macOS
+ doesn't accept them otherwise. Resolves test failure observed
+ on macOS.
+ * HACKING: Document the closing brace sequence problem.
+
+2023-02-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Port a test to work with macOS sed.
+
+ * tmac/tests/an_TS-adds-no-vertical-space.sh: Put semicolons
+ between commands and closing braces in sed script. Separate
+ command stream into multiple '-e' expressions, breaking them
+ after branch and label commands. Resolves test failure observed
+ on macOS.
+ * HACKING: Document the above problems.
+
+2023-02-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/\
+ some_escapes_accept_newline_delimiters.sh: Weaken regexes in two
+ test cases to accommodate excessive output from macOS's 'od'
+ command. Resolves test failure seen on macOS.
+ * HACKING: Add section "Writing Tests" and document the above
+ since this is the second time I've cracked my shin on this.
+
+2023-02-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/tests/basic-fonts-present.sh: Skip test if 'gs'
+ command not available. The test is to ensure that gropdf will
+ produce sound documents using the base fonts from PostScript,
+ but since gropdf requires Ghostscript to do this (as noted in
+ our "./configure" messages), it makes no sense to validate font
+ availability if the program is absent. Resolves test failure
+ seen on macOS with minimal dependencies installed.
+
+2023-02-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Manipulating Filling and Adjustment): Say more
+ about the consequences of a break.
+
+ Fixes <https://savannah.gnu.org/bugs/?63777>. Thanks to Dave
+ Kemper for the report.
+
+2023-02-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Re-re-christen 'ESCAPE_AMPERSAND' ('\&'). Now call it a
+ {non-transparent} "dummy character". Also rechristen
+ 'ESCAPE_RIGHT_PARENTHESIS', ('\)') as the "transparent dummy
+ character"; it has no impact on sentence-ending detection.
+
+ * doc/groff.texi:
+ * doc/meref.me.in:
+ * man/groff.7.man:
+ * man/groff_diff.7.man:
+ * man/roff.7.man:
+ * src/preproc/refer/refer.1.man:
+ * tmac/groff_man.7.man.in: Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?62816>. Thanks to Dave
+ Kemper for the report and to the groff mailing list for the
+ vigorous discussion. I don't expect my solution to please
+ everyone.
+
+2023-02-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Add internal register `an*MR-URL-format` to
+ select from a few known formats of man page hyperlink. There
+ are three known on macOS, and one used everywhere else.
+ * tmac/man.local: Document this feature so macOS users can enjoy
+ the OSC 8 hyperlink feature if their terminal application
+ supports it.
+
+ I hope that this feature will be a temporary measure while macOS
+ implements support for the man page URL format used everywhere
+ else in the world.
+
+ Fixes <https://savannah.gnu.org/bugs/?63768>. Thanks to John
+ Gardner for the report, research, consultation, and testing.
+
+2023-02-11 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [BuildFoundries]: Fails if neither ghostcript nor URW fonts
+ are installed.
+
+ * font/devpdf/util/BuildFoundries.pl: When the change to hold
+ paths in an array, rather than a delimited string (see commit
+ 4ae4aeb6555f4f16c28fcb03eb1f56577826054c), the FindGSpath
+ subroutine should return a pointer to an empty array when the
+ call to ghostscript fails, rather than return an empty string,
+ as was done previously.
+
+ See <https://lists.gnu.org/archive/html/groff/2023-02/\
+ msg00042.html>; thanks to Bruno Haible for the report.
+
+2023-02-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Switch to using system's assert.h header file. It is futile to
+ attempt to preserve compatibility with ISO C90 systems by
+ providing a bespoke predicate-reporting assert() (a C99 feature)
+ when gnulib, which we require, itself demands C99. This ensures
+ that `static_assert` remains defined so that gnulib can use it.
+ Thanks to Bruno Haible for the consultation.
+ <https://lists.gnu.org/archive/html/groff/2023-02/msg00034.html>
+
+ * src/include/assert.h: Delete.
+
+ * src/devices/grodvi/dvi.cpp:
+ * src/devices/grolbp/lbp.cpp:
+ * src/devices/grolj4/lj4.cpp:
+ * src/include/itable.h:
+ * src/include/stringclass.h:
+ * src/libs/libbib/linear.cpp:
+ * src/libs/libbib/search.cpp:
+ * src/libs/libdriver/printer.cpp:
+ * src/libs/libgroff/assert.cpp:
+ * src/libs/libgroff/color.cpp:
+ * src/libs/libgroff/errarg.cpp:
+ * src/libs/libgroff/font.cpp:
+ * src/libs/libgroff/nametoindex.cpp:
+ * src/libs/libgroff/prime.cpp:
+ * src/libs/libgroff/relocate.cpp:
+ * src/libs/libgroff/searchpath.cpp:
+ * src/preproc/eqn/box.cpp:
+ * src/preproc/eqn/delim.cpp:
+ * src/preproc/eqn/pile.cpp:
+ * src/preproc/eqn/script.cpp:
+ * src/preproc/html/pre-html.cpp:
+ * src/preproc/pic/pic.h:
+ * src/preproc/preconv/preconv.cpp:
+ * src/preproc/soelim/soelim.cpp:
+ * src/roff/groff/groff.cpp:
+ * src/roff/troff/troff.h:
+ * src/utils/hpftodit/hpftodit.cpp:
+ * src/utils/indxbib/indxbib.cpp:
+ * src/utils/lkbib/lkbib.cpp:
+ * src/utils/lookbib/lookbib.cpp:
+ * src/utils/tfmtodit/tfmtodit.cpp: Respell "assert.h" inclusion
+ with angle brackets instead of quotation marks.
+
+ Fixes <https://savannah.gnu.org/bugs/?63078>.
+
+2023-02-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (token::next): Use correct kind of
+ null object in comparison. Fixes latent bug that would be
+ exposed if we were to migrate from zero literals to `nullptr`.
+
+2023-02-09 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf] Parse multiple entries in 'papersize' as specified in
+ the groff_font man page. Reported by Ben Wong and fix based on
+ his patch, thanks.
+
+ * src/devices/gropdf/gropdf.pl: Parse papersize string for
+ possible multiple (space separated) entries. First valid entry
+ wins.
+
+ Fixes https://savannah.gnu.org/bugs/?63757
+
+2023-02-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Correct numerous typos and solecisms throughout the source tree.
+
+ * ChangeLog:
+ * ChangeLog.115:
+ * ChangeLog.116:
+ * ChangeLog.117:
+ * ChangeLog.118:
+ * ChangeLog.119:
+ * ChangeLog.121:
+ * ChangeLog.122:
+ * Makefile.am:
+ * NEWS:
+ * PROBLEMS:
+ * README:
+ * contrib/chem/chem.am:
+ * contrib/chem/chem.pl:
+ * contrib/glilypond/README.txt:
+ * contrib/glilypond/glilypond.pl:
+ * contrib/hdtbl/groff_hdtbl.7.man:
+ * contrib/mm/ChangeLog:
+ * contrib/mm/m.tmac:
+ * contrib/pdfmark/pdfmark.ms:
+ * doc/automake.mom:
+ * doc/groff.texi:
+ * doc/me-revisions:
+ * doc/webpage.ms:
+ * m4/lib-link.m4:
+ * man/groff.7.man:
+ * man/groff_diff.7.man:
+ * man/roff.7.man:
+ * src/devices/grohtml/post-html.cpp:
+ * src/devices/grolbp/lbp.h:
+ * src/devices/gropdf/TODO:
+ * src/devices/gropdf/gropdf.1.man:
+ * src/devices/gropdf/gropdf.pl:
+ * src/devices/xditview/ChangeLog:
+ * src/devices/xditview/xditview.c:
+ * src/libs/libdriver/input.cpp:
+ * src/libs/libgroff/glyphuni.cpp:
+ * src/preproc/eqn/eqn.1.man:
+ * src/preproc/grn/gprint.h:
+ * src/preproc/grn/main.cpp:
+ * src/preproc/html/pre-html.cpp:
+ * src/preproc/preconv/preconv.cpp:
+ * src/preproc/tbl/table.cpp:
+ * src/roff/groff/pipeline.c:
+ * src/roff/groff/tests/substring_works.sh:
+ * src/roff/groff/tests/
+ use_point_size_escape_with_single_digit_arg.sh:
+ * src/roff/troff/div.cpp:
+ * src/roff/troff/input.cpp:
+ * src/roff/troff/troff.1.man:
+ * src/utils/grog/grog.pl:
+ * src/utils/indxbib/indxbib.cpp:
+ * src/utils/tfmtodit/tfmtodit.1.man:
+ * tmac/doc-old.tmac:
+ * tmac/doc.tmac:
+ * tmac/groff_man.7.man.in:
+ * tmac/hyphen.fr: Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?63589>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2023-02-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Drop XFAIL test. It was written with an unclear
+ understanding of how DWB (AT&T) and Heirloom Doctools troff
+ behaved. The individual checks might come back, modified.
+
+ * src/preproc/tbl/tests/table-lacks-spurious-top-border.sh:
+ Delete.
+
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Drop it.
+ (tbl_XFAIL_TESTS, XFAIL_TESTS): Drop now empty assignment and
+ unnecessary update, respectively.
+
+2023-02-04 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+ Update gnulib submodule
+
+ gnulib now points on sha1 4e9fcc7b84fcac07a3e5a3cd5f66d1ff320dc8e8
+
+2023-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix bugs using boxes or vertical rules at table edges on
+ nroff devices, particularly when combined with region or column
+ expansion.
+
+ * src/preproc/tbl/table.h (class table): Add `GAP_EXPAND`
+ enumeration constant. James Clark seems to have designed GNU
+ tbl carefully to avoid distinguishing region expansion from
+ column expansion in a categorical way, but I needed a way for
+ formatting-time logic to know which was in use. (Column
+ expansion, the "x" modifier, expands columns--i.e., text.
+ Region expansion expands [or compresses] the _gaps_ between
+ columns.)
+ * src/preproc/tbl/main.cpp (process_options): Set `GAP_EXPAND`
+ flag in table if "expand" region option seen.
+ * src/preproc/tbl/table.cpp: Add new macro `LEFTOVER_FACTOR_REG`
+ to name a new roff register for the remainder of gap-expansion
+ space when the amount of space available for expansion is
+ divided by the number of gaps.
+ (table::compute_overall_width): If _not_ expanding a table in
+ either respect and in nroff mode, reduce line length by 1n for
+ each of any left and right border (because the vertical lines
+ eat character cells). This prevents bordered or boxed tables
+ from being overset even when they use neither expansion feature.
+ (table::compute_separation_factor): If gap-expanding a table,
+ store any remainder from the division used to compute the
+ separation factor into the new `LEFTOVER_FACTOR_REG`.
+ (table::compute_column_positions): Insert that remainder into
+ the gap before the last (rightmost) column of the table. This
+ _could_ be done more elegantly by spreading each en in a
+ symmetric way across a subset of the gaps. (It is necessarily a
+ subset by the pigeonhole principle.) But it didn't seem worth
+ the effort for a feature (region expansion) that few users
+ employ. (Usually what you want is the "x" column modifier.)
+ Alternatively, "forget it, Jake--it's a terminal emulator".
+
+ * src/preproc/tbl/tbl.am (tbl_XFAIL_TESTS): Remove now-passing
+ tests.
+
+ Fixes <https://savannah.gnu.org/bugs/?63640> and
+ <https://savannah.gnu.org/bugs/?63749>.
+
+2023-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::compute_column_positions):
+ Stop multiplying the gaps at the left and right edges of a table
+ {which occur when it is boxed or has a leading and/or trailing
+ vertical line} by the column separation factor. Only interior
+ column gaps should be spread. This change prevents tables using
+ the "expand" region option from being overset (exceeding the
+ line length), but might not (yet) fully expand to that length on
+ low-resolution devices due to integer roundoff.
+
+2023-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::compute_total_separation)
+ (table::compute_separation_factor, table::compute_widths): Add
+ comments to generated roff output to assist the mystified user.
+
+2023-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Refactor.
+
+ * src/preproc/tbl/table.cpp:
+ * src/preproc/tbl/table.h: Rename `compute_expand_width` to
+ `compute_overall_width`, since this member function is used on
+ _all_ tables, not just those undergoing column or gap expansion.
+ For instance, in a post-groff 1.22.4 development, it throws a
+ diagnostic if an unexpanded table overruns the line length.
+ * src/preproc/tbl/table.cpp (table::compute_widths): Update call
+ site of `compute_overall_width`.
+ * src/preproc/tbl/table.cpp: Split the roff register behind the
+ `EXPAND_REG` C++ preprocessor macro into two, adding
+ `AVAILABLE_WIDTH_REG`. Annotate the distinction.
+ (compute_overall_width): Annotate. Move and conditionalize
+ logic so as not to produce as much unnecessary roff output.
+
+2023-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (main): Avoid reading from invalid
+ memory upon failure to open an input file.
+
+ Fixes <https://savannah.gnu.org/bugs/?63751>.
+
+2023-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/lex.cpp (get_delimited_text): Avoid reading
+ from invalid memory when throwing diagnostic. Duplicate
+ `filename` string, then free it on all paths out of function.
+
+ Fixes <https://savannah.gnu.org/bugs/?63214>.
+
+2023-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Add more tests.
+
+ * src/preproc/tbl/tests/boxes-and-vertical-rules.sh:
+ * src/preproc/tbl/tests/expand-region-option-works.sh:
+ * src/preproc/tbl/tests/x-column-modifier-works.sh: Do it.
+
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run tests.
+ (tbl_XFAIL_TESTS): Add; future changes will resolve these.
+
+2023-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::compute_column_positions):
+ If a table has "left separation" (it is boxed, or has a vertical
+ rule on the left-hand side), increase the first column's start
+ register value by 1n, for symmetry with the right-hand size.
+
+ * src/preproc/tbl/tests/check-horizontal-line-length.sh:
+ * src/preproc/tbl/tests/check-line-intersections.sh:
+ * src/preproc/tbl/tests/check-vertical-line-length.sh: Update
+ output expectations.
+
+ * src/preproc/tbl/tbl.am (tbl_XFAIL_TESTS): Remove now-passing
+ test.
+
+ See <https://savannah.gnu.org/bugs/?61597> for background.
+
+2023-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::compute_total_separation):
+ Trivially refactor; rename loop indices so it's obvious which
+ dimension of a matrix they're referring to.
+
+2023-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::determine_row_type)
+ (table::compute_widths, table::do_row): Boolify some local ints.
+
+2023-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Refactor handling of vertical lines in format. Validate
+ input more strictly. Add diagnostics when vertical lines are
+ redundant with box borders.
+
+ * src/preproc/tbl/main.cpp (process_format): Shift diagnostic
+ about excess vertical lines in a sequence at the beginning of a
+ row description to later, after the first proper column
+ descriptor has been interpreted. Normalize a sequence of more
+ than two consecutive vertical lines to 2 when they occur at the
+ beginning of a row description. Unconditionally update
+ `list->vline` and reset `vline_count` once we start looking for
+ modifiers, since we know we've finished any sequence of vertical
+ lines, and at the end of a row definition. Rename and retype
+ loop variable int `success` to Boolean
+ `is_valid_modifier_sequence`. Drop now-invalid assertion.
+ * src/preproc/tbl/table.cpp (table::add_vlines): Throw new
+ diagnostics when vertical lines are redundant with box borders.
+ Add assertion to ensure we got a valid vertical line value (0,
+ 1, or 2) from `process_format`. Throw these only once per table
+ format, not for every row.
+
+2023-01-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (process_table): Trivially refactor.
+ Rename `form` to `fmt` to imply "format", not "form".
+
+2023-01-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (process_format): Throw error
+ diagnostic if more than 2 vertical lines are specified at the
+ beginning of a row definition.
+
+ Fixes <https://savannah.gnu.org/bugs/?63731>.
+
+2023-01-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (process_format): Recast diagnostic
+ message to refer to character by its Unicode name and generalize
+ to accurately cover additional circumstance of excess '|'
+ symbols at end of row definition.
+
+2023-01-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/ms.ms: Remove redundant initializations.
+
+2023-01-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/ms.ms: Define appropriate hyphen-minus mapping on 'cp1047'
+ output device.
+
+2023-01-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (TE): Enable no-space mode after outputting the
+ display distance vertically, replacing any inter-paragraph
+ distance that might follow.
+
+2023-01-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Fix misleading diagnostic message.
+
+ * src/preproc/html/pre-html.cpp (main): The suggestion should be
+ to re-run the formatter (groff, troff), not "pre-grohtml", with
+ a different output driver since the document may be malformed.
+
+2023-01-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (process_format): Fix code hygiene
+ nit: nullify `list` pointer after freeing its target.
+
+2023-01-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Really fix Savannah #63449.
+
+ * src/preproc/tbl/main.cpp (process_format): "Or" on the
+ `HAS_TOP_VLINE` flag if the format specification begins with a
+ "|"; the beginning is a separate state in the FSM used to parse
+ the description. I missed it in commit 0e93ab4102, 1 December.
+
+ Fixes <https://savannah.gnu.org/bugs/?63449>.
+
+2023-01-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/tests/\
+ do-not-overdraw-page-top-in-nroff-mode.sh: Correct erroneous
+ check of test output, and add two more test cases.
+
+2023-01-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Move the saving of the hyphenation mode from
+ the "top level" to...
+ (mY): ...this new macro.
+ (SY, mQ, MR): Call `mY` before disabling hyphenation.
+
+ Problem introduced by me in commit 096c2f0567, 16 February.
+ "an-ext.tmac" gets sourced by "an.tmac" before any
+ command-line setting of the `HY` register is handled, so (for
+ groff) the stored hyphenation mode was the default for the
+ language, not reflecting user disablement. The synopsis macros,
+ which do not have an alternate implementation in "an.tmac" for
+ leverage of groff features, were causing hyphenation to be
+ resurrected (after `YS`) even if the user had disabled it.
+ Saving the hyphenation mode anew upon entry to these macros is
+ arguably inefficient, but it is more correct since a man page
+ could conceivably manipulate the automatic hyphenation mode
+ {even if that's not recommended outside of tbl(1) text blocks}.
+
+2023-01-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add regression test for hyphenation getting wrongly
+ restored by `YS`, `ME`, `UE`, and `MR` macros.
+
+ * tmac/tests/an_HY-register-works.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2023-01-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (Sh, Ss): Narrow scope of font remappings
+ lexically and restrict remapping to the heading font family (if
+ any) to avoid undesired remapping of fonts in page headers if,
+ say, a (sub)section heading begins just prior to a page
+ break--which is ugly anyway and should be avoided, but the
+ package has no keep macros and solving that problem in an
+ automatic way promises to be complex.
+
+2023-01-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (MT, UR): Throw style warning if macro called
+ without (exactly one) argument.
+
+2022-12-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/groff-man-pages.pdf): Set (sub)section
+ headings in Helvetica bold in compiled man pages, as a test and
+ demonstration of the `HF` feature's application to both man(7)
+ and mdoc(7) documents.
+
+2022-12-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Support `HF` string.
+
+ * tmac/doc.tmac (initialization): Add logic supporting `HF`
+ string just as our man(7) implementation does. If the font name
+ ends with `B` (as the default does), set
+ `doc-remap-I-style-in-headings` register and extract font
+ family, which can be empty (as is the default).
+ * tmac/mdoc/doc-common (Sh, Ss): If
+ `doc-remap-I-style-in-headings` register set, perform (and
+ unwind) font remapping of italic to bold-italic face.
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Define `doc-Sh-font` in terms of `HF`.
+
+ * tmac/tests/doc_heading-font-remapping-works.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ * tmac/groff_mdoc.7.man (Options): Document it.
+ * NEWS: Update item.
+
+ Fixes last part of <https://savannah.gnu.org/bugs/?63046>.
+
+2022-12-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Revise "fallback" character definitions in several
+ respects for Unicode characters from General Punctuation block.
+
+ * tmac/fallbacks.tmac: Comment out fallbacks for U+200B, U+2010,
+ U+2011, and U+201[89CD], due to ineffectuality or apparent groff
+ bugs. Redefine U+2012 fallback to include hair space (\^)
+ around synthetic figure dash. Redefine U+2016 to use `\[ba]`
+ special characters instead of ordinary `|` characters to dodge
+ possible character translations by user.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?63354>. Thanks to
+ Dave Kemper for the (multifarious) discussion.
+
+2022-12-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Invoking groff, Built-in Registers):
+ * man/groff.7.man (Writable predefined registers):
+ * src/roff/groff/groff.1.man (Environment):
+ * src/roff/troff/troff.1.man (Environment): Replace erroneous
+ reference to ctime(3) with localtime(3).
+
+ Fixes <https://savannah.gnu.org/bugs/?63509>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-12-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Fix potential problem(s) in trap handler.
+
+ * src/roff/groff/tests/smoke-test_html_device.sh: Move call of
+ `cleanup` function from end of script to after the tests that
+ generate temporary files have been run, and before script
+ possibly exits with status 77 to skip some checks. Within trap
+ handler, mask trapped signals while running handler.
+ (cleanup): Reset trap dispositions to default after removing
+ files; once the temporary files are gone, we no longer need a
+ trap handler. One might already be running however, and this
+ ensures that its "suicide" ("kill -s INT $$") will succeed.
+
+2022-12-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Support `FT` register.
+
+ * tmac/doc.tmac (initialization): Add logic supporting `FT`
+ register just as our man(7) implementation does.
+ * tmac/mdoc/doc-common (doc-set-up-titles): Plant footer trap in
+ validated user-requested location.
+ * tmac/groff_mdoc.7.man (Options): Document it.
+ * NEWS: Update item.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?63046>.
+
+2022-12-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Fix code style nit: use `as` requests to
+ avoid overlong input lines.
+
+2022-12-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac: Inform user we're ignoring their "-rD1" setting
+ if also formatting HTML; parallels groff man(7) behavior.
+
+2022-12-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac: Trivially refactor. Relocate handling of `D`
+ command-line register to prepare for greater synchronization
+ with groff man(7).
+
+2022-12-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp: Trivially refactor. Rename
+ {portion of} internal register to include an interword hyphen
+ for readability.
+
+2022-12-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Change default line length to 6.5 inches.
+
+ * tmac/s.tmac (par@load-init): Do it.
+
+ * doc/groff.texi (ms Document Control Settings):
+ * doc/ms.ms (Document control settings):
+ * tmac/groff_ms.7.man (Document control settings): Document it.
+
+ * tmac/tests/s_honor-MINGW-when-two-columns.sh:
+ * tmac/tests/s_mark-column-start-correctly.sh: Update test
+ expectations.
+
+ * NEWS: Add item.
+
+2022-12-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (TH): Relocate `an-break-body-text` trap to be
+ one half-inch above footer (instead of twice the footer
+ distance). I reason that anyone who customizes `FT` is doing so
+ to overprint some kind of material at the bottoms of pages, or
+ simply to make the margin larger. (One then wonders why we
+ don't have an `HD` register for the top.) Also remove register
+ when done with it.
+ * tmac/groff_man.7.man.in (Options) <FT>: Document this.
+
+2022-12-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (TH): Trivially refactor. Rename
+ `an-footer-location` to `an*footer-location` and set page traps
+ in order descending the page.
+
+2022-12-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Support `X` register.
+
+ * tmac/doc.tmac (initialization): Add logic supporting `X`
+ register just as our man(7) implementation does.
+ * tmac/groff_mdoc.7.man (Options): Document it.
+ * NEWS: Update item.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?63046>.
+
+2022-12-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Add unit test for `X` register.
+
+ * tmac/tests/doc_X-register-works.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-12-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac (Nm): Fix `if` -> `ie` typo/thinko.
+
+ Fixes <https://savannah.gnu.org/bugs/?63527>. Thanks to John
+ Gardner for the report.
+
+2022-12-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/doc_Nm-works.sh: Add more checks.
+
+2022-12-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/smoke-test_html_device.sh: Add checks for
+ inlining of images when tbl(1) or eqn(1) used.
+
+2022-12-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/andoc.tmac (reload-man): Unplant `doc-break-body-text`
+ trap, added in commit 892703b17e, 6 September. Its survival
+ into man(7) pages didn't seem to cause any problems but I have
+ no confidence that will remain true forever.
+
+2022-12-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (initialization): Fix problem with `FT` register
+ validation. Small but valid values were being rejected due to
+ inappropriate use of scaling operator. Also throw user a bone
+ by expressing what size '1v' is for the output device, in basic
+ units.
+
+2022-12-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man, mdoc]: Fix Savannah #63500. Support use of `P` (initial
+ page number) register when batch rendering, regardless of
+ switching macro packages between man(7) and mdoc(7) or setting
+ of `C` (continuous numbering) register. (`P` without `C` means
+ "start numbering each rendered document at \n[P]".)
+
+ * tmac/an.tmac (an-end): Call `an*break-page-with-new-number`
+ instead of invoking `bp`.
+ (an*break-page-with-new-number): If `P` is set and `C` is not,
+ use value of `P` as the next page number.
+ (TH): If `C` register is set, remove `P` register after ending a
+ previous document.
+ (initialization): If `P` is set, assign the page number using
+ the `pn` request if the transition to the first formatted page
+ has not yet occurred; otherwise update page number register `%`
+ directly. Also ignore it with diagnostic if `ps4html` register
+ {for grohtml's internal use} is set. Add explanatory comment.
+
+ * tmac/mdoc/doc-common (Dd): If `C` register is set, remove `P`
+ register after ending a previous document.
+ (doc-end-macro): Call `doc-break-page-with-new-number` instead
+ of invoking `bp`.
+ (doc-break-page-with-new-number): If `P` is set and `C` is not,
+ use value of `P` as the next page number.
+ * tmac/doc.tmac (initialization): If `P` is set, assign the page
+ number using the `pn` request if the transition to the first
+ formatted page has not yet occurred; otherwise update page
+ number register `%` directly. Also ignore it with diagnostic if
+ `ps4html` register (for grohtml's internal use) is set. Add
+ explanatory comment.
+
+ Fixes <https://savannah.gnu.org/bugs/?63500>.
+
+2022-12-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Support `P` register.
+
+ * tmac/doc.tmac (initialization): Add logic supporting `P`
+ register just as our man(7) implementation does.
+ * tmac/groff_mdoc.7.man (Formatting with groff, troff, and
+ nroff): Document it.
+ * NEWS: Update item.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?63046>.
+
+2022-12-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Add unit tests for man/mdoc `P` register.
+
+ * tmac/tests/an_P-register-works.sh:
+ * tmac/tests/andoc_P-register-works.sh:
+ * tmac/tests/doc_P-register-works.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run tests.
+
+2022-12-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man, mdoc]: Refactor. Rename a Boolean register to more
+ clearly communicate its purpose. This also reverses its sense.
+
+ * tmac/an.tmac (TH): Rename `an-is-first-page-of-document` to
+ `an*need-titles-reset`. Drop redundant store. Reverse sense of
+ test.
+ (initialization): Initialize it to zero.
+
+ * tmac/mdoc/doc-common (Dd): Rename
+ `doc-is-first-page-of-document` to `doc-need-titles-reset`.
+ Drop redundant store. Reverse sense of test.
+ (initialization): Initialize it to zero.
+
+2022-12-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Add future regression test for header/footer
+ mishandling that wasn't already covered (not a live bug; was
+ exposed by attempted refactoring).
+
+ * tmac/tests/andoc_check-an-to-doc-transition.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-12-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man, mdoc]: Trivially refactor.
+
+ * tmac/an.tmac (an-start-new-document): Rename this...
+ (an*break-page-with-new-number): ...to reflect its reduced
+ responsibility.
+
+ * tmac/mdoc/doc-common (doc-start-new-document): Rename this...
+ (doc-break-page-with-new-number): ...to reflect its reduced
+ responsibility.
+
+2022-12-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man, mdoc]: Refactor to separate page number management from
+ header trap management.
+
+ * tmac/an.tmac (an-start-new-document): Stop removing
+ `an-header` trap.
+ (TH): Clear the trap here even if not continuously rendering,
+ and call `an-start-new-document`.
+
+ * tmac/mdoc/doc-common (doc-start-new-document): Stop removing
+ `doc-header` trap.
+ (Dd): Clear the trap here even if not continuously rendering,
+ and call `doc-start-new-document`.
+
+2022-12-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common: Refactor for better parallelism with our
+ man(7) implementation and to prepare for a synchronized change
+ to both.
+ (Dd): Move open-coded (inlined) operations from here...
+ (doc-start-new-document): ...to this new macro.
+ (doc-end-macro): Drop unnecessary register assignment. `Dd`
+ takes care of it if there is a subsequent mdoc(7) document.
+
+2022-12-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix off-by-one error in generated diagnostic message.
+
+ * src/preproc/tbl/table.cpp: Define new preprocessor macro,
+ `PREVIOUS_PAGE_REG`.
+ (table::init_output): Compute value for register named using
+ `PREVIOUS_PAGE_REG`, use it in diagnostic, and then remove it.
+ Also fix verb tense in message.
+
+2022-12-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Expose the fact of a table's boxedness via a troff
+ register so that macro packages can make more intelligent
+ decisions about space requirements (since box borders occupy
+ significant space on nroff devices).
+
+ * src/preproc/tbl/table.cpp: Define new preprocessor macro,
+ `IS_BOXED_REG`.
+ (table::do_top): Initialize "boxedness" register.
+
+2022-12-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (TH): Clarify computation and diagnostic message.
+
+2022-12-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix Savannah #61878.
+
+ * src/preproc/tbl/table.cpp: Define new preprocessor macro,
+ `STARTING_PAGE_REG`.
+ (table::define_bottom_macro): Have the formatter issue a warning
+ if an unkept, boxed table ends on a different page than it
+ began.
+ (table::do_top): Save current page number when table begins.
+
+ Fixes <https://savannah.gnu.org/bugs/?61878>.
+
+2022-12-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Regression-test Savannah #61878.
+
+ * src/preproc/tbl/tests/\
+ warn-on-long-boxed-unkept-table.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+2022-12-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp: Write comments to generated output;
+ these correspond to functions in this file and to major
+ operations of table construction.
+ (init_output, compute_widths, define_bottom_macro, do_row)
+ (do_top, do_bottom): Do it.
+
+2022-12-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Trivially refactor. Rename class `constant_int_reg` to
+ `readonly_register`. Say "readonly" instead of "const" to
+ try to avoid confusion with C++ constness. Drop "int" because
+ integer-valued registers are the norm, not the exception.
+
+ * src/roff/troff/column.cpp (init_column_requests):
+ * src/roff/troff/div.cpp (init_div_requests):
+ * src/roff/troff/input.cpp (top level, init_input_requests):
+ * src/roff/troff/node.cpp (init_node_requests):
+ * src/roff/troff/reg.h: Do it.
+
+2022-12-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Trivially refactor. Rename class `constant_reg` to
+ `readonly_text_register`. Say "readonly" instead of "const" to
+ try to avoid confusion with C++ constness. Say "text" because
+ this class is _mostly_ used for interpolation of string-valued
+ registers like the version registers `.x`, `.y` and `.Y`.
+ Nevertheless there are some abuses (apparently because the
+ constructors for register classes don't accept integer
+ parameters for initialization--why?).
+
+ * src/roff/troff/input.cpp (top level)
+ (readonly_text_register::readonly_text_register)
+ (readonly_text_register::get_string)
+ (main, init_registers, init_requests): Do it.
+
+2022-12-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Trivially refactor. Rename `number_reg_dictionary` to
+ `register_dictionary`. It's shorter _and_ non-abbreviated _and_
+ matches our documentation.
+
+ * src/roff/troff/column.cpp (init_column_requests):
+ * src/roff/troff/div.cpp (page_number, init_div_requests):
+ * src/roff/troff/env.cpp (print_env, init_env_requests)
+ (init_hyphen_requests):
+ * src/roff/troff/input.cpp (length_request)
+ (interpolate_number_format, do_register, do_if_request, main)
+ (init_registers, init_input_requests):
+ * src/roff/troff/node.cpp (get_register, init_node_requests):
+ * src/roff/troff/reg.cpp (top level, define_number_reg)
+ (inline_define_reg, alter_format, remove_reg, alias_reg)
+ (rename_reg, print_number_regs):
+ * src/roff/troff/reg.h: Do it.
+
+2022-12-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add regression test.
+
+ * tmac/tests/an_link-trailing-text-hugs-previous.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-12-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/fallbacks.tmac: Really use troff-mode fallbacks only on
+ typesetting devices; because this macro file is loaded so early,
+ we cannot rely on ".if t". Thanks to Dave Kemper for the
+ discussion in Savannah #63354.
+
+2022-12-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Use more mnemonic register names, thanks to
+ the recent freeing up of some name space.
+ - mJ -> mH: saved automatic hyphenation mode
+ - mX -> mE: formatting in EX/EE context (Boolean)
+
+2022-12-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdf.tmac: Drop deletion of unused string `PDFHREF.TEXT`.
+
+2022-12-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (an-end, AT, UC, DT, PD, SH, IP, BI, BR, IB, IR)
+ (RB, RI, OP, an*end-hyperlink, MR): Refactor; "nop"ify macros
+ that produce formatted output or call other macros using string
+ interpolations--except where we can't: see Savannah #63470.
+
+2022-12-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (R): Drop macro definition, which implements a
+ hack for people who try to use "R" as a font style macro. This
+ doesn't seem to happen much in actual practice (though perhaps
+ the diagnostic this hack produces is responsible for suppression
+ of the mistake). Retaining it interferes with the
+ "nop"-ification of this macro file.
+ * NEWS: Add item.
+
+2022-12-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Use truly traditional hyphenation mode on
+ non-groff-compatible formatters.
+
+2022-12-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Update test coverage and expectations.
+
+ * tmac/tests/an_ME-punct-hyphenates.sh: Test both "an.tmac" and
+ "an-ext.tmac" implementations of `ME`.
+ * tmac/tests/an_UE-punct-hyphenates.sh: Test both "an.tmac" and
+ "an-ext.tmac" implementations of `UE`.
+ * tmac/tests/an_UE-breaks-before-long-URIs.sh: Update test
+ expectations. I appear to have inadvertently fixed some
+ inelegant rendering.
+
+2022-12-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Rename to reflect code reorganization.
+
+ * tmac/tests/an-ext_ME-punct-hyphenates.sh:
+ * tmac/tests/an-ext_MT-body-hyphenates.sh:
+ * tmac/tests/an-ext_UE-breaks-before-long-URIs.sh:
+ * tmac/tests/an-ext_UE-punct-hyphenates.sh:
+ * tmac/tests/an-ext_UR-body-hyphenates.sh: Rename these...
+ * tmac/tests/an_ME-punct-hyphenates.sh:
+ * tmac/tests/an_MT-body-hyphenates.sh:
+ * tmac/tests/an_UE-breaks-before-long-URIs.sh:
+ * tmac/tests/an_UE-punct-hyphenates.sh:
+ * tmac/tests/an_UR-body-hyphenates.sh: ...to these.
+
+ * tmac/tmac.am (tmac_TESTS): Reflect renames.
+
+2022-12-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Remove groff-feature-dependent code for
+ hyperlink management, greatly reducing the size of the file,
+ which we permissively license and encourage people to copy
+ around. Drop register definitions corresponding to
+ groff-specific output device names. Drop definition and use of
+ `mL` and `mR` strings for angle brackets; no observable change
+ on non-groff formatters. Recognize `mG` register to enable
+ testing of these macros even if the formatter is groff.
+ (mV): Radically simplify. This internal "back-end" for `MT` and
+ `UR` now just stores its argument in a string, `m1`.
+ (mQ): Radically simplify. This internal "back-end" for `ME` and
+ `UE` now just disables automatic hyphenation, formats the saved
+ `m1` string between angle brackets, suffixes it with the
+ optional argument, and restores automatic hyphenation.
+ (UR, MT): Call `mV` with one argument, not nine.
+ (UE, ME): Call `mQ` with one argument, not nine.
+
+ * tmac/tests/an-ext_MR-works.sh: Add test of this file's
+ simplified `MR` implementation.
+ * tmac/tests/an-ext_MT-works.sh:
+ * tmac/tests/an-ext_UR-works.sh: Move tests of groff-specific
+ hyperlink output from here...
+ * tmac/tests/an_MT-works.sh:
+ * tmac/tests/an_UR-works.sh: ...to these new files.
+ * tmac/tests/an_MR-works.sh:
+ * tmac/tests/an_MT-works.sh:
+ * tmac/tests/an_UR-works.sh: Add tests for valid HTML formatting
+ of hyperlinks, which experience shows is a bit fragile in the
+ face of diversion manipulation and output line continuation.
+
+ * tmac/tmac.am (tmac_TESTS): Run new tests.
+
+2022-12-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Support `mG` register: clear it to force the
+ loading of this file's macros even if they have an
+ implementation in tmac/an.tmac and the formatter claims groff
+ compatibility. This is to ease these macros' testing under
+ groff and keep the implementations here simple.
+ * tmac/an.tmac: Initialize `mG` register to 1 if not set on
+ command line.
+
+2022-12-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Initialize `mX` register.
+
+2022-12-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Define `mC` string (constant-width typeface
+ used by `EX`/`EE` macros) as `R` in nroff mode. Thanks to
+ Russ Allbery for prompting me to think more about the
+ limitations of Solaris troff. Implementations do varying
+ things with the "previous" font restored by `\fP` or an
+ unargumented `.ft` if a requested font is not found.
+
+2022-11-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix Savannah #63449.
+
+ * src/preproc/tbl/table.h (class table): Add new enumeration
+ constants for use with `flags` member variable: `HAS_TOP_VLINE`
+ and `HAS_TOP_HLINE`, which track properties of the table.
+ Unlike others, these have no correspondence to table region
+ options.
+ * src/preproc/tbl/main.cpp (process_format): Add new local
+ Boolean to track whether we're interpreting a format for the
+ first row. Use this to "or" on the `HAS_TOP_VLINE` or
+ `HAS_TOP_HLINE` flags if "|" or [_-] are encountered in the
+ first row's format, as appropriate.
+ (process_data): "Or" on `HAS_TOP_HLINE` if a single or double
+ horizontal line is used as the first row's data.
+ * src/preproc/tbl/table.cpp (do_top): On nroff mode devices, add
+ one vee of space above the table if we're going to be drawing an
+ unintersected vertical rule above the table's top.
+
+ Fixes <https://savannah.gnu.org/bugs/?63449>.
+
+2022-11-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Regression-test Savannah #63449.
+
+ * src/preproc/tbl/tests/\
+ do-not-overdraw-page-top-in-nroff-mode.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+2022-11-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (struct input_entry_format)
+ (input_entry_format::input_entry_format)
+ free_input_entry_format_list, process_format): Trivially
+ refactor. Rename `pre_vline` to `vline_count`.
+
+2022-11-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp
+ (vertical_rule::contribute_to_bottom_macro, table::print)
+ (table::init_output, table::divide_span)
+ (table::compute_expand_width, table::define_bottom_macro)
+ (table::do_bottom): Produce roff output that is more readable,
+ for maintainability. Indent control lines inside macro
+ definitions. Standardize form of `if`, `ie`, and `el` requests.
+ Some output will not be indented because it is produced within
+ narrowly-scoped C++ functions (set_troff_location,
+ table::print_single_hline, table::print_double_hline,
+ table::do_row), I haven't verified that each one is called from
+ a consistent troff indentation level, and I'm not sure it's a
+ win to parameterize those functions in the indentation level.
+
+2022-11-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix Savannah #61909.
+
+ * src/preproc/tbl/table.cpp (SAVED_INTER_WORD_SPACE_SIZE)
+ (SAVED_INTER_SENTENCE_SPACE_SIZE): Add new preprocessor macros.
+ (block_entry::do_divert): Restore saved inter-word and
+ inter-sentence space when formatting a text entry.
+ (table::init_output): When a table region begions, save the
+ values of inter-word and inter-sentence space. Add request to
+ the reset macro to restore saved inter-word and inter-sentence
+ space when leaving table region.
+ (table::do_top): Set inter-sentence space to be equal to
+ inter-word space. This way spaces are "literal" in ordinary
+ table extries (but not text blocks).
+
+ Fixes <https://savannah.gnu.org/bugs/?61909>.
+
+2022-11-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Regression-test Savannah #61909.
+
+ * src/preproc/tbl/tests/\
+ save-and-restore-inter-sentence-space.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+2022-11-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Suppress line numbering when formatting tables, and
+ restore it afterward.
+
+ * src/preproc/tbl/table.cpp: Revert much of commit b69062693's
+ {2011-07-20} changes to this file. They were too complex for me
+ to understand, and permitted Savannah #60140 to persist (or
+ caused it).
+ (ROW_START_LINE_REG, ROW_SAVE_LINE_REG, ROW_MAX_LINE_REG)
+ (REPEATED_NM_SET_MACRO, REPEATED_NM_SUS_MACRO): Drop
+ preprocessor macros.
+ (SAVED_NUMBERING_LINENO, SAVED_NUMBERING_SUPPRESSION_COUNT): Add
+ new preprocessor macros.
+ (table::init_output, table::print_single_hline)
+ (table::print_double_hline, table::define_bottom_macro)
+ (table::do_row, table::do_top, table::do_bottom): Drop old
+ logic.
+
+ (table::init_output): When the table begins, save the current
+ line number register `ln` and the count of remaining lines to be
+ suppressed (the new `.nn` register). Then suppress numbering
+ for the next 2 billion+ lines of output, with a groveling
+ apology to the elegance police.
+ (table::do_bottom): Restore saved value of `.nn`. If numbering
+ was active (even if suppressed), restore it with `nm` request.
+ If it wasn't, disable it, in case it was turned on inside the
+ table region.
+
+ Fixes <https://savannah.gnu.org/bugs/?60140>. Thanks to Hans
+ Bezemer for noting the practical significance of this bug.
+
+2022-11-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Regression-test Savannah #60140.
+
+ * src/preproc/tbl/tests/save-and-restore-line-numbering.sh: Do
+ it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+2022-11-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Implement new `.nn` register to report the remaining
+ count of lines to have their numbering suppressed.
+
+ * src/roff/troff/env.h (class environment): Declare new member
+ function `get_no_number_count()`.
+ * src/roff/troff/env.cpp (get_no_number_count): Define new
+ member function, returning value of member variable
+ `no_number_count`.
+ (init_env_requests): Define new ".nn" register and attach it to
+ `get_no_number_count()`.
+
+ * doc/groff.texi (Miscellaneous): Document it. Include example
+ of use to determine whether current output line will be
+ numbered. Also clarify meaning of register; `.nn` is not
+ decremented except when output line numbering is enabled.
+ * man/groff.7.man (Read-only registers): Document it.
+
+ * src/roff/groff/tests/dot-nn_register_works.sh: Test it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+ * NEWS: Add item.
+
+ See <https://lists.gnu.org/archive/html/groff/2022-11/\
+ msg00153.html>.
+
+2022-11-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/fallbacks.tmac: Comment out four of the fallback
+ character definitions for (preconv'd) Unicode character input
+ added to address Savannah #58930 (corresponding to \[dg], \[dd],
+ \[%0], and \[rn]; they are failing for not yet understood
+ reasons involving "macros" attached to groff character info
+ structs, and the semantics of what it means for a character to
+ "exist" per the 'c' conditional operator. Fixes regression when
+ using "tty-char.tmac" (which nroff loads by default). Problem
+ introduced by me in commit 132182bd71, 23 October. The hope is
+ to resolve this issue post-groff 1.23.0. Thanks to Dave Kemper
+ for the report and discussion in Savannah #63332.
+
+2022-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac (SY, YS, mV): Remove `mA`, `mI`, and `mT`
+ registers when done with them.
+
+2022-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/node.h (character_exists):
+ * src/roff/troff/node.cpp (character_exists): Boolify.
+
+2022-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [doc]: Add make(1) dependency.
+
+ * doc/doc.am (doc/groff-man-pages.pdf): Add dependency on our
+ FreeEuro font since we embed it.
+
+2022-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Refactor generation of "freeeuro.pfa" to make more
+ economical use of existing infrastructure, per a suggestion from
+ Deri James. This also puts the file where gropdf's "download"
+ file can find it when running it in a separate build directory.
+ We use it to generate "groff-man-pages.pdf".
+
+ * font/devps/freeeuro.pfa: Rename this...
+ * font/devps/freeeuro.ps: ...to this. We can now use the suffix
+ rule that also applies to "symbolsl.ps" and "zapfdr.ps".
+
+ * font/devps/devps.am (DEVPSFONTFILES): Move "freeeuro.pfa" from
+ here...
+ (DEVPSFONTFILES_GENERATED): ...to here.
+ (EXTRA_DIST): Ship the "new" "freeeuro.ps" file.
+
+2022-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devps/psstrip.sed: Stop stripping comment lines in
+ general instead of preserving only ones that use the form in the
+ Document Structuring Conventions. This way we won't strip
+ copyright notices, like Werner Lemberg's in the FreeEuro font.
+ Thanks to Deri James for pointing this out.
+
+2022-11-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ tmac/an-ext.tmac: Refactor to reduce code size.
+
+ * tmac/an-ext.tmac: Refactor to reduce code size. `UE` and `ME`
+ have nearly identical implementations so...
+
+ (mQ): Define new macro to perform the requisite actions, and...
+
+ (UE, ME): Make these into wrappers calling mQ.
+
+2022-11-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add unit tests for `MT/ME` and `UR/UE`.
+
+ * tmac/tests/an-ext_MT-works.sh:
+ * tmac/tests/an-ext_UR-works.sh: Do it.
+
+ * tmac/tmac.am (tmac_TESTS): Run tests.
+
+2022-11-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl: Throw warning if paper format is
+ unrecognized.
+
+2022-11-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (Msg): Align more closely with
+ diagnostic message format prescribed by GNU Coding Standards:
+ emit space (only) prior to message severity.
+
+2022-11-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/meref.me.in: Drop unnecessary initialization parameters
+ from document. The line and title length do not need to be set
+ in troff mode; the document lays out fine for a variety of paper
+ formats if these are not forced to 6.5 inches. Also drop
+ redundant initialization of `pp` register.
+
+2022-11-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Fix Savannah #63377.
+
+ * tmac/doc.tmac (Nm): Properly leverage new
+ `doc-in-name-section` variable. Set page topic `doc-topic-name`
+ to the first encountered argumentful `Nm` call in the "Name"
+ section while handling other "Name" section concerns, instead of
+ later after deciding we're not in the "Synopsis" section.
+ Problem caused by me when fixing antediluvian mdoc bug in commit
+ 0d85615c62, 5 November.
+
+ Fixes <https://savannah.gnu.org/bugs/?63377>. Thanks to John
+ Gardner for the report.
+
+2022-11-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Add tests for `Nm` macro.
+
+ * tmac/tests/doc_Nm-works.sh: Do it. Test regression reported
+ in Savannah #63377. Also ensure that we handle the case where
+ multiple `Nm` items are declared in the "Name" section (as might
+ happen in library man pages).
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-11-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/papersize.tmac: Improve integration with mm(7) macro
+ package. If a paper format has been selected, set `W` register
+ to new line length (if not already set on command line).
+ Similarly, set `O` register to 1 inch for the symmetric
+ horizontal margins otherwise assumed by this macro file. This
+ means that "groff -mm" and "groff -dpaper=letter -mm" are _not_
+ synonymous (when groff is configured to use U.S. letter as the
+ default paper format), because groff mm(7) uses a page offset of
+ 0.963 inches on typesetters for compatibility with DWB mm.
+ * NEWS: Add item.
+
+ See discussion in <https://lists.gnu.org/archive/html/\
+ groff/2022-11/msg00081.html> and (some) follow-ups.
+
+2022-11-16 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ * src/devices/gropdf/gropdf.pl: If the argument to the paper
+ format option '-p' matches a recognized format but includes a
+ trailing 'L' or 'l' ("legalL" or "a4l", for example), rotate the
+ document's MediaBox.
+
+2022-11-16 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ * src/devices/gropdf/gropdf.pl: Fix incorrect hotspot placement
+ if page is in landscape orientation.
+ (FixRect): Perform coordinate transform if page is rotated.
+ (Rotate): New function performs relevant trigonometry.
+
+ Fixes <https://savannah.gnu.org/bugs/?63380>. Thanks to Blake
+ McBride for the report.
+
+2022-11-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Integrate better with papersize.tmac by no longer
+ forcing line (and title) length to 6 inches for typesetters on
+ initialization. Gather default line length from output device
+ description, possibly modified later (by other macro file or
+ input). No change to terminal ("nroff mode") output.
+ * NEWS: Add item.
+
+2022-11-16 Peter Schaffter <peter@schaffter.ca>
+
+ * tmac/papersize.tmac: If a paper format has been selected,
+ smuggle right margin setting to mom(7) if not overridden by the
+ user. See discussion in <https://lists.gnu.org/archive/html/\
+ groff/2022-11/msg00081.html> and (some) follow-ups.
+
+2022-11-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/groff-man-pages.pdf)
+ (doc/groff-man-pages.utf8.txt): Add dependencies on new
+ `TMAC_PACKAGE_MAN` and `TMAC_PACKAGE_MDOC` convenience macros.
+
+2022-11-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am (TMAC_PACKAGE_MAN, TMAC_PACKAGE_MDOC): Define
+ convenience macros for in-tree documents to depend on.
+
+2022-11-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Trivially refactor. Rename `an-section` to
+ `an*section`.
+
+2022-11-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grolbp/lbp.cpp (usage): Tweak usage message. The
+ output driver should be perfectly capable of handling output
+ from non-GNU (but device-independent) troffs.
+
+2022-11-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grops/ps.cpp (usage): Employ more informative
+ metasyntactic variable names in usage message. Also summarize
+ program's function and direct reader to man page if help
+ explicitly requested (inferred from identity of output stream).
+
+2022-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Trivially refactor for congruence with
+ documentary terminology. Rename strings and macros.
+ - an-title -> an*topic
+ - an-abbreviate-page-title -> an*abbreviate-page-topic
+ - an-title-abbv -> an*topic-abbv
+ - an-title-string -> an*topic-string
+ - an-title-length -> an*topic-length
+ - an-title-length-prev -> an*topic-length-prev
+ - an-title-new-length -> an*topic-new-length
+ - an-page-title-style -> an*topic-style
+ (TH): Recast diagnostic message to refer to "section", not
+ "volume" title.
+
+2022-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Refactor to reduce code size. `UR` and `MT`
+ have identical implementations so...
+ (mV): Define new macro to perform the requisite actions, and...
+ (UR, MT): Make these into wrappers calling mV.
+
+2022-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac (UR, MT): Fix problem with incorrect line
+ lengths and occasional "can't adjust" warnings when using
+ hyperlinks. Reduce the line length within the diversion by the
+ amount of indentation used in the context. Without this, lines
+ were getting set too short. (You might think they'd be too
+ long, but when creating a new environment, the _formatter's_
+ default line length is used; that's 65n on terminal devices.)
+
+2022-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add test to ensure that link text (when the hyperlink
+ itself is not formatted because the device supports
+ hyperlinking) uses the correct line length and is adjusted.
+
+ * tmac/tests/an_adjust-link-text-correctly.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run tests.
+
+2022-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/devpdf.am: Refactor.
+ (MOSTLYCLEANFILES): Populate macro incrementally, adjacent to
+ the targets that build the files to be cleaned. This will
+ enable cleaner refactoring in the future.
+ (DEFAULT_BASE35_FONTS): Add new macro storing the targets of the
+ PostScript Level 2 standard base 35 font descriptions.
+ (devpdffont_DATA): Populate using `DEFAULT_BASE35_FONTS`.
+ (URW_BASE35_FONTS): Add new macro, empty if [!HAVE_URW_FONTS];
+ and [HAVE_URW_FONTS] otherwise naming the `U` foundry font
+ description counterparts of the `DEFAULT_BASE35_FONTS`.
+ (devpdffont_DATA): Append `URW_BASE35_FONTS`.
+ ($(DEFAULT_BASE35_FONTS) $(URW_BASE35_FONTS)): Assert dependency
+ on "font/devpdf/download". This isn't literally true, but
+ BuildFoundries generates all of these together, so if the
+ "font/devpdf/download" target rule runs successfully, the font
+ description files named in these macro expansions will be
+ generated too.
+
+2022-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Add new command-line option to
+ specify the generated font description's "spacewidth" parameter;
+ in commit bf7f6862c3, 2021-09-24, I made libgroff complain if
+ this directive is missing (since any font, even a "special" one,
+ can be selected as current and the formatter's behavior when
+ encountering an input space should be well-defined under that
+ circumstance). Adding this option enables a well-formed font
+ description to be produced.
+ * src/utils/afmtodit/afmtodit.pl (usage):
+ * src/utils/afmtodit/afmtodit.1.man (Synopsis, Options):
+ Document it.
+ * NEWS: Add item.
+
+2022-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Use our own fatal exit
+ function instead of Perl's "die".
+ (croak): New subroutine emits argument as part of diagnostic
+ message and exits with status 1.
+ (usage): Exit with status 2, not 1, on usage errors.
+
+ * NEWS: Document new exit behavior.
+
+2022-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/devpdf.am (font/devpdf/download): Improve
+ comprehensibility of comments in generated "download" file.
+ Stop bracketing path element separator with spaces.
+
+2022-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/util/BuildFoundries.pl (LoadFoundry): Stop
+ capitalizing beginning of diagnostic message (per GNU Coding
+ Standards). Drop ellipsis from end since no further diagnostics
+ relevant to that message are expected. Trim trailing slashes
+ from font path elements.
+
+2022-11-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devps/devps.am: Refactor. Turn two identical target
+ rules into a (BSD-make-style, old-fashioned) pattern rule.
+
+2022-11-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Rechristen self "GNU roff".
+
+2022-11-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/pic/pic.ypp: Slightly refactor. Rename parameter
+ `form` (format) to `fmt` to make its nature as an abbreviation
+ clear.
+ (format_number, do_sprintf): Reorder null pointer equality
+ comparisons to avoid inadvertent lvalue assignment.
+ (do_sprintf): Declare lists of valid format conversion
+ specifiers and modifiers explicitly instead of as happenstance
+ literals. Recast diagnostic messages to refer to "invalid", not
+ "bad" input; refer to input keyword correctly as "sprintf" (not
+ "snprintf"); and report the identity of the invalid conversion
+ specifier we reject.
+
+2022-11-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac (Fl, doc-flag-recursion, doc-print-recursive)
+ (doc-print-prefixes, Ar, Nm, Pa, Xr, doc-do-func, Fn)
+ (doc-do-func-args, Fo): Remove now-relic resets of type size to
+ previous value. Since commit 5125754cdf, 23 February, no mdoc
+ macro ever changes the type size.
+
+2022-11-08 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Cater for invalid entries in download file.
+
+ * src/devices/gropdf/gropdf.pl: Test if path in the "download"
+ file points to a readable file. Also change order so that the
+ first valid entry is used as the font to embed. This replaces
+ previous order where last found entry is used.
+
+ Fixes <https://savannah.gnu.org/bugs/?62950>.
+
+2022-11-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Set page topic in roman in "Name" section.
+
+ * tmac/doc.tmac (Nm): If in the "Name" section of the page, set
+ argument(s) with the `No` (normal formatting) macro instead of
+ handling them...normally. Since `Nm`'s usual behavior is to set
+ the next argument in boldface, in this circumstance it is set in
+ roman. Aligns page rendering with man(7) and fixes a bug
+ documented in the 4.3BSD-Reno mdoc.samples(7) page (1990-06-22),
+ upon which the groff_mdoc(7) page is based.
+ * tmac/groff_mdoc.7.man (Bugs): De-document bug.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?62926>.
+
+2022-11-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common: Add internal register
+ `doc-in-name-section` to keep track of whether a macro is called
+ within the "Name" section of the document, to prepare a means of
+ fixing a long-standing bug with `Nm`.
+ (Sh): Canonicalize capitalization of section heading sooner.
+ Set or clear `doc-in-name-section` based on result.
+ (Rd): Add new register to dump.
+ * tmac/doc.tmac (doc-save-global-vars, doc-restore-global-vars):
+ Handle new register.
+
+2022-11-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Use font CR, not CB, for `Cm` ("command modifier") and
+ `Fl` ("flag") macros on typesetters.
+
+ * tmac/mdoc/doc-ditroff (doc-Cm-font, doc-Fl-Font): Switch to
+ Courier roman from Courier bold. This congrues better with
+ other `Li` literals, which were not in boldface.
+
+2022-11-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-nroff (doc-Li-Font): Switch from roman to bold.
+ On typesetters, the use of Courier (roman) plainly distinguishes
+ unquoted literals from their context. On terminals there was no
+ such visible distinction. Fortunately, in groff_mdoc(7) itself,
+ this does not result in a blinding blitz of boldface because the
+ `Ql` (quoted literal) macro is so often used, and it maintains
+ the roman style. This change further aligns groff mdoc(7) with
+ groff man(7) style conventions. (Also see how we handle
+ literals for typesetters and terminals in the "ms.ms" document.)
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Make `Sx` macro perform quotation, not italicization.
+ It's thorougly inconsistent with English composition practices
+ to refer to (sub)section headings within a document as if they
+ were major works.
+
+ * tmac/doc.tmac (Sx): Implement.
+ * tmac/mdoc/doc-ditroff (doc-Sx-font):
+ * tmac/mdoc/doc-nroff (doc-Sx-font): Delete.
+ * tmac/groff_mdoc.7.man (Section Cross References): Rename...
+ ((Sub)section cross references): ...to this. Recognize
+ existence of `Ss` macro, curiously overlooked before.
+ * NEWS: Add item.
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Drop now-unused `doc-pageref` string. It was nowhere
+ interpolated outside of state management macros.
+
+ * tmac/doc.tmac (doc-save-global-vars, doc-restore-global-vars):
+ * tmac/mdoc/doc-common: Do it.
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (doc-header, doc-footer): Revise for
+ clarity and to use correct typefaces for titles.
+ (doc-header): Add new strings to ease title construction.
+ `doc-xref` stores the fully formatted page topic and section
+ number, e.g., "troff(1)"; `doc-abbv` stores the its potentially
+ abbreviated form when it is too long to fit.
+ (doc-footer): Use `doc-xref` as above. Stop setting the `Os`
+ and `Dd` parameters in the ("semantic"?) font used for the
+ page's section number (probably unnoticed all these years
+ because the font used to render that was (Times) roman).
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac:
+ * tmac/mdoc/doc-common: Rename strings for clarity.
+ - doc-document-title -> doc-page-topic
+ - doc-document-title-saved -> doc-page-topic-saved
+ * tmac/mdoc/doc-common: Use new name.
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff (doc-page-topic-font):
+ * tmac/mdoc/doc-nroff (doc-page-topic-font): Set man page topic
+ names in italics.
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Rename strings for clarity.
+ - doc-caption-font -> doc-page-topic-font
+ - doc-caption-font2 -> doc-page-section-font
+ * tmac/mdoc/doc-common (doc-header, doc-footer): Use new names.
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac: Delete suppression of `Pa` font selection in a
+ "Files" section. This special handling was not documented.
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff (doc-Pa-font): Set file specifications
+ in italics on typesetters. (Terminals already use italics.)
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff (doc-Xr-font):
+ * tmac/mdoc/doc-nroff (doc-Xr-font): Set man page topic cross
+ references in italics.
+
+2022-11-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Rename `doc-Tn-font-shape` to
+ `doc-Tn-font` for better parallelism with other font selection
+ strings for mdoc macros, since the `Tn` macro no longer
+ manipulates the type size.
+ * tmac/doc.tmac (Tn): Use new name.
+
+2022-11-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Debugging): Fix misleading claim. The
+ arguments to the `tm`, `tmc`, and `tm1` requests are not read in
+ copy mode. For example, you don't need to double backslashes to
+ get them to interpolate registers or strings.
+
+2022-11-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (an-end):
+ * tmac/mdoc/doc-common (doc-end-macro): Ensure that document
+ footer appears in continuous rendering mode even when a final
+ pending output line in the document is 1v from the page bottom.
+ Replace `fl` call with `br`, which IMO has clearer semantics.
+ Extend page length by 1v before doing so if the current vertical
+ position is within 1v of the page bottom.
+
+ Thanks to Alex Colomar for the report.
+
+2022-11-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man, mdoc]: Regression-test special case of continuous
+ rendering when the last pending output line in the document is
+ 1v from the (notional) page bottom.
+
+ * tmac/tests/an_output-footer-when-continuously-rendering.sh:
+ * tmac/tests/doc_output-footer-when-continuously-rendering.sh:
+ Do it.
+ * tmac/tmac.am (tmac_TESTS): Run tests.
+
+2022-11-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (TE): Update diagnostic to mention another
+ failure mode: a man page that is simply a `so` request requires
+ soelim(1) to be run if the sourced page uses tbl(1).
+
+2022-11-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/xditview/xditview.am
+ ($(GXDITVIEW_GROFF_VERSION_H)): Run `$(MKDIR_P)` and `printf` as
+ separate rule commands in order to use them with `$(AM_V_at)`
+ and `$(AM_V_GEN)`, respectively. Prevents noise from build.
+
+ Fixes <https://savannah.gnu.org/bugs/?63302>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [eqn]: Fix Savannah #63299.
+
+ * src/preproc/eqn/main.cpp: Revise input file line number
+ handling.
+ (read_line): Stop dealing with `current_lineno` here; it's now
+ up to its caller (`do_file()`) to manipulate the line number.
+ (do_file): When reading new file, initialize `current_lineno` to
+ 1 instead of 0. Reset it to zero when encountering EOF (so that
+ diagnostics will not include a line number at all). When
+ performing nested call to `read_line()` to gather '.EN' from
+ input, increment the line number. Write correct line number in
+ output groff `lf` requests; in groff, its first argument assigns
+ the number of the _next_ input line. Increment line number at
+ end of outer `read_line()` loop.
+
+ Fixes <https://savannah.gnu.org/bugs/?63299>. Thanks to Alex
+ Colomar for the report.
+
+2022-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [eqn]: Regression-test Savannah #63299.
+
+ * src/preproc/eqn/tests/\
+ diagnostics-report-correct-line-numbers.sh: Do it.
+ * src/preproc/eqn/eqn.am (eqn_TESTS, TESTS, EXTRA_DIST): Run
+ test.
+
+2022-10-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl (fail, warn, construct_command)
+ (version): Restore trailing newlines to `print`ed output. They
+ went missing when I removed the assignment of the output record
+ separator in commit 6f2e367836, 24 October. Thanks to Dave
+ Kemper for catching this.
+
+2022-10-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/preconv.cpp: Trivially refactor. Rename
+ `default_encoding` to `fallback_encoding` for clarity. Update
+ comments and debugging diagnostic messages accordingly.
+
+2022-10-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grolj4]: Absorb lj4_font(5) man page into grolj4(1).
+
+ * src/devices/grolj4/lj4_font.5.man: Delete, moving content...
+ * src/devices/grolj4/grolj4.1.man (Fonts): ...hither.
+
+ * doc/doc.am (GROFF_MAN_PAGES1):
+ * src/devices/grolj4/grolj4.am (man5_MANS, EXTRA_DIST): Stop
+ formatting and shipping removed page.
+
+ * src/roff/groff/groff.1.man:
+ * src/utils/hpftodit/hpftodit.1.man: Drop references to page.
+
+ Fixes <https://savannah.gnu.org/bugs/?61819>.
+
+2022-10-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Support `SN` register to configure subsection heading
+ indentation.
+
+ * tmac/doc.tmac: Recognize `SN` register if set on command line
+ and use groff man(7)-compatible default if it is not.
+ * tmac/mdoc/doc-common (Ss): Use this register instead of a
+ literal.
+ * tmac/groff_mdoc.7.man (Formatting with groff, troff, and
+ nroff): Document it.
+ * NEWS: Update item.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?62926>.
+
+2022-10-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Support `IN` register to configure paragraph
+ indentation.
+
+ * tmac/doc.tmac: Recognize `IN` register if set on command line
+ and use groff man(7)-compatible defaults if it is not.
+ * tmac/mdoc/doc-common (Sh): Use this register instead of
+ `doc-paragraph-indentation`.
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Stop setting pargraph indentation
+ defaults here.
+ * tmac/groff_mdoc.7.man (Formatting with groff, troff, and
+ nroff): Document it.
+ * NEWS: Update item.
+
+ * tmac/tests/doc_Mt-works.sh:
+ * tmac/tests/doc_indents-correctly.sh: Update test expectations.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?62926>.
+
+2022-10-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (Sh): Fix code style nit. Set paragraph
+ indentation absolutely rather than incrementally. mdoc(7)
+ doesn't have relative inset macros like man(7)'s `RS`/`RE`, so
+ the relative measurement could mislead the reader. (The
+ section heading itself uses an indentation of 0.)
+
+2022-10-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Fix Debian #1022179.
+
+ * tmac/mdoc/doc-common (Ss): Indent entire subsection heading by
+ 3 ens, even if it breaks across output lines. (Change and
+ restore indentation explicitly instead of using a temporary
+ indent to achieve this. Also indent absolutely by 3n instead of
+ retreating by one quarter inch.)
+
+ Fixes <https://bugs.debian.org/1022179>. Thanks to наб for the
+ report.
+
+2022-10-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/doc_indents-correctly.sh: Add regression test for
+ Debian #1022179.
+
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-10-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Fix misleading register name.
+
+ * tmac/mdoc/doc-common (Sh):
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Rename `doc-subheader-indent` to
+ `doc-paragraph-indentation`, because the latter is what it's
+ used for.
+
+2022-10-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_POPPLER): Improve shell code portability.
+ Per the GNU Autoconf manual, "The -a, -o, '(', and ')' operands
+ are not present in all implementations, and have been marked
+ obsolete by Posix 2008. ...portable uses of test should never
+ have more than four arguments, and scripts should use shell
+ constructs like '&&' and '||' instead."
+
+2022-10-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/preconv.cpp: Alter usage message handling.
+ (usage): Summarize purpose of program and steer reader to man
+ page (only) if help was explicitly requested, and exit
+ successfully from here...
+ (main): ...instead of calling scope.
+
+2022-10-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/preconv.cpp (usage): Use more
+ communicative metasyntactic variable names.
+ * src/preproc/preconv/preconv.1.man (Synopsis, Options): Align
+ with updated usage message.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp: Alter usage message handling.
+ (usage): Summarize purpose of program and steer reader to man
+ page (only) if help was explicitly requested, and exit
+ successfully from here...
+ (main): ...instead of calling scope.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grolbp/lbp.cpp: Alter usage message handling.
+ (usage): Summarize purpose of program and steer reader to man
+ page (only) if help was explicitly requested, and exit
+ successfully from here...
+ (main): ...instead of calling scope.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grolbp/lbp.cpp (main): Handle `getopt_long()`
+ return value more idiomatically.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grolbp/lbp.cpp: Fix code style nits.
+ (main): Use standard C library symbols `EXIT_SUCCESS` and
+ `EXIT_FAILURE` instead of integer literals as arguments to
+ `exit()`. Add assertion.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grotty/tty.cpp: Alter usage message handling.
+ (usage): Summarize purpose of program and steer reader to man
+ page (only) if help was explicitly requested, and exit
+ successfully from here...
+ (main): ...instead of calling scope.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grotty/tty.cpp: Fix code style nits.
+ (main): Use standard C library symbols `EXIT_SUCCESS` and
+ `EXIT_FAILURE` instead of integer literals as arguments to
+ `exit()`. Replace `assert(0)` call with communicative
+ predicate.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp: Alter usage message handling.
+ (synopsis, help): Coalesce these two functions...
+ (usage): ...into this one. Summarize purpose of program and
+ steer reader to man page only if help was explicitly requested,
+ rather than blitzing user with text upon a usage error. Also
+ drop option summary from usage message, as it duplicates
+ groff(1).
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Alter usage message handling.
+ (help): Rename this subroutine...
+ (usage): ...to this. Summarize purpose of program and steer
+ reader to man page only if help was explicitly requested, rather
+ than blitzing user with text upon a usage error. Also drop
+ option summary from usage message, as it duplicates grog(1).
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Drop relic code and comments.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Migrate expansion of Perl interpreter in shebang.
+ Use the same technique as afmtodit, mmroff, gropdf, and pdfmom.
+
+ * src/utils/grog/grog.am (grog): Replace "@PERL@" instead of
+ '^\(#! \).*perl'.
+ * src/utils/grog/grog.pl: Use "@PERL@" in shebang.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [afmtodit]: Give program a usage message.
+
+ * src/utils/afmtodit/afmtodit.pl: Add new scalar `want_help` of
+ Boolean sense. Recognize new long option `--help`, attached to
+ `$want_help`. Stop stripping off directory name components from
+ program name when emitting diagnostics. No other groff program
+ does this (well, gropdf did until recently), and it might save
+ users some confusion if they're working with multiple copies of
+ afmtodit.
+ (usage): New subroutine reports usage message. If help was
+ explicitly requested, summarize purpose of program and steer
+ reader to man page.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [afmtodit]: Migrate expansion of Perl interpreter in shebang.
+ Use the same technique as mmroff, gropdf, and pdfmom.
+
+ * src/utils/afmtodit/afmtodit.am (afmtodit): Replace "@PERL@"
+ instead of "/usr/bin/perl".
+ * src/utils/afmtodit/afmtodit.pl: Use "@PERL@" in shebang.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [gropdf] Give program a usage message.
+
+ * src/devices/gropdf/gropdf.pl: Add new scalar `want_help` of
+ Boolean sense. Recognize new long option `--help`, attached to
+ `$want_help`.
+ (usage): New subroutine reports usage message. If help was
+ explicitly requested, summarize purpose of program and steer
+ reader to man page.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/xditview/xditview.c (Syntax): "#if 0" out
+ reference to `-noPolyText` option, whose effect is likewise
+ bracketed in another file.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (enable_warning, disable_warning):
+ Recast diagnostic messages for clarity.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pfbtops]: Fix code style and diagnostic nits.
+
+ * src/utils/pfbtops/pfbtops.c (error): Exit with `EXIT_FAILURE`
+ status (from standard C library) instead of status 2.
+ (main): Exit with `EXIT_SUCCESS` status when writing version or
+ help information. Exit with status 2 when dying due to usage
+ error. Use `fprintf()` and `strerror()` to construct error
+ message when dying due to inability to open input file instead
+ of using `perror()`, which anonymizes its caller and thus should
+ never be used in serious work. Avoid it like `gets()`.
+ * NEWS: Add item for exit status changes.
+
+ Continues the long process of fixing Savannah #52463.
+
+2022-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man pages]: Don't document macro package compatibility wrapper
+ directory if it's not used.
+
+ * Makefile.am (.man): Use sed to replace
+ '@COMPATIBILITY_WRAPPERS@' in man page text with value of
+ `compatibility_wrappers` shell variable. Document its purpose.
+ * src/preproc/eqn/eqn.1.man (Description):
+ * src/preproc/grn/grn.1.man (Options):
+ * src/roff/groff/groff.1.man (Installation directories):
+ * src/roff/troff/troff.1.man (Environment): Mention
+ `@SYSTEMMACRODIR@` only if `@COMPATIBILITY_WRAPPERS@` expands to
+ something other than "no" (it could be "yes" or "manual").
+
+ Thanks to Alexander Kanavin and Jeremy Puhlman for the report.
+
+2022-10-21 Robert Yang <liezhi.yang@windriver.com>
+
+ * font/devpdf/util/BuildFoundries.pl:
+ * src/devices/gropdf/gropdf.pl:
+ * src/devices/gropdf/pdfmom.pl: Replace use of '-w' in shebang
+ line with "use warnings;".
+
+2022-10-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/fallbacks.tmac: Define fallback characters for many code
+ points from the Unicode General Punctuation Block. This is to
+ ease migration from other documentation formats; in many cases
+ there are more idiomatic *roff ways of getting results that
+ typeset better and are amenable to fine tuning. For instance,
+ Unicode defines spaces and dashes of various discrete widths;
+ when typesetting with *roff, you can have a space or dash (among
+ other things) of any length achievable by the output device.
+ * tmac/ps.tmac: Migrate non-breaking hyphen fallback character
+ definition from here to the foregoing.
+
+ Fixes <https://savannah.gnu.org/?58930>. Thanks to Dave Kemper
+ for the report and discussion.
+
+2022-10-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac:
+ * tmac/s.tmac: Escape newlines when opening conditional blocks.
+
+ Fixes <https://savannah.gnu.org/?63197>. Thanks to Bjarni Ingi
+ Gislason for the report and Dave Kemper for the quick fix.
+
+2022-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grodvi/dvi.cpp (usage):
+ * src/devices/grohtml/post-html.cpp (usage):
+ * src/devices/grolbp/lbp.cpp (usage):
+ * src/devices/grolj4/lj4.cpp (usage):
+ * src/devices/grops/ps.cpp (usage):
+ * src/devices/grotty/tty.cpp (usage):
+ * src/devices/xditview/xditview.cpp (usage):
+ * src/preproc/eqn/main.cpp (usage):
+ * src/preproc/grn/main.cpp (usage):
+ * src/preproc/html/pre-html.cpp (usage):
+ * src/preproc/pic/main.cpp (usage):
+ * src/preproc/preconv/preconv.cpp (usage):
+ * src/preproc/refer/refer.cpp (usage):
+ * src/preproc/soelim/soelim.cpp (usage):
+ * src/preproc/tbl/main.cpp (usage):
+ * src/roff/groff/groff.cpp (synopsis, help):
+ * src/roff/nroff/nroff.sh:
+ * src/roff/troff/input.cpp (usage):
+ * src/utils/addftinfo/addftinfo.cpp (usage):
+ * src/utils/hpftodit/hpftodit.cpp (usage):
+ * src/utils/indxbib/indxbib.cpp (usage):
+ * src/utils/lkbib/lkbib.cpp (usage):
+ * src/utils/lookbib/lookbib.cpp (usage):
+ * src/utils/pfbtops/pfbtops.c (usage):
+ * src/utils/tfmtodit/tfmtodit.cpp (usage):
+ * src/utils/xtotroff/xtotroff.c (usage): Update usage message.
+ Present different modes of operation on separate output lines.
+ Sort options in English lexicographic order. Document help
+ option(s) as last mode of operation.
+
+2022-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl: Revise handling of argument 0.
+ Rename scalar `progname` to `prog` for brevity (and preparation
+ for writing a usage message). Also stop stripping off directory
+ name components from it. No other groff program does this, and
+ it might save users some confusion if they're working with
+ multiple copies of gropdf.
+
+2022-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Migrate terminology from "paper size" to "paper format" or
+ "paper dimensions" as appropriate in documentation and
+ diagnostic messages. "Format" implies an orientation (which can
+ be overridden in many cases) whereas size does not. When only
+ the magnitudes of measurements are at issue (mainly for internal
+ purposes), use the term "dimensions".
+
+ * NEWS:
+ * PROBLEMS:
+ * doc/groff.texi:
+ * m4/groff.m4 (GROFF_PAGE):
+ * man/groff_font.5.man:
+ * man/groff_tmac.5.man:
+ * src/devices/grodvi/dvi.cpp (main):
+ * src/devices/grolbp/grolbp.1.man:
+ * src/devices/grolbp/lbp.cpp (main):
+ * src/devices/grolj4/grolj4.1.man:
+ * src/devices/grolj4/lj4.cpp (lj4_printer::lj4_printer, main):
+ * src/devices/grolj4/lj4_font.5.man:
+ * src/devices/gropdf/gropdf.1.man:
+ * src/devices/grops/grops.1.man:
+ * src/devices/grops/ps.cpp (main):
+ * src/roff/groff/groff.1.man:
+ * tmac/papersize.tmac: Do it.
+
+2022-10-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff (doc-left-parenthesis)
+ (doc-right-parenthesis, doc-left-bracket, doc-right-bracket):
+ Drop thin and hair space escape sequences from these string
+ definitions. (Also, doc-right-bracket was inconsistent with
+ doc-left-bracket, the former inserting horizontal motion only
+ before the bracket character.) Eliminates excess space when
+ using Pq, Po, Pc and Bq, Bo, Bc macros and formatting for
+ typesetters, and aligns output with behavior of `Pq` and `Bq` as
+ documented in groff_mdoc(7).
+
+ Fixes <https://bugs.debian.org/1021795>. Thanks to наб for the
+ report.
+
+2022-10-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff: Use groff-canonical typeface names in
+ font selection escape sequences. Migrate 'C' to 'CR' and 'CO'
+ to 'CI'. (Admittedly, "Courier oblique" is more pedantically
+ correct than "Courier italic". But the iron ball of Unix troff
+ history and its style trio [later quartet] of "R", "I", "B"
+ {then "BI"} will not be ignored.)
+
+2022-10-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff: Drop nilpotent type size escape
+ sequences from string definitions.
+
+2022-10-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Document a CSTR #54 erratum regarding \n(st and \n(sb.
+
+ * doc/groff.texi (Page Motions):
+ * man/groff.7.man (Writable registers):
+ * man/groff_diff.7.man (New registers): Do it.
+
+ * PROBLEMS: Further clarify. Note DWB and Heirloom behavior.
+
+2022-10-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/main.cpp (read_line): Fix switched test
+ consequents when updating `current_lineno`.
+
+2022-10-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/xtotroff/xtotroff.c (main): Annotate "xtotroff" as a
+ GNU program in version information.
+
+2022-10-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/xditview/xditview.am
+ ($(GXDITVIEW_GROFF_VERSION_H): Perform correct substitution to
+ get groff version string into `Version_string` C symbol.
+ Continues commit c73decb58f, 9 October.
+
+2022-10-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.1.man (Files): Fix ordering error.
+
+ Fixes <https://savannah.gnu.org/bugs/?63228>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-10-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/lex.cpp (get_delimited_text): Clear line
+ number when hitting EOF.
+ * src/preproc/eqn/main.cpp: Revise end-of-file handling. Clear
+ line number upon reaching EOF so that we don't report a nonsense
+ value one greater than the number of lines in the input file.
+ (read_line): Boolify. Make static (local linkage only), since
+ it has no external callers. Introduce new Boolean variable
+ `is_end_of_file`. Clear `current_lineno` if EOF, and increment
+ it otherwise.
+ (do_file, main): Clarify diagnostic messages.
+
+2022-10-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [eqn]: Improve diagnostics involving unprintable characters.
+
+ * src/preproc/eqn/main.cpp (input_char_description): New
+ function constructs a human-readable string describing
+ characters.
+ (read_line, inline_equation, main): Call new function and adjust
+ diagnostic message wording to accommodate the phrase it returns.
+
+ Fixes <https://savannah.gnu.org/bugs/?63218>.
+
+2022-10-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [eqn]: Improve diagnostics.
+
+ * src/preproc/eqn/lex.cpp (file_input::~file_input):
+ * src/preproc/eqn/main.cpp (main): Die if `fclose()` fails and
+ report underlying system error.
+ (inline_equation): Identify inline equation context.
+
+2022-10-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (2c, 1c): Throw diagnostic if changing columnation
+ with a footnote pending. This isn't necessarily an error per
+ se, but in many cases it will flag an undesirable page layout
+ due to the limited flexibility of me(7)'s footnote support at
+ present. See <https://savannah.gnu.org/bugs/?63176>.
+
+2022-10-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/main.cpp: Fix code style nits.
+ (usage): Align output with man page. Document separate
+ invocation modes separately.
+ (main): Use standard C library symbols `EXIT_SUCCESS` and
+ `EXIT_FAILURE` with `exit()` calls instead of integer literals.
+ Replace `assert(0)` call with communicative predicate. Check
+ return value of `fclose()`, and exit with fatal error if it
+ fails. Distinguish `ferror()` status and `fflush(stdout)`
+ failures when cleaning up before exit.
+
+2022-10-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (read_color_draw_node): Clarify
+ diagnostic.
+
+2022-10-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/dvi.tmac: Always render \[aq] as a neutral apostrophe.
+ Thanks to the TC fonts, we can do this even when the default CM
+ text fonts are in use.
+
+ Fixes <https://savannah.gnu.org/bugs/?63200>.
+
+2022-10-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/ec.tmac: Remove apparently unnecessary remappings of
+ styles (and reassertion of style slots in the font mounting
+ position list, albeit in an unusual order (RBI instead of RIB)).
+ This code frustrated the rendering of man pages with post-1.22.4
+ groff for the 'dvi' output device when using EC fonts. Instead
+ remap the T and H family typefaces in all four styles
+ explicitly. (The CW and CWI faces were already handled.) Also
+ add remappings of groff+PostScriptish font names "CB" and "CBI"
+ to CW EC faces of normal weight, corresponding to dvi.tmac; see
+ commits 529e2ca0c4, 2002-03-23 and c9741da6c0, 2021-05-06.
+
+ Fixes <https://savannah.gnu.org/bugs/?63194>.
+
+2022-10-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an_works-with-ec.sh: Add regression test for
+ Savannah #63194.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-10-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/ec_works.sh: Add unit test to validate use of EC
+ fonts when "-mec" option given.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-10-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/latin2.tmac:
+ * tmac/latin5.tmac:
+ * tmac/latin9.tmac: Perform the character remapping shenanigans
+ of the fix for Savannah #63112 only if the output device is
+ "latin1" (a terminal using an 8-bit character encoding). Only
+ then can we be sure that Latin-1 glyphs will be unavailable when
+ other encodings are used and that `\N` escape sequences will
+ identify correct glyph indices in a font (because there is no
+ font per se accessible to groff--simply a terminal implementing
+ a character encoding).
+
+2022-10-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (GetType1): Clarify diagnostic.
+ When failing to open a font file for embedding in a PDF, mention
+ this context.
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.tables: Update against Unicode 15.
+ No substantive changes.
+
+ Fixes <https://savannah.gnu.org/bugs/?63188>.
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: If URW fonts were located, add the directory
+ where they were found to the configuration report.
+
+ Attempts to fix <https://savannah.gnu.org/bugs/?62860> (2/2).
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4: Try to make gropdf's search for URW font files
+ more deterministic. To disambiguate cases where multiple--not
+ necessarily identical--copies may be found on the system, search
+ _only_ in the directory given to the `--with-urw-fonts-dir`
+ configure option, if present. This populates the "Foundry" file
+ generated by the build, causing gropdf to search there first.
+ (GROFF_URW_FONTS_PATH): Stop `AC_SUBST`ing `urwfontsdir` here.
+ (GROFF_URW_FONTS_CHECK): `AC_REQUIRE` `GROFF_URW_FONTS_PATH` to
+ be run first. If `urwfontsdir` is not null, search only there
+ for URW fonts. Assign `urwfontsdir` the value of the directory
+ in which the fonts are found. Assign it an empty value if none
+ are found. Either way, `AC_SUBST` the variable.
+
+ Attempts to fix <https://savannah.gnu.org/bugs/?62860> (1/2).
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (LoadFont): Clarify diagnostic.
+ gropdf opens "fonts" in two distinct ways. On the one hand, it
+ opens groff font description files for essentially all
+ nontrivial output. On the other, it may open actual Type 1 font
+ files for embedding in a PDF. Make failure of the former case
+ less confusable with the latter.
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Document new XN/XH and related macros.
+
+ * doc/groff.texi (Creating a table of contents):
+ * doc/ms.ms (Creating a table of contents):
+ * tmac/groff_ms.7.man (Creating a table of contents): Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?63110>.
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [gxditview]: Support `-version`, `--version` option. As a C
+ program, gxditview had no access to the (C++) libgroff
+ `Version_string` symbol, so construct a header file to store
+ this datum at build time. If groff gets other user-facing C
+ programs, we should consider generating this header in
+ src/include instead.
+
+ * src/devices/xditview/xditview.am: Generate "groff_version.h"
+ file.
+ (GXDITVIEW_GROFF_VERSION_H): Define new macro.
+ ($(GXDITVIEW_GROFF_VERSION_H)): Define target to generate file.
+ (XDITVIEW_GENHDRS): Add $(GXDITVIEW_GROFF_VERSION_H).
+
+ * src/devices/xditview/xditview.c: Include new header file.
+ (Syntax): Report newly supported options.
+ (main): Recognize and handle new options.
+
+ * src/devices/xditview/gxditview.1.man (Synopsis): Document
+ them.
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [gxditview]: Update usage message production and contents.
+
+ * src/devices/xditview/xditview.c: Use C99 Boolean type.
+ (Syntax): Accept additional Boolean argument indicating whether
+ the usage message is to be issued due to an error. Write
+ message to stderr if so, and stdout otherwise. Stop presuming
+ length of output line; guessing where to wrap is unreliable due
+ to variable terminal width and length of argv[0]. Write one
+ line per invocation mode of the program. Stop duplicatively
+ documenting standard X Toolkit options. Exit with standard C
+ library `EXIT_FAILURE` status if there was an error, and
+ `EXIT_SUCCESS` otherwise.
+ (main): Refactor to prepare for `--version` support.
+
+ * src/devices/xditview/gxditview.1.man (Synopsis): Sync list of
+ options with usage message.
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Recognize "--version" as
+ synonym for "-v". To achieve this, use Getopt::Long instead of
+ Getopt::Std.
+ * src/utils/afmtodit/afmtodit.1.man (Synopsis, Options):
+ Document it.
+
+2022-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/pdfmom.pl: Recognize "--version" as synonym
+ for "-v".
+ * src/devices/gropdf/pdfmom.1.man (Synopsis, Description):
+ Document it.
+
+2022-10-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl (version): Identify as a GNU program.
+
+2022-10-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grolj4/grolj4.1.man (Typefaces): Add new
+ subsection.
+
+ Fixes <https://savannah.gnu.org/bugs/?60929>. Thanks to T. Kurt
+ Bond for the report.
+
+2022-10-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/meref.me.in (Columnated Output): Document persistence of
+ `$s` register value across columnation mode changes.
+
+ Fixes <https://savannah.gnu.org/bugs/?62717>. Thanks to Dave
+ Kemper for the report.
+
+2022-10-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/meref.me.in: Annotate empty default arguments more
+ consistently.
+
+ Fixes <https://savannah.gnu.org/bugs/?62801>. Thanks to Dave
+ Kemper for the report.
+
+2022-10-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/meref.me.in: Fix documentation error.
+ (Summary) <\_>: Describe as "underrule", not "underscore".
+ These are distinct: the latter is a glyph; the former is drawn
+ by typesetters and rendered with SGR attributes on terminals.
+
+2022-10-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * NEWS: Advise users of changes to "name" directive handling in
+ font description files.
+
+ Fixes <https://savannah.gnu.org/bugs/?61423>. Thanks to Dave
+ Kemper for the report.
+
+2022-10-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/number.cpp: Refactor and fix code style nits.
+ Boolify and rename static (local) functions.
+ - parse_expr -> is_valid_expression
+ - start_number -> is_valid_expression_start
+ - parse_term -> is_valid_term
+ Rename preprocessor macro `SCALE_INDICATOR_CHARS` to
+ `SCALING_UNITS`.
+ (is_valid_expression, is_valid_term): Rename parameters and
+ demote them from `int` to `bool`.
+ - scaling_indicator -> scaling_unit (no demotion)
+ - parenthesised -> is_parenthesized
+ - rigid -> is_mandatory
+ (is_valid_expression_start, is_valid_expression, is_valid_term):
+ Return Boolean rather than integer literals.
+ (get_vunits, get_hunits, get_number_rigidly, get_number)
+ (get_integer): Update call sites of renamed functions. Replace
+ Boolean-valued integer literals used as Booleans with Boolean
+ literals and annotate their purposes. (See <https://\
+ stackoverflow.com/questions/38076786/\
+ why-doesnt-c-support-named-parameters>.)
+ (get_vunits, get_hunits, get_number, get_integer): Replace `0`
+ in assertions with a communicative predicate. In all of these
+ it's an unhandled `switch()` case.
+
+2022-10-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_expr_test, do_zero_width): Use
+ better terminology in diagnostic messages.
+
+2022-10-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Fix Savannah #63151.
+
+ * src/roff/troff/input.cpp (read_draw_node): Throw "delim"
+ warning diagnostic when a drawing escape sequence ends the line
+ without a closing delimiter.
+
+ Fixes <https://savannah.gnu.org/bugs/?63151>.
+
+2022-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/fallbacks.tmac: Define fallbacks for characters in ISO
+ Latin-{2,5,9} but not in Latin-1.
+
+ Fixes <https://bugs.debian.org/782903>. Thanks to Rafal Pietrak
+ for the report.
+
+2022-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Fix Savannah #63149.
+
+ * src/roff/troff/reg.cpp (alter_format): Throw comprehensible
+ diagnostic when input delete character encountered in register
+ format.
+
+ Fixes <https://savannah.gnu.org/bugs/?63149>.
+
+2022-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Describe an input delete character comprehensibly.
+
+ * src/roff/troff/input.cpp (token::description): The delete
+ character (ISO 127 decimal, EBCDIC 7) is a valid `TOKEN_CHAR`
+ but is not printable. Don't attempt to output it literally in
+ diagnostics; describe it in a phrase instead.
+
+2022-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Apply consistent terminology.
+
+ * src/roff/troff/input.cpp: Rename functions to better align
+ with our documentation, and decouple their names from an
+ assumption of diagnostic severity. Also give them imperative
+ names since they are called for their side effects, not their
+ return values.
+ - empty_name_warning -> diagnose_missing_identifier
+ - non_empty_name_warning -> diagnose_invalid_identifier
+ (diagnose_missing_identifier): Refer to absent operand as
+ "identifier", not "name", in diagnostic messages since the
+ latter (strictly) refers to the request/macro/string/diversion
+ name space, and this function is also used to gather register
+ identifiers.
+
+2022-10-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Fix Savannah #63112 (3/3).
+
+ * tmac/latin2.tmac: Replace characters that ISO Latin-1 has but
+ Latin-2 doesn't. Map characters that ISO Latin-2 has and
+ Latin-1 doesn't to their numeric code points.
+
+2022-10-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Regression-test Savannah #63112 (3/3).
+
+ * tmac/tests/latin2_works: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Fix Savannah #63112 (2/3).
+
+ * tmac/latin5.tmac: Replace characters that ISO Latin-1 has but
+ Latin-5 doesn't. Map characters that ISO Latin-5 has and
+ Latin-1 doesn't to their numeric code points.
+
+2022-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Regression-test Savannah #63112 (2/3).
+
+ * tmac/tests/latin5_works: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Fix Savannah #63112 (1/3).
+
+ * tmac/latin9.tmac: Replace characters that ISO Latin-1 has but
+ Latin-9 doesn't. Map characters that ISO Latin-9 has and
+ Latin-1 doesn't to their numeric code points.
+
+2022-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Regression-test Savannah #63112 (1/3).
+
+ * tmac/tests/latin9_works: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp: Refactor to parallelize logic in
+ similar routines; namely, those handling escape sequences that
+ accept newlines as argument delimiters.
+
+2022-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp: Fix inconsistencies in handling of
+ escape sequences that accept newlines as delimiters. Some threw
+ spurious warnings as in Savannah #63011; others failed to treat
+ a newline-terminated escape sequence also as the ending of an
+ input line.
+ (do_name_test, do_zero_width): Suppress spurious warning.
+ (do_zero_width, do_width, do_special): Synthesize newline to
+ terminate input line.
+
+2022-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/\
+ some_escapes_accept_newline_delimiters.sh: Add test cases for
+ `\A` and test formatted output of escape sequences, not just the
+ absence of diagnostics from permitted use of newlines as
+ argument delimiters.
+
+2022-09-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libdriver/input.cpp (do_file): Make use of
+ positioning commands before the first page is started fatal
+ errors; they suggest ill-formed input. The 'p' command
+ clobbers the vertical position anyway. (See
+ https://bugs.debian.org/421437 for discussion.)
+
+2022-09-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdf.tmac: Add inclusion guard; if a `pdfmark` macro is
+ already defined, skip inclusion of this file. Unfortunately
+ there are multiple name collisions with pdfmark.tmac.
+
+2022-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp:
+ * src/roff/troff/request.h: Trivially refactor. Boolify
+ `interpolate_macro` and `request::invoke`. Also rename
+ parameter `no_next` to `do_not_want_next_token`, exposing
+ potentially confusing interface design.
+
+2022-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (spring_trap, interpolate_string)
+ (interpolate_string_with_args): Improve error diagnostics: when
+ a sprung trap or an interpolation fails because it's being
+ attempted on a request, say so explicitly and _name_ it. If the
+ argument to the trap-planting request or to a string
+ interpolation escape sequence is itself an interpolation, this
+ name might not be obvious. Consider:
+ .wh \n[pos] \*[mac]
+ .em \*[mac]
+ .itc 1 \*[mac]
+ \*[\*[mac]]
+ Supplying this information requires no additional overhead.
+
+2022-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (interpolate_string): Trivially
+ refactor. Rename function parameter from `s` to `nm` to more
+ obviously align with `interpolate_string_with_args()`.
+
+2022-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_zero_width, token::description)
+ (interpolate_string, interpolate_string_with_args)
+ (token::get_char): Revise diagnostic messages to stop presuming
+ the identity of the escape character.
+
+2022-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (set_escape_char): Recast error
+ message to describe attempted operation and tell the user what
+ we're doing about being instructed to use an invalid escape
+ character.
+
+2022-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (read_size): Be more helpful to
+ ambiguous type size escape sequence users; offer advice in
+ terms of the current escape character.
+
+2022-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp (main): Fix SEGV when exiting
+ gxditview. The `postdriver` pointer always referred to
+ allocated memory except when the `-X` option was given; it was
+ then assigned the address of a #defined string literal. It was
+ thus statically allocated and an error to attempt to `free()`
+ it. Duplicate the string on the heap instead so that we can
+ clean up uniformly regardless of postprocessor. Problem caused
+ by me when introducing `xexit()` in commit 6769e56aab, 20 June.
+
+2022-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (@o, n2, sk (f, ++): Consistently call `@err`
+ macro with `do`.
+
+2022-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Initialize new register `_f`, the value of `$m`
+ {column count} of the previous pending footnote, to zero,
+ meaning there is no previous pending footnote.
+ (@o): Emit diagnostic when flushing footnotes into a different
+ column layout than the pending footnote last added. Set `_f` to
+ zero.
+ ((f): Emit diagnostic when enqueueing footnote using a different
+ column layout than the previous pending footnote used. Set `_f`
+ to `$m`.
+
+ Fixes <https://savannah.gnu.org/bugs/?58736>. Thanks to Dave
+ Kemper for the report and discussion.
+
+2022-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Explicitly initialize and annotate internal
+ register `?f`.
+
+2022-09-08 Nikita Ivanov <nikita.vyach.ivanov@gmail.com>
+
+ * tmac/ps.tmac: Fallback definitions for glyphs that usually
+ come from special fonts should use `schar` instead of `fchar`.
+ {Define fallback special characters using `schar` instead of
+ `fchar` for glyphs that we do not expect to find in text fonts;
+ that is, they don't have bold, italic, and bold-italic stylistic
+ variants. This means all special character definitions in the
+ file except for rules, ligatures, and digraphs. Problem dates
+ back to a series of commits from March 2002 to February 2003,
+ straddling the introduction of the `schar` request in November
+ 2002. --GBR}
+
+ Fixes <https://savannah.gnu.org/bugs/?62955>.
+
+2022-09-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Slightly simplify new `XN` macro feature to align it more
+ closely with Berkeley TOC macro behavior; don't prepend the
+ table of contents entry with the section number (`\*[SN]`). If
+ desired, a document can define `XN-REPLACEMENT`. This does not
+ regress "pdfmark.ms" because it uses an alternative, older
+ implementation of these features from "spdf.tmac".
+
+ * tmac/s.tmac (XH-UPDATE-TOC): Update comments.
+ (XN-REPLACEMENT): Do it.
+
+2022-09-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdf.tmac (pdf*href-I): Call `pdf:error` macro by its
+ correct name. Both this macro file and
+ contrib/pdfmark/pdfmark.tmac seem to want to use the 'pdf'
+ prefix for their macro names, with much confusing overlap.
+ Problem dates back to commit 87046b2948, 2011-07-26.
+
+2022-09-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_URW_FONTS_CHECK): If Ghostscript or awk are
+ unavailable, skip only the prepopulation of the URW font search
+ path instead of the entire check. This way we still locate the
+ URW fonts if they are in one of several standard locations.
+
+ Fixes <https://savannah.gnu.org/bugs/?62775>.
+
+2022-09-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Trivially refactor.
+
+ * src/roff/troff/input.cpp (do_name_test): Boolify and rename
+ local variables to..."impredicate" their names.
+ - bad_char -> got_bad_char
+ - some_char -> got_some_char
+
+2022-09-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grodvi, ...]: Trivially refactor.
+
+ Tidy up #includes of the "assert.h" header, which we locally
+ provide to ensure a C99-conformant implementation. Drop
+ inclusion of header from files that don't directly need it, add
+ it where they do, and spell the inclusion consistently with
+ double quotes to cue the reader of its local status.
+
+ * src/devices/grodvi/dvi.cpp:
+ * src/devices/grolj4/lj4.cpp:
+ * src/libs/libdriver/printer.cpp:
+ * src/preproc/eqn/box.cpp:
+ * src/preproc/eqn/delim.cpp:
+ * src/preproc/eqn/pile.cpp:
+ * src/preproc/eqn/script.cpp: Add inclusion.
+
+ * src/include/driver.h:
+ * src/libs/libgroff/fontfile.cpp:
+ * src/preproc/eqn/eqn.h:
+ * src/preproc/html/pushback.cpp:
+ * src/preproc/refer/refer.h:
+ * src/preproc/tbl/table.h:
+ * src/utils/addftinfo/addftinfo.cpp: Drop inclusion.
+
+ * src/include/itable.h:
+ * src/include/stringclass.h:
+ * src/libs/libbib/linear.cpp:
+ * src/libs/libbib/search.cpp:
+ * src/libs/libgroff/color.cpp:
+ * src/libs/libgroff/font.cpp:
+ * src/libs/libgroff/nametoindex.cpp:
+ * src/libs/libgroff/prime.cpp:
+ * src/libs/libgroff/searchpath.cpp:
+ * src/preproc/html/pre-html.cpp:
+ * src/preproc/preconv/preconv.cpp:
+ * src/preproc/soelim/soelim.cpp:
+ * src/utils/indxbib/indxbib.cpp:
+ * src/utils/lkbib/lkbib.cpp:
+ * src/utils/lookbib/lookbib.cpp: Respell inclusion.
+
+ Fixes <https://savannah.gnu.org/bugs/?63079>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-09-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff, ...]: Trivially refactor.
+
+ Boolify and rename internal library function from
+ `invalid_input_char` to `is_invalid_input_char`.
+
+ * src/include/lib.h: Do it.
+
+ * src/libs/libgroff/font.cpp (text_file::next_line):
+ * src/preproc/eqn/lex.cpp (file_input::read_line):
+ * src/preproc/eqn/main.cpp (read_line, main):
+ * src/preproc/pic/lex.cpp (file_input::read_line,
+ simple_file_input::get, simple_file_input::peek):
+ * src/preproc/pic/main.cpp (top_input::get, top_input::peek)
+ (do_file):
+ * src/preproc/refer/command.cpp (input_stack::push_file):
+ * src/preproc/refer/refer.cpp (do_file, do_bib):
+ * src/roff/troff/env.cpp (environment::make_tag):
+ * src/roff/troff/input.cpp (file_iterator::fill)
+ (file_iterator::peek, get_char_for_escape_parameter)
+ (transparent_translate, read_request, asciify)
+ (input_char_description, read_string, transparent_file,
+ set_string): Update call sites.
+
+2022-09-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Tweak diagnostic messages.
+
+ * src/roff/troff/input.cpp (token::description)
+ (input_char_description): Consistently use articles in
+ descriptive noun phrases.
+
+2022-09-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Tweak diagnostic messages.
+
+ * src/roff/troff/input.cpp (non_empty_name_warning): Say
+ "identifier", not "name", in diagnostic message; it can be
+ thrown for attempted assignments to invalid register
+ identifiers, and some of our documentation refers to identifiers
+ in the name space shared by requests, macros, strings, and
+ diversions as "names".
+
+ * src/roff/troff/env.cpp (hyphen_trie::read_patterns_file):
+ * src/roff/troff/input.cpp (get_char_for_escape_parameter)
+ (token::usable_as_delimiter, non_empty_name_warning)
+ (pipe_source, psbb_locator::psbb_locator, open_request)
+ (opena_request, define_class, pipe_output, system_request):
+ Consistently say "_is_ not allowed". The zero copula poses too
+ great a risk of incomprehension IMO.
+
+2022-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Add internal string `doc-Lk-font` to manage the typeface
+ in which to render URIs.
+
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Add it. Use roman instead of (Courier)
+ bold. This is more consistent with man(7)'s `UR` and less with
+ mandoc(1).
+
+ * tmac/doc.tmac (Lk): Use it instead of `doc-Sy-font`.
+
+2022-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Fix Savannah #59738.
+
+ * tmac/doc.tmac (Lk): Process further macro arguments more like
+ other macros do, calling `doc-print-recursive`. This permits
+ recognition of end-of-sentence punctuation in the argument list.
+
+ Fixes <https://savannah.gnu.org/bugs/?59738>.
+
+2022-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Regression-test Savannah #59738.
+
+ * tmac/tests/doc_Lk-respect-sentence-ending-punctuation.sh: Do
+ it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Fix code style nit. Rename `doc-arg-limit` to
+ `doc-arg-count`. This register doesn't track any sort of limit
+ on the number of arguments you can give to an mdoc(7) macro, or
+ anything like that. It is simply a count of the number of
+ arguments visible to the currently operating macro.
+
+ * tmac/doc.tmac:
+ * tmac/mdoc/doc-common:
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff:
+ * tmac/mdoc/doc-syms: Do it.
+
+2022-09-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Fix errors in documentation regarding which escape
+ sequences accept newlines as argument delimiters, and other
+ inaccuracies.
+
+ * doc/groff.texi (Escape Sequences): Cover general cases before
+ exceptional ones. Leaders can be used as argument delimiters.
+ Call out letters and numerals as (usually) usable as well.
+ Correct an almost completely inaccurate list of escape sequences
+ that accept a newline as an argument delimiter: \A, \b, \o, \w,
+ \X, and \Z do; \B does not. Correct example of use of newline
+ as delimiter with \o escape sequence. Stop referring to the
+ decimal point as an "operator". Drop "newline" from a list of
+ prohibited delimiters by several escape sequences since it has
+ already been discussed.
+
+ * man/groff.7.man (Escape sequences): Replace weaksauce cross
+ reference to our Texinfo manual with a proper discussion of
+ acceptable delimiters in escape sequences, synced with the
+ foregoing change. Stop using quotation marks around escape
+ sequences, except for "\ " which obviously needs it.
+
+ Fixes <https://savannah.gnu.org/bugs/?63002>. Thanks to Dave
+ Kemper for the report.
+
+2022-09-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Don't throw a spurious warning when using newline as
+ delimiter with the few escape sequences that permit this.
+
+ * src/roff/troff/input.cpp (do_overstrike, do_bracket, do_width)
+ (do_special): Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?63011>. Thanks to Bjarni
+ Ingi Gislason for the report and Dave Kemper for the discussion.
+
+2022-09-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Add regression test for Savannah #63011.
+
+ * src/roff/groff/tests/\
+ some_escapes_accept_newline_delimiters.sh: Do it.
+ * src/roff/groff/groff.am (groff_TESTS): Run it.
+
+2022-09-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_special): Fix code style nit;
+ align function definition with declaration (internal linkage).
+
+2022-09-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grops/ps.cpp (ps_printer::special)
+ (resource_manager::process_file): Fix code style nit. Mark
+ static structs initialized within functions and never modified
+ thereafter as `const`. This attempts to work around an apparent
+ false positive from AddressSanitizer. If it doesn't pacify
+ ASAN, please explain to me how constant structure members
+ initialized to string literals and pointers to functions within
+ the translation unit can ever be null. If that is infeasible,
+ please report a bug to your compiler vendor.
+
+ Fixes (addresses, at any rate) https://savannah.gnu.org/bugs/\
+ ?61643>. Thanks to Bjarni Ingi Gislason for the report.
+
+2022-09-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Refactor: relocate most rendering option handling to
+ "doc.tmac" from "doc-ditroff" and "doc-nroff", cutting down on a
+ lot of duplication. The `S` register retains separate handling.
+
+ * tmac/doc.tmac:
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Do it.
+
+2022-09-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff (doc-setup-page-layout): In troff mode,
+ if the user does not define the `LL` register, use the device's
+ default line length, not 6.5 inches. If the user does not
+ define the `LT` register, make the default line length for
+ titles the same as the regular line length, not 6.5 inches
+ independently of it. This is consistent with man(7)'s handling
+ of `LL` and `LT`.
+
+2022-09-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Support `AD` string to set default adjustment mode.
+
+ * tmac/mdoc/doc-common (Sh): Set adjustment mode to
+ user-specified default, not troff's default (and not only in
+ troff mode).
+
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Process `AD` string setting from command
+ line as man(7) does.
+
+ * tmac/groff_mdoc.7.man (Formatting with groff, troff, and
+ nroff): Document it.
+
+ * NEWS: Add and update items.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?63046>.
+
+2022-09-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac (doc-tag-list): Fix code style nit: don't give
+ `ad` request a numeric argument. Say `l` instead of `0`.
+
+2022-09-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Align inter-paragraph spacing with man(7).
+
+ * tmac/mdoc/doc-common: Use `doc-paragraph-space` when spacing
+ prior to section and subsection headings instead of spacing by
+ the 1v default.
+ * tmac/mdoc/doc-ditroff: Align inter-paragraph distance amount
+ in troff mode with man(7), reducing to 0.4v from 0.5v.
+
+2022-09-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-nroff: Map monospaced fonts (CR, CB, CI, CBI) to
+ standard styles as man(7) has done for 15 years. This silences
+ warnings from the formatter when a man page attempts to use
+ fonts from the Courier family in tbl(1) tables, which is about
+ the only place a reasonable man page attempts such a thing.
+
+2022-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Stop prefixing center header with name of operating
+ system. This was hard-coded to "BSD" and stuck on all mdoc(7)
+ pages using a default manual section number, regardless of host
+ operating system. Bad idea. Further, the argument to the `Os`
+ call, if any, or a default, is always disclosed in the left
+ footer.
+
+ * tmac/mdoc/doc-common: Do it.
+ (Dt): Initialize `doc-volume` as empty and annotate it;
+ calling the macro with a numeric second argument overrides the
+ fallback default of "LOCAL". A slash is no longer needed to
+ separate a recognized architecture string from the OS name, so
+ drop it.
+
+ * tmac/tests/doc_smoke-test.sh: Update test expectations.
+
+2022-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Drop dead code. The register
+ `doc-volume-operating-system-ateol`, introduced in groff 1.18
+ {July 2002}, was being tested but never set to a nonzero value.
+ In fact, it seems never to have been.
+
+ * tmac/mdoc/doc-common: Get rid of it...
+ (Dt): ...and the dependent block.
+
+2022-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Make `Ux` render "Unix" in mixed case.
+
+ * tmac/mdoc/doc-syms (Ux): Do it. Also remove local string
+ after we're done with it.
+
+ Continues work begun prior to groff 1.22.4 release.
+
+2022-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Align spacing around headers with man(7).
+
+ * tmac/doc.tmac (doc-save-global-vars, doc-restore-global-vars):
+ * tmac/mdoc/doc-common (Rd):
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Stop defining, saving, and restoring
+ `doc-header-space`.
+
+ * tmac/mdoc/doc-common (doc-header): When starting new document
+ and not continuously rendering, space by one half-inch instead
+ of by the now-defunct `doc-header-space` amount (which,
+ strictly, should not have applied to this measurement). If
+ continuously rendering, extend page length by 1v to accommodate
+ header line. After formatting header, if not continuously
+ rendering, space to 1 inch below first text baseline.
+
+2022-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Support `C` register for consecutive page numbering.
+
+ * tmac/mdoc/doc-common (Dd): Reset page number to 1 upon new
+ document only if not consecutively numbering.
+
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Process `C` register setting from command
+ line as man(7) does.
+
+ * tmac/groff_mdoc.7.man (Formatting with groff, troff, and
+ nroff): Document it.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?63046>.
+
+2022-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Align trap management more closely with man(7).
+
+ * tmac/mdoc/doc-common: Call new macro (see below)
+ `doc-set-up-continuous-rendering` when initializing, if that
+ mode is configured.
+ (doc-ne): New macro replaces `ne` request
+ in continuous rendering mode. It extends the page length by the
+ amount in the argument or by 1v if none given.
+ (doc-bp): New macro replaces `bp` request in continuous
+ rendering mode, setting the page length to the vertical drawing
+ position.
+ (doc-set-up-continuous-rendering): New macro renames requests to
+ emplace the foregoing.
+ (Dd): Interpret this macro call strictly as starting a new
+ mdoc(7) document. (andoc.tmac already makes this assumption,
+ and has for over 20 years. groff_mdoc(7) and mandoc_mdoc(7)
+ also prescribe the sequence `Dd`, `Dt`, `Os`.) We require this
+ invariant even more rigidly now because it's the only way we can
+ be sure that we can process multiple documents while rendering
+ headers and footers with information corresponding to the
+ appropriate document. (man(7)'s `TH` has an advantage here in
+ that calling it is "atomic": from its arguments alone you can
+ obtain everything you need to know to format the header and
+ footer. In mdoc(7), permuting the initialization macro order
+ reliably produces chaos.) Break the page (if necessary)
+ _before_ processing any arguments (instead of after), to flush
+ the previous page's footer. Stop calling `doc-set-up-titles`
+ here; we don't have enough information to do that yet. Also
+ stop writing the PDF bookmark here, because `doc-document-title`
+ and `doc-section` will not reflect the new page content yet.
+ (Os): Once the `doc-operating-system` string content has been
+ determined, call `doc-set-up-titles`, write the PDF bookmark for
+ the page, and call `doc-header`, causing the page header to be
+ formatted. These changes further imply a stronger requirement
+ on initialization macro ordering being canonical.
+
+ Fixes <https://savannah.gnu.org/bugs/?62774> (7/7).
+
+2022-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Trivially refactor. Relocate string and macro
+ definition within file. mdoc(7) mandates that the document
+ setup macros `Dd`, `Dt`, and `Os` be called in that order;
+ arrange their definitions accordingly, for maintainability.
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Refactor. Rename strings and macro for clarity. These
+ things don't only affect headers.
+ - doc-header-string -> doc-pageref
+ - doc-header-string-saved -> doc-pageref-saved
+ - doc-setup-header -> doc-set-up-titles
+
+ * tmac/doc.tmac:
+ * tmac/mdoc/doc-common: Do it.
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Refactor. There is no difference in
+ `doc-header-string` and `doc-setup-header` between the files
+ "doc-ditroff" and "doc-nroff", so define them only once, in
+ "doc-common".
+
+ * tmac/mdoc/doc-common:
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Do it.
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Align footer management more closely with man(7).
+
+ * tmac/doc.tmac (doc-save-global-vars, doc-restore-global-vars):
+ * tmac/mdoc/doc-common (Rd):
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Stop defining, saving, and restoring
+ `doc-footer-space`.
+
+ * tmac/mdoc/doc-common (doc-break-body-text): New macro, called
+ only when not continuously rendering, schedules a page break.
+ (doc-footer): Stop vertically spacing by `doc-footer-space`,
+ instead relying upon a trap to move us here.
+
+ * tmac/mdoc/doc-ditroff (doc-setup-header):
+ * tmac/mdoc/doc-nroff (doc-setup-header): Set traps at the end
+ of the page where man(7) does by default; break the body text at
+ 1 inch from the page bottom, and write the footer at ½ inch.
+
+ * tmac/mdoc/doc-nroff (doc-setup-header): Add 1/6 em "thin
+ space" between man page name and parenthesized section, for
+ precise parity with doc-ditroff implementation. (`\|` does not
+ take up any character cells on nroff devices.)
+
+ Fixes <https://savannah.gnu.org/bugs/?62774> (6/7).
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (Dt, Dd): Emit diagnostic warnings if
+ macros called with no arguments.
+
+ Fixes <https://savannah.gnu.org/bugs/?62774> (5/7).
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Fix code style nit: stop using Control+G as an escape
+ sequence argument delimiter. This is not necessary in groff and
+ hasn't been for at least thirty years. See the node/section
+ "Implementation Differences" of our Texinfo manual. Our mdoc
+ implementation does not operate in compatibility mode, so using
+ control characters like this obfuscates input to no advantage.
+
+ * tmac/doc.tmac:
+ * tmac/mdoc/doc-common:
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff:
+ * tmac/mdoc/doc-syms: Do it.
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (doc-footer): Pull more footer concerns
+ into this macro. Don't bail out if continuously rendering;
+ instead, format the appropriate footer text if we are. For now,
+ break the page only if we are not continuously rendering.
+ (doc-end-macro): Call `doc-footer` instead of formatting footer
+ here.
+
+ Fixes <https://savannah.gnu.org/bugs/?62774> (4/7).
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (doc-end-macro): When continuously
+ rendering, set the page reference (e.g., "ls(1)") in the right
+ footer instead of repeating the left footer. Thanks to Ingo
+ Schwarze for the discussion.
+
+ * tmac/tests/doc_smoke-test.sh: Update expectations of footer
+ regression test.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?62926>.
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (doc-end-macro): Reset strings to reduce
+ info leaks from one man page to the next.
+
+ Fixes <https://savannah.gnu.org/bugs/?62774> (3/7).
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (Dt): Stop reinitializing `doc-volume`
+ and `doc-section`. This is the job of package initialization
+ {and, soon, the end-of-input macro}.
+
+ Fixes <https://savannah.gnu.org/bugs/?62774> (2/7).
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common: Populate default date string
+ `doc-date-string` with "UNDATED".
+ (Dd, Dt, Os): Make more orthogonal: stop touching
+ `doc-topic-name`. It is "doc.tmac"'s job to initialize it and
+ the `Nm` macro's job to update it.
+ (Dd): Do nothing if given no arguments. (You can still blank
+ out the document date with an explicitly empty argument:
+ .Dd ""
+ .)
+
+ Fixes <https://savannah.gnu.org/bugs/?62774> (1/7).
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common: Change `doc-default-operating-system`
+ string from "BSD" to "GNU", per discussion with Ingo Schwarze.
+ See <https://lists.gnu.org/archive/html/groff/2022-07/\
+ msg00280.html>.
+
+ * tmac/tests/doc_smoke-test.sh: Update expectations of footer
+ regression test.
+
+2022-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common (Dt): Delete lingering and useless
+ definition of `doc-command-name` string. Thanks to Steffen
+ Nurpmeso for the report. See commit e9e92ee008, 27 August.
+
+2022-09-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/pic/pic.ypp (not_lower_than): Emit deprecation
+ warning for use of 'rand()' with a (non-empty) argument. The
+ man page has declared it thus for over 30 years, at least since
+ groff 1.02 (June 1991).
+
+2022-09-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/pic/pic.ypp (object_spec): Emit deprecation
+ diagnostic for "plot" command. The man page has declared it
+ thus for over 30 years, at least since groff 1.02 (June 1991).
+
+2022-09-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/pic/pic.ypp (placeless_element): Explicitly say
+ that an unsafe command is being ignored in diagnostic.
+
+2022-09-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/main.cpp (main): Drop man page reference from
+ deprecation diagnostics. The man page might be installed with a
+ prefix determined at configuration time, and that's too much
+ trouble to mess with for construction of a message. Trust the
+ user of these ancient options to try reading the man page with
+ the same name as the command.
+
+2022-09-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Revise discussion of measurements.
+
+ * doc/groff.texi: Drop Texinfo @codequote* command brackets
+ around revised sections; relevant nodes have been reviewed for
+ correct glyph usage. Move concept index entries for obsolescent
+ term "machine units" to same location as "basic units".
+ Bump document date.
+ (Measurements): Rewrite presentation. We have already
+ introduced page geometry concepts, including the concept of
+ basic units.
+ (Motion Quanta): New subsection node; introduce this concept
+ much sooner, right after measurement units. Relocate
+ documentation of `.H` and `.V` registers from a miscellaneous
+ read-only register list here. Introduce example of rounding to
+ horizontal motion quantum.
+ (Default Units): Revise discussion. Stop abusing @result
+ notation in example.
+ (Built-In Registers): Relocate `.H` and `.V` as above.
+
+ * man/groff.7.man: Sync with Texinfo content updates.
+
+ Fixes <https://savannah.gnu.org/bugs/?61432>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-09-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Drop groff_filenames(5) document. It says nothing accurate that
+ is not covered elsewhere.
+
+ * contrib/groff_filenames: Delete.
+ * doc/doc.am (GROFF_MAN_PAGES): Drop.
+ * src/roff/groff/groff.1.man: Drop cross reference to it.
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?61818>.
+
+2022-09-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/tbl.1.man (Table data): Generalize discussion
+ of roff control line use in tables.
+ (Examples): Illustrate how to embed a comment in a table.
+
+2022-08-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * NEWS: man(7)'s `TS` no longer adds vertical space. See commit
+ 7ec36dc9b9, 30 July.
+
+2022-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/main.cpp (main): Issue deprecation warning
+ upon use of '-p' or '-s' options. The eqn(1) man page has
+ documented these as deprecated since at least groff 1.02 (June
+ 1991). Don't count on them sticking around another 30 years.
+
+2022-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/main.cpp (main): Clarify error diagnostics
+ regarding invalid option arguments. Identify the option being
+ handled at the time and characterize the argument as "invalid",
+ not "bad".
+
+2022-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [eqn]: Drop support for undocumented '-D' option. It has been
+ undocumented, and issued a warning of its obsolescence upon use,
+ for 30 years, since groff 1.06 (September 1992). That's plenty
+ long enough for a deprecation cycle.
+
+ * src/preproc/eqn/main.cpp (main): Do it.
+ * NEWS: Add item.
+
+2022-08-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: (EX, EE): Always break line, even if call invalid.
+
+ * tmac/an.tmac (EX, EE):
+ * tmac/an-ext.tmac (EX, EE): Do it. Ingo Schwarze pointed out
+ that page authors will expect breaking semantics from these
+ macros even if using them in an ill-formed way. In a
+ well-formed document, the breaks are redundant but harmless (the
+ later `nf` and `fi` requests, respectively, also cause breaks).
+
+2022-08-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Trivially refactor.
+
+ * tmac/doc.tmac:
+ * tmac/mdoc/doc-common: Rename string `doc-command-name` to
+ `doc-topic-name`; the former is misleading for man pages not in
+ sections 1, 6, or 8.
+
+2022-08-25 Bjarni Ingi Gislason <bjarniig@vortex.is>
+
+ * man/groff_char.7.man: Fix bad example syntax.
+
+ Fixes <https://savannah.gnu.org/bugs/?62959>.
+
+2022-08-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Trivially refactor.
+
+ * tmac/mdoc/doc-common:
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Stop using "Null" as an empty string
+ indicator when comparing a string interpolation to an empty
+ parameter will serve just as well; it is also more idiomatic.
+ The string in question, `doc-section`, is never formatted if it
+ is empty anyway; the very tests at issue, which populate
+ `doc-header-string`, ensure this.
+
+2022-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (environment::set_family): Throw error
+ if user requests a font family that (when combined with the
+ current style) can't be resolved to a real font name. Fixes a
+ regression introduced by me in commit d8cb8cf9d8, 2021-09-15,
+ arising from a revision of font selection logic in node.cpp to
+ enable a bunch of _other_ font error diagnostics.
+
+ Fixes <https://savannah.gnu.org/bugs/?62941>. Thanks to Dave
+ Kemper for the report and two useful end points for a bisection.
+
+2022-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (environment::set_family): Add some
+ paranoia. Add `assert()`s on the previous font mounting
+ position still being valid and the font family dictionary lookup
+ not returning a null pointer. Add an early return for the
+ latter case (which should be impossible).
+
+2022-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/node.cpp (font_family::make_definite):
+ Refactor. Rename parameter from inscrutable `i` to
+ `mounting_position`. Add `assert()` to enforce invariant: we're
+ passed a mounting position that is nonnegative. Use `pos` as
+ short alias of parameter once we're into the function body.
+ Relocate conditional branches to front-load early returns as
+ well as those requiring little code to handle. This reduces the
+ average indentation level of the function, a readability win.
+
+2022-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Restore robustness to `EE` misuse.
+
+ * tmac/an.tmac: Add `an*is-in-example` register to track state
+ of within-exampleness. Not doing so can cause a spurious use of
+ `EE` to wrongly set the inter-paragraph distance to zero.
+ (TH): Initialize register.
+ (EX): Test register; if set, ignore macro call and, if
+ `CHECKSTYLE` warnings are on, throw diagnostic. Set register.
+ (EE): Test register; if clear, ignore macro call and, if
+ `CHECKSTYLE` warnings are on, throw diagnostic. Clear register.
+
+ * tmac/an-ext.tmac (EX, EE): Similar, using `mX` register.
+ Because AT&T troff had no `return` request, invert the sense of
+ the tests and put the entire macro bodies inside conditionals.
+
+ This regressed post-1.22.4. Thanks to Ingo Schwarze for the
+ report and a proposed patch.
+
+2022-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Refactor. Rename `mX` to `mZ` so we can use
+ `mX` for an "in-example" state register in a future commit.
+ Rename `mE` to `mF` to store the current font's mounting
+ position. Bizarrely, `mF` was not already used for this
+ purpose.
+
+2022-08-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/error.cpp (do_error_with_file_and_line):
+ Trivially refactor. Use separate string constant for invariant
+ material. (This will make it easier to, for example, store the
+ diagnostic level strings in an array that can be indexed by
+ their corresponding `enum` type.)
+
+2022-08-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (fatal_with_file_and_line)
+ (error_with_file_and_line, debug_with_file_and_line): Align more
+ closely with GNU Coding Standards regarding diagnostics: don't
+ suffix the colon after the program name with a space when
+ location information follows.
+
+2022-08-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grohtml/grohtml.1.man: Fix erroneous claim.
+ Images are not generated when "baseline rules" or "box rules"
+ are encountered in the input. These are troff special
+ characters; the former is converted to an underscore and the
+ latter to U+2502, "box drawings light vertical". This remains
+ true even if a series of them is drawn with the `\l` escape
+ sequence. (I also checked vertical line drawing with `\L`.
+ grohtml's handling of that provoked a rather wet eructation from
+ my lower esophageal sphincter--the output is assuredly not
+ correct. But it's still not an image.)
+
+2022-08-22 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Bug #62934 - after glyph remapped mark it as used
+
+ When many glyphs are remapped from code points above 255
+ such as writing documents in cyrillic with the U-TR fonts,
+ gropdf starts reusing code points in the range 128-255.
+ If subsequently one of those code points is actually required,
+ such as \(em (code 138), and it has been replaced by a
+ cyrillic, then it needs to be mapped to another free code.
+
+ To determine if a particular code point is free each glyph
+ has a USED flag. The bug was caused because after remapping
+ \(em to the next free glyph the USED flag was not set. So the
+ next new cyrillic character to be entered was given the same
+ code point as had been allocated to \(em.
+
+ * src/devices/gropdf/gropdf.pl: Set the USED flag on remapped
+ glyphs.
+
+ Fixes <https://savannah.gnu.org/bugs/?62934>.
+
+ Thanks to Nikita Ivanov for spotting the problem and testing
+ the fix.
+
+2022-08-20 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Bug #62923 - problem using aliased glyphs
+
+ With a large font if 2 characters above the 255 code
+ point limit are aliased, the aliased glyph has incorrect meta
+ data.
+
+ * src/devices/gropdf/gropdf.pl: Instead of duplicating a pointer
+ to the font metadata, duplicate the data itself. Then, if the
+ glyph is remapped to a code point under 256, the metadata is
+ preserved.
+
+ Fixes <https://savannah.gnu.org/bugs/?62923>. Thanks to Nikita
+ Ivanov for the report.
+
+2022-08-18 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Improve parsing of troff font files.
+
+ * src/devices/gropdf/gropdf.pl: Allow the glyph code number
+ to be octal or hex as well as a decimal number. If entity_name
+ is missing use name instead.
+
+2022-08-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Support pic(1) "flyback" feature.
+
+ * tmac/s.tmac (PF): Add macro; it does what `PE` formerly did,
+ minus vertical spacing.
+ (PE): Call `PF` and vertically space as before.
+
+ * doc/groff.texi (ms Insertions):
+ * doc/ms.ms (Tables, figures, equations, and references):
+ * tmac/groff_ms.7.man (Tables, figures, equations, and
+ references): Document it.
+
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?60558>.
+
+2022-08-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (@PS): Validate better; check for 2 arguments
+ exactly.
+
+2022-08-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pic]: Recognize `.PY` as synonym of `.PF`.
+
+ * src/preproc/pic/main.cpp:
+ * src/preproc/pic/pic.h: Add new Boolean variable,
+ `want_alternate_flyback` to record `.PY` usage.
+
+ * src/preproc/pic/main.cpp (top_input::get, top_input::peek):
+ Recognize it. Update diagnostic messages to mention it.
+ (main): Define `PY` troff macro as empty if not defined.
+
+ * src/preproc/pic/troff.cpp (troff_output::finish_picture):
+ Don't advance the vertical position if `want_alternate_flyback`.
+ Write out the `PY` macro call if it was on the input.
+
+ * src/preproc/pic/pic.1.man: Document it.
+
+ * tmac/pic.tmac (PY): Define the same as `PF`.
+
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?62901>.
+
+2022-08-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pic]: Refactor `flyback_flag`.
+
+ * src/preproc/pic/main.cpp:
+ * src/preproc/pic/pic.h:
+ * src/preproc/pic/troff.cpp: Rename to `want_flyback`.
+
+ * src/preproc/pic/main.cpp:
+ * src/preproc/pic/pic.h: Demote type from `int` to `bool`.
+
+ * src/preproc/pic/main.cpp (top_input::get, top_input::peek):
+ Use parentheses to clarify operation precedence.
+
+2022-08-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/eqn.1.man: Expand to include lists of
+ recognized primitives and predefined macros.
+
+2022-08-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * NEWS: Add item for new groff mm `V` register support.
+
+2022-08-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/lex.cpp (do_delim): Recognize "delim on" even
+ in compatibility mode, enabling tbl to toggle eqn delimiter
+ recognition when it is run in compatibility mode as well.
+ * src/preproc/eqn/eqn.1.man (Controlling delimiters): Update.
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?62852>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-08-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (TH): Fix spurious complaint from `CHECKSTYLE`
+ feature when a custom manual section title is declared for a
+ standard section number. Thanks to Quentin Monnet for the
+ report.
+
+2022-07-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdfpic.tmac: Finish incomplete string renames. Continues
+ 0fd6ab6b4c, 21 January.
+ pdfpic*file-name -> pdfpic*file-name-base
+ pspic-args -> pdfpic*pspic-args
+
+2022-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (TS): Stop inserting space before tables. Unlike
+ ms(7), man(7) has no concept of "displays" and thus none of
+ "display distance". It is up to the page author to use
+ paragraphing macros around tables if vertical space is desired.
+ And not up to us to impose it.
+
+ Fixes <https://savannah.gnu.org/bugs/?62841>.
+
+2022-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Regression-test Savannah #62841.
+
+ * tmac/tests/an_TS-adds-no-vertical-space.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::do_bottom): Avoid
+ overprinting a double-boxed table's bottom border on nroff
+ devices.
+
+2022-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Expand regression test for Savannah #49390. Check for
+ overlap of double box borders, too.
+
+ * src/preproc/tbl/tests/\
+ do-not-overlap-bottom-border-in-nroff.sh: Do it.
+
+2022-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix Savannah #49390.
+
+ * src/preproc/tbl/table.cpp (table::do_bottom): Avoid
+ overprinting a boxed table's bottom border on nroff devices.
+
+ Fixes <https://savannah.gnu.org/bugs/?49390>. Thanks to Osamu
+ Sayama for the report.
+
+2022-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Regression-test Savannah #49390.
+
+ * src/preproc/tbl/tests/\
+ do-not-overlap-bottom-border-in-nroff.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+2022-07-28 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Improve slant application to lowercase Greek letters.
+ <https://lists.gnu.org/archive/html/groff/2022-07/msg00210.html>
+
+ * tmac/pdf.tmac: Slant only if the glyph is sourced from a
+ special font, not a regular (text) font containing Greek glyphs.
+
+2022-07-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Add italic correction support to `I` and `BI`
+ macros. Call `par*define-font-macro` with newly recognized
+ third argument indicating that italic corrections should be
+ applied.
+ (par*define-font-macro): Apply the corrections if directed.
+
+2022-07-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (input_char_description): Clear
+ static buffer on every entry to the function so that calling it
+ twice in succession where the second call populates the buffer
+ with less data than the first doesn't leave garbage characters
+ in a diagnostic message. Problem appears to date back to 1991
+ or earlier.
+
+ Fixes <https://savannah.gnu.org/bugs/?62813>.
+
+2022-07-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (token::usable_as_delimiter):
+ (do_non_interpreted, interpolate_arg): Recast diagnostic
+ messages for clarity.
+
+2022-07-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Initialize section number registers. Fixes
+ warnings when starting section numbering at a depth greater than
+ 1.
+
+ Fixes <https://savannah.gnu.org/bugs/?62812>.
+
+2022-07-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PAGE): Use 'grep -q' instead of redirecting
+ standard output to null device. The '-q' option was
+ standardized in POSIX Issue 5 (1997) or earlier. Also drop the
+ redirection of the standard error stream; we have already
+ checked the file named in "$descfile" for existence and
+ readability. grep should thus not emit diagnostic messages.
+
+2022-07-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PAGE): Macro used awk(1) without
+ `AC_REQUIRE`-ing a relevant macro or checking for its existence.
+ Fortunately, sed is powerful enough for our needs. Remove
+ dependency on awk. Cope with "search" directive in resolv.conf
+ having multiple arguments. Match "domain" directive in same
+ file instead of "dom", which I cannot find attested (this logic
+ dates to 1991). Rename `dom` shell variable to `domains` for
+ clarity, since its multiplicity could be greater than 1.
+
+2022-07-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PAGE): Refactor: drop AC_DEFINE of
+ `PAGEA4`. This symbol appears to be a relic; it is nowhere
+ tested or dereferenced.
+
+2022-07-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tty-char.tmac: Drop definition of \[sd] special
+ character. This was superseded by commit 78e666246c, 8 May,
+ which defined a fallback for the character in tty.tmac instead.
+ Thanks to Dave Kemper for the catch.
+
+2022-07-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/pdfpic_does-not-choke-on-bad-pdfinfo-output.sh:
+ Skip test if "pdfinfo" command not available.
+
+2022-07-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Add sanity checks for font description file generation
+ for PDF output device, prompted by discussion with Ingo
+ Schwarze. See <https://lists.gnu.org/archive/html/groff/\
+ 2022-06/msg00094.html>.
+
+ * font/devpdf/tests/basic-fonts-present.sh:
+ * font/devpdf/tests/urw-fonts-present.sh: Add files.
+
+ * font/devpdf/devpdf.am (font_devpdf_TESTS): Add the former test
+ unconditionally, and the latter only if `HAVE_URW_FONTS`.
+
+2022-07-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/devpdf.am: Refactor to simplify. Now that
+ symbol.map lives in the "devpdf/generate" directory along with
+ the other map files, it doesn't need a dedicated Makefile target
+ to produce it.
+ (DEVPDFFONTMAP_1, DEVPDFFONTMAP_2): Coalesce and rename to...
+ (devpdffontmapdata): ...this.
+ (font/devpdf/map/symbol.map:): Drop target.
+ (devpdffontmap_DATA, font/devpdf/download): Update dependencies.
+
+2022-07-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/util/BuildFoundries.pl (LoadFoundry): Recast
+ diagnostic message so that the user understands the consequence
+ of failure to locate a Type 1 font file (that isn't one of the
+ base 14 PostScript level 1 fonts): the font will be unavailable
+ for the "pdf" output device.
+
+2022-07-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/util/BuildFoundries.pl (LoadFoundry): Separate
+ lists of Type 1 font names with spaces as well as commas, for
+ better diagnostic message readability. Also begin message in
+ lowercase (per GNU Coding Standards).
+
+2022-07-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/util/BuildFoundries.pl (LoadFoundry): Verify that
+ `$foundrypath->[$j]` is defined before operating on it.
+
+2022-07-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [afmtodit]: Clarify diagnostic message.
+
+ * src/utils/afmtodit/afmtodit.pl: When we have excess Adobe
+ Glyph List mappings for a groff special character identifier
+ {making the reverse mapping from groff special character to font
+ glyph name ambiguous}, report that we're ignoring the excess.
+ Use "print STDERR" instead of Perl "warn" built-in since we want
+ diagnostic messages to start with the name of the program
+ emitting them.
+
+2022-07-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Name and place PS->groff glyph name maps consistently.
+
+ * font/devps/symbolmap: Rename from this...
+ * font/devps/generate/symbol.map: ...to this.
+
+ * font/devpdf/devpdf.am (font/devpdf/map/symbolmap): Rename
+ target...
+ (font/devpdf/map/symbol.map): ...to this.
+ (font/devpdf/map/symbol.map): Copy "devps" version of file from
+ its new location in the "generate" subdirectory.
+
+ * font/devpdf/Foundry.in: Reflect rename.
+
+ * font/devps/generate/Makefile (symbolmap): Rename target...
+ ($(srcdir)/symbol.map): ...to this.
+
+ * font/devps/devps.am (DEVPSGENFILES, EXTRA_DIST):
+ * font/devps/generate/Makefile (S, EURO $(SPECIALFONTS), clean):
+ * src/utils/afmtodit/afmtodit.1.man: Reflect rename and
+ relocation.
+
+ * font/devps/generate/dingbats.rmap: Rename from this...
+ * font/devps/generate/dingbats-reversed.map: ...to this.
+
+ * font/devps/devps.am (DEVPSGENFILES):
+ * font/devps/generate/Makefile (ZDR):
+ * src/utils/afmtodit/afmtodit.1.man: Reflect rename.
+
+ * font/devps/generate/lgreekmap: Rename from this...
+ * font/devps/generate/slanted-symbol.map: ...to this.
+
+ * font/devps/devps.am (DEVPSGENFILES):
+ * font/devps/generate/Makefile (SS):
+ * src/utils/afmtodit/afmtodit.1.man: Reflect rename.
+
+ * font/devps/generate/textmap: Rename from this...
+ * font/devps/generate/text.map: ...to this.
+
+ * font/devpdf/Foundry.in:
+ * font/devpdf/devpdf.am (DEVPDFFONTMAP_1):
+ * font/devps/devps.am (DEVPSGENFILES):
+ * font/devps/generate/Makefile (TEXTMAP):
+ * src/devices/gropdf/gropdf.1.man:
+ * src/devices/grops/grops.1.man:
+ * src/utils/afmtodit/afmtodit.1.man: Reflect rename.
+
+2022-07-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/ms.ps): Add dependency on "eqn", and call
+ groff with "-e" option.
+ * src/utils/grog/tests/smoke-test.sh: Update expected "grog"
+ output for the ms.ms document.
+
+2022-07-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/ms.ps): Add dependency on "tbl".
+
+2022-07-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/node.cpp (suppress_node::tprint): Add source
+ file line number after its name when emitting "grohtml-info", to
+ aid debugging.
+
+2022-07-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/node.cpp (get_register, get_string): Reorder
+ null pointer inequality comparisons; they don't need to be in a
+ funny order because it's pretty hard to mistype `!=` as an
+ assignment operator. Annotate them as null pointers to ease any
+ future migration to ISO C++11. Use primitive type constructor
+ instead of C-style cast operator; this seems more idiomatic.
+
+2022-07-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (generateImages): Flush the
+ standard error stream after writing to it in a loop.
+
+2022-07-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (RP): Recognize new optional arguments
+ `no-renumber` and `no-repeat-info`, the latter as a synonym for
+ the existing `no`. The former suppresses the page number
+ manipulation that normally occurs. Drop now-unnecessary `pn 0`
+ request.
+ (top level, cov*first-page-init, RP, cov*print): Rename
+ `cov*rp-format` to `cov*use-rp-format` for clarity.
+ (cov*break-page): New macro breaks the cover page at the end,
+ resetting next page number to 1 only if desired by user.
+ (cov*print, cov*rp-print): Call `cov*break-page` instead of
+ invoking `bp`.
+
+ * doc/groff.texi (Document Description Macros) <RP>:
+ * doc/ms.ms (Document description macros) <RP>:
+ * tmac/groff_ms.7.man (Document description macros) <RP>:
+ Document them.
+
+ * NEWS: Add item.
+
+2022-07-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Rename register `cov*rp-no` to
+ `cov*rp-no-repeat-info`.
+
+2022-07-08 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ * font/devpdf/util/BuildFoundries.pl (LocateFile): Some systems
+ store .afm files in a parallel directory to the Type 1 files,
+ restore original path after checking for parallel directory.
+
+2022-07-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/devpdf.am (font/devpdf/download): Call
+ "BuildFoundries" with new `--strict` option so that the build
+ fails if the AFM files for the URW fonts can't be found.
+
+2022-07-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/util/BuildFoundries.pl: Add Boolean-valued scalar
+ `beStrict` (defaults false) and new command-line option
+ `--strict` to make it true.
+ (LoadFoundry): Check return value of subroutine `LocateAF`.
+ Emit diagnostic if it is null, as a warning if not "strict", and
+ fatal if so.
+
+2022-07-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/devpdf.am (font/devpdf/util/BuildFoundries): Add
+ dependency on "afmtodit" since "BuildFoundries" calls this
+ program when generating groff font description files from URW
+ fonts.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Fix Savannah #62690.
+
+ * tmac/s.tmac (P1, SC, UC, P2): Drop undocumented support for
+ document-private macros used by Kernighan & Cherry's
+ "Typesetting Mathematics -- User's Guide (Second Edition)".
+
+ Fixes <https://savannah.gnu.org/bugs/?62690>.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Fix Savannah #62688.
+
+ * tmac/s.tmac (DE): Set no-space mode when ending displays.
+ (@EN): Set no-space mode after outputting the display distance
+ so that it doesn't combine with inter-paragraph space.
+
+ Fixes <https://savannah.gnu.org/bugs/?62688>.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Regression-test Savannah #62688.
+
+ * tmac/tests/s_no-excess-space-around-displays.tmac: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Fix Savannah #62687.
+
+ * tmac/s.tmac (@MC): Honor `MINGW` register even when setting
+ only two columns, as clearly implied by our documentation.
+
+ Fixes <https://savannah.gnu.org/bugs/?62687>.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Regression-test Savannah #62687.
+
+ * tmac/tests/s_honor-MINGW-when-two-columns.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Fix Savannah #62686.
+
+ * tmac/s.tmac (@MC): Set no-space mode before doing a paragraph
+ reset, not after: we don't want vertical space at the top of the
+ first column when entering multi-column mode, because then it
+ doesn't align with the tops of subsequent columns.
+
+ Fixes <https://savannah.gnu.org/bugs/?62686>.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Regression-test Savannah #62686.
+
+ * tmac/tests/s_mark-column-start-correctly.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (IX): Drop.
+ * NEWS: Add item.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Add "sorry" implementations for documented but
+ unsupported Unix Version 7 ms macros. This way it's easier to
+ tell when a historical document needs one and this case is
+ distinguishable from a document-private macro warned about with
+ "groff -w mac".
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (UX): Drop undocumented support for this macro.
+ This implementation isn't consistent with historical ones, which
+ identified the trademark holder. But doing that is a problem,
+ so just stop trying to cope. Also, spelling Unix in full caps
+ was an imposition by the AT&T legal department on the CSRC.
+
+ "The name Unix is a trademark, originally owned by Bell Labs and
+ subsequently traded off like a baseball card among a number of
+ companies." -- Ben Klemens
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Replace incomplete documentation of unimplemented macros.
+
+ * doc/groff.texi (Missing ms Macros):
+ * doc/ms.ms (AT&T ms macros not appearing in groff ms): Drop,
+ replacing with...
+
+ * doc/groff.texi (Unix Version 7 ms Macros Not Implemented by
+ groff ms):
+ * doc/ms.ms (Unix Version 7 ms macros not implemented by groff
+ ms):
+ * tmac/groff_ms.7.man (Unix Version 7 macros not implemented by
+ groff ms): ...these.
+
+2022-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_translate): Throw an error
+ diagnostic when the user attempts to translate space characters.
+ {By contrast, translating _to_ [unbreakable, unadjustable]
+ spaces is an old troff hack often seen as ".tr ~ ", and largely
+ superseded by groff's "\~" escape sequence, now widely supported
+ by other troffs.}
+
+ Fixes <https://savannah.gnu.org/bugs/?60803>. Thanks to T. Kurt
+ Bond and Oliver Corff for the report.
+
+2022-07-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/pipeline.c: Refactor. Drop function rename via
+ preprocessor macro usage. Declare and define `c_error` by its
+ correct name.
+ (run_pipeline): Update call sites. Stop flushing standard error
+ stream after calling libgroff's `error` function (which
+ `c_error` wraps); libgroff already guarantees this operation.
+
+2022-07-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (abort_request): Flush the standard
+ error stream before exiting, to improve chances of user seeing
+ any message as arguments to the `ab` request.
+
+2022-06-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp
+ (char_buffer::run_output_filter): Die if platform supports
+ neither `fork()` nor `spawn()` for child process creation.
+
+2022-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (cleanup): Add function to tidy
+ memory before exiting.
+ (main): Register aforementioned function with `atexit()`. Die
+ if registration fails.
+
+2022-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (do_file): Die if `fclose()`
+ fails; such a situation suggests a pretty hosed environment.
+
+2022-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (checkImageDir): If `mkdir()`
+ fails, use `strerror()` to report the underlying problem.
+
+2022-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp: Refactor. Drop unnecessary
+ prototype for static function. Use idiomatic C++98 null pointer
+ constant. Annotate it as null pointer to ease any future
+ migration to ISO C++11. Boolify. Use C++98 bool data type
+ instead of preprocessor macros `TRUE` and `FALSE`. Demote some
+ global Boolean variables from `int` to `bool` and rename some to
+ be more clear: `show_progress` -> `want_progress_report`;
+ `debugging`; `eqn_flag` -> `need_eqn`.
+ (make_message): Rename this...
+ (make_string): ...to this. Align more closely with contemporary
+ version of example from Linux man-pages printf(3) page. Use
+ `vsnprintf()` to determine size of memory buffer needed prior to
+ allocation instead of iteratively growing it until it is large
+ enough. Always die if `vsnprintf()` fails: this function now
+ always returns a valid pointer if it returns at all.
+ (makeFileName, setupAntiAlias, imageList::createPage,
+ imageList::createImage): Update call sites to use
+ `make_string()`.
+ (char_buffer::can_see): Demote return type from `int` to `bool`.
+ (char_buffer::skip_spaces): Drop unused member function.
+ (char_buffer::read_file, makeTempFiles): Demote return type from
+ `int` to `void`. Stop returning after calling functions that
+ don't return.
+ (char_buffer::read_file): Call `sys_fatal()` if `fread()`
+ returns an error, similarly to other calls into the standard C
+ library that this file makes. Improve check for error from
+ `fread()` by not regarding a return value of zero when the
+ end-of-file indicator is set as an error condition.
+ (makeFileName, checkImageDir, char_buffer::run_output_filter,
+ scanArguments): Call `fatal()` instead of `error()` and then
+ `exit(1)`.
+ (makeFileName, scanArguments): Dismiss Shlemiel the Painter:
+ save return value of `strlen()` and call `strcpy()` multiple
+ times instead of mixing `strcpy()` and `strcat()`; the latter
+ approach rescans the string unnecessarily.
+ (char_buffer::run_output_filter): Stop passing unnecessary null
+ pointer argument to diagnostic message functions. Stop calling
+ `fflush()` after libgroff diagnostic function, which always
+ {ultimately} flushes the standard error stream itself.
+ (makeTempFiles, do_file, main): Boolify.
+ (makeTempFiles, do_file): Reorder null pointer equality
+ comparisons to avoid inadvertent lvalue assignment.
+ (scanArguments, main): Use `EXIT_SUCCESS` and `EXIT_FAILURE`
+ constants from C library instead of integer literals for exit
+ status.
+ (do_file): Demote return type from `int` to `bool`. Return
+ Boolean literals. Drop conditional with empty consequent.
+ (main): Declare local variables closer to the points of use.
+ Stop trying to be a register allocator: stop reusing loop index
+ variable `i` as integer storage for another (albeit related)
+ purpose; introduce `operand_index` instead. Clarify logic by
+ splitting combined initialization and comparison operations, and
+ by testing function return value directly instead of storing it
+ in a pointless temporary. Use `EXIT_SUCCESS` and `EXIT_FAILURE`
+ constants from C library instead of integer literals for exit
+ status.
+
+2022-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp (run_commands): Trivially refactor.
+ Rename variable for clarity; add comment.
+
+2022-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp
+ (char_buffer::run_output_filter): Return wait status of child
+ process.
+ (char_buffer::run_output_filter, main): Rename local variable
+ `status` to `wstatus` to recognize distinction between exit
+ status (a 7-bit quantity) and wait status (a wider type).
+ (main): Issue fatal diagnostic if child process exited with
+ nonzero status. Since the child's output to the standard error
+ stream is lost, advise re-running with different output driver
+ to see them. This unhappy shortcoming is filed as Savannah
+ #62673. Explicitly return zero otherwise.
+
+ Fixes <https://savannah.gnu.org/bugs/?60782>.
+
+2022-06-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/ab_works.sh: Add regression test for
+ Savannah #60782.
+
+2022-06-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Trivially refactor.
+
+ * src/roff/troff/input.cpp (token::next): Rename statement label
+ to use documentary terminology.
+ * src/roff/troff/node.cpp (make_composite_node)
+ (make_glyph_node): Make functions static since nothing outside
+ this translation unit calls them.
+ * src/roff/troff/node.cpp (make_glyph_node): Refactor optional
+ argument and its usage. Put it down, flip it, and reverse it.
+ That is, demote its type from `int` to `bool`, invert its sense,
+ and rename it since it affects warning, not error, diagnostics.
+ (character_exists): Update only call site of `make_glyph_node()`
+ that uses non-default argument value.
+
+2022-06-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Adjust diagnostic message text to clarify and better
+ match terminology used in documentation.
+
+ * src/roff/troff/input.cpp (set_escape_char, do_overstrike)
+ (do_bracket, do_name_test, do_width, do_special):
+ * src/roff/troff/node.cpp (suppress_node::tprint): Migrate from
+ "escape" to "escape sequence".
+
+ * src/roff/troff/node.cpp (make_composite_node)
+ (make_glyph_node): Clarify what went wrong.
+
+ * src/roff/troff/input.cpp (token::get_char)
+ (check_missing_character): Migrate from "normal character" to
+ "ordinary character" (see groff_char(7)).
+
+2022-06-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Rename a function for clarity.
+
+ * src/roff/troff/input.cpp (add_to_node_list): Rename this...
+ (add_to_zero_width_node_list): ...to this.
+ (do_zero_width): Update call site.
+ * src/roff/troff/token.h: Update declaration.
+
+2022-06-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp (handle_unknown_desc_command):
+ Refactor to skip unnecessary string comparisons. We explicitly
+ return in the final case instead of falling off the end of this
+ void function for consistency if additional cases are added.
+
+2022-06-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp (handle_unknown_desc_command):
+ Partially revert commit 64dc40d23a, 19 June. I forgot to save
+ and restore the previous values of the globals
+ `current_filename` and `current_lineno`, and, noticing that this
+ function has 3 return paths, decided that it's cheaper just to
+ go back to `error_with_file_and_line()`.
+
+2022-06-21 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Add more search paths to the Foundry file.
+
+ * font/devpdf/Foundry.in: Use the directory specified with the
+ config flag --with-urw-fonts-dir to populate the default foundry
+ as well as the U foundry. Important to populate the download
+ file with font files to embed the fonts not part of the base
+ pdf fonts or if user wants all fonts embedded.
+
+2022-06-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac (UR, MT): Fix problem with hyphenation
+ occurring before the end of the line when the line length was
+ not the device default (common for man pages at the terminal)
+ and hyperlinks were enabled. The issue is that the new
+ environment we created inherits the default environment's line
+ length (its state at troff initialization, prior to macro
+ package loading and configuration). This latent issue was
+ exposed by post-groff 1.22.4 changes to enable the hyphenation
+ of link text and add the hyperlink feature. Fix it by copying
+ the line length at the time the macro is called, which is
+ necessarily after man(7) sets up the line length, to the new
+ environment.
+
+2022-06-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grops/psrm.cpp (resource_manager::output_prolog):
+ (resource_manager::supply_resource):
+ (resource_manager::read_download_file): Update diagnostic
+ message language and report underlying problem encountered by
+ system when failing to open files. This will probably be the
+ text for ENOENT in most cases, but should help avoid frustration
+ in those where it isn't.
+
+2022-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grops/psrm.cpp
+ (resource_manager::read_download_file): Align diagnostic message
+ wording with gropdf in the same circumstance.
+
+2022-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Throw warning in font category when a font selection
+ escape sequence is used after the output line continuation
+ escape sequence on an input line, because it is ignored.
+
+ * src/roff/troff/env.cpp (environment::set_font): Do it.
+
+ * doc/groff.texi (Warnings):
+ * src/roff/troff/troff.1.man (Warnings): Document it.
+
+2022-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (font_change): Boolify.
+
+2022-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (LoadFont): Revise error message
+ when a font can't be found for embedding. User failure to add
+ an entry for locating the font file seems a more likely scenario
+ than outright corruption of the file.
+
+2022-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (font_change): Warn upon selection of a
+ nonexistent font name.
+
+ Fixes <https://savannah.gnu.org/bugs/?62656>.
+
+2022-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Revise `environment::set_font` to return Boolean value
+ indicating success of font selection operation.
+
+ * src/roff/troff/env.cpp (environment::set_font):
+ * src/roff/troff/env.h (environment::set_font): Do it.
+
+ This prepares the way for a fix for Savannah #62656.
+
+2022-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp: Use single exit path, freeing
+ memory allocated for strings.
+ (xexit): Add `exit()` wrapper; free allocated memory.
+ (main): Use it in all three exit paths.
+
+2022-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp: Refactor to be more meticulous with
+ memory. Add globals `saved_path`, `groff_bin_path`, and
+ `groff_font` to store pointers into the process environment
+ returned by `putenv()`; once used, they need to remain valid for
+ the lifetime of the program.
+ (xstrdup): Add `strdup()` wrapper: dies if `strdup()` fails.
+ (main): Split nested `strsave()` and `xputenv()` (until recently
+ `putenv()`) calls. Free duplicate strings prior to exit.
+
+2022-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp (main): Rename temporary variable to
+ avoid shadowing one in enclosing scope, which can lead to
+ cut-and-paste errors (ask me how I know).
+
+2022-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp: Slightly refactor to indirect
+ `putenv` calls through an error-checking wrapper.
+ (xputenv): Add new function to die if `putenv()` fails.
+ (main): Update call sites to use it.
+
+2022-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [groff]: Add information to diagnostic messages.
+
+ * src/roff/groff/groff.cpp (main): Report underlying system
+ error if `putenv()` fails.
+ (handle_unknown_desc_command): Set globals `current_filename`
+ and `current_lineno` from `filename` and `lineno` arguments
+ passed to us to we can use the simpler interface of `error()`
+ rather than `error_with_file_and_line()`.
+
+2022-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Update return type of `font::load_desc` function to
+ enable more informative diagnostics from callers.
+
+ * src/include/font.h (font::load_desc): Change return type from
+ `bool` to `const char` pointer.
+ * src/libs/libgroff/font.cpp (font::load_desc): Return null
+ pointer literal on failed `open()` or validation failures.
+ Return filespec on success.
+
+ * src/libs/libdriver/input.cpp (do_file):
+ * src/preproc/grn/main.cpp (getres):
+ * src/roff/groff/groff.cpp (main):
+ * src/roff/troff/input.cpp (main): Compare `font::load_desc()`
+ return value to null pointer literal instead of treating it as a
+ Boolean.
+
+ * src/roff/groff/groff.cpp (main): Report full filespec of
+ troublesome "DESC" file when complaining of missing "postpro"
+ directive.
+
+2022-06-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp: Add new Boolean global,
+ `need_postdriver`, and initialize it true.
+ (main): Make `need_postdriver` false if the `-X` or `-Z` options
+ are given. Test it later. This prevents groff from exiting
+ with a fatal error if an output driver is not available, but
+ also not required. Also reorder null pointer equality
+ comparison to avoid inadvertent lvalue assignment.
+
+ Fixes <https://savannah.gnu.org/bugs/?62640>.
+
+2022-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp (help): Revise usage message for
+ expressiveness and clarity.
+
+2022-06-21 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Correct display of pathnames used.
+
+ * font/devpdf/util/BuildFoundries.pl: Convert array to
+ string of pathnames.
+
+2022-06-21 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Fix to gropdf.
+
+ * src/devices/gropdf/gropdf.pl: If pdfbookmark was called
+ within 5p of top of page (e.g. straight after a .bp when
+ \n[nl] was zero) the click destination would be off by a
+ page.
+
+2022-06-19 Ingo Schwarze <schwarze@openbsd.org>
+
+ * font/devpdf/devpdf.am: Always build PDF font description
+ files.
+
+ Build font/devpdf/download and the various TR, TB, CR etc.
+ files in the same directory even when they are not required
+ by the build because USE_GROPDF is unset, usually because
+ ghostscript is either unavailable or deliberately disabled
+ by the person running the build. These files need to be
+ built and installed anyway, and can be used on the target
+ system when the required infrastructure is available at run
+ time.
+
+2022-06-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Revise introduction of vertical spacing concept to avoid
+ render inference that the formatter will compute a vertical
+ spacing appropriate to the type size automagically--it will not.
+
+ Fixes <https://savannah.gnu.org/bugs/?62617>. Thanks to Dave
+ Kemper for the report.
+
+2022-06-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Revise discussion of end-of-sentence detection.
+
+ * doc/groff.texi (Filling):
+ * man/roff.7.man (Concepts): Do it. "Spaces" is a now a term
+ with a much more restricted usage. Emphasize the input context,
+ now explicitly identified as plain text files with Unix line
+ endings.
+
+ Fixes (one hopes) <https://savannah.gnu.org/bugs/?62593>.
+ Thanks to Ingo Schwarze for the report and Dave Kemper for the
+ discussion.
+
+2022-06-10 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Changes to BuildFoundries.
+
+ * font/devpdf/util/BuildFoundries.pl: Collect search paths into
+ an array rather than a colon delimited string, this allows
+ the @PATH_SEPARATOR@ character (':' or ';') to be used to
+ delimit paths yielded by the command 'gs -h' but still use ':'
+ to delimit paths in the Foundry file. This means the same
+ Foundry file can be used on all systems.
+
+ * font/devpdf/Foundry.in: Add more likely paths to find the URW
+ fonts.
+
+2022-06-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Weaken dependency on TeX, instead using it (to generate
+ the DVI and PDF forms of our Texinfo manual) only if it is
+ available.
+
+ * m4/groff.m4 (GROFF_USE_TEX_CHECK): Check for presence of 'tex'
+ executable in path. Set shell variable `groff_use_tex` to "yes"
+ if present, and "no" otherwise. This check runs only if the
+ 'makeinfo' and 'texi2dvi' version checks have already passed.
+
+ * configure.ac: Run the new check. Set Automake conditional
+ `USE_TEX` only if shell variable `groff_use_tex` is "yes".
+ Report whether "groff.dvi" and "groff.pdf" are (re-)buildable.
+
+ * doc/doc.am: Parameterize names of groff.{dvi,pdf} targets as
+ Make macros `GROFF_DVI` and `GROFF_PDF`. Define them only if
+ `USE_TEX`. Do _not_ update `EXTRA_DIST` macro; leave the
+ literal file names there because we require that distribution
+ archives contain these files.
+ (.texi.dvi, .texi.pdf): Update suffix rules to check `USE_TEX`
+ and fail, complaining of missing 'tex' program, if these targets
+ are attempted without it being true. Only manually specifying
+ the file names as targets to 'make' or attempting to generate a
+ distribution archive without TeX present should cause these
+ errors.
+
+ * INSTALL.REPO: Update dependency information.
+
+ Fixes <https://savannah.gnu.org/bugs/?62592>. Thanks to Deri
+ James for the report.
+
+2022-06-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (.texi.dvi, .texi.pdf, $(DOC_GNU_EPS)): Quote names
+ of programs when aborting because they're missing.
+
+2022-06-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PROG_MAKEINFO, GROFF_PROG_TEXI2DVI):
+ Largely revert commit d5013ededc, 21 May: run checks for
+ 'makeinfo' and 'texi2dvi' programs regardless of presence of
+ ".tarball-version" file. Their presence is a necessary (but not
+ sufficient) condition for refresh of formatted forms of our
+ Texinfo manual if the source is modified.
+
+ Begins addressing <https://savannah.gnu.org/bugs/?62592>.
+
+2022-06-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Rename some groff Autoconf macros to better match
+ Autoconf's own naming conventions.
+
+ * m4/groff.m4 (GROFF_MAKEINFO): Rename to...
+ (GROFF_PROG_MAKEINFO): ...this.
+ (GROFF_TEXI2DVI): Rename to...
+ (GROFF_PROG_TEXI2DVI): ...this.
+
+ * configure.ac:
+ * m4/groff.m4 (GROFF_TEXI2DVI): Update call sites.
+
+2022-06-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (SH, SS, B, I, SM, SB): Set input trap with `it`
+ instead of `itc` for better Unix Version 7 man(7) compatibility.
+
+ Fixes <https://savannah.gnu.org/bugs/?51468>. Also see
+ discussion at
+ https://lists.gnu.org/archive/html/groff/2022-06/msg00020.html
+ et sequentia (amid a vigorous bikeshedding of `\&`'s name).
+
+2022-06-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Regression-test use of input traps.
+
+ * tmac/tests/an_use-input-traps-correctly.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-06-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (LoadDesc): Validate device
+ description file for essential directives and acceptable values
+ as grops(1) does.
+
+2022-06-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff, grohtml, grops, grotty]: Update wording of diagnostic
+ messages to refer to "motion quantum" rather than "resolution"
+ where appropriate.
+
+ * src/devices/grohtml/post-html.cpp
+ (html_printer::html_printer):
+ * src/devices/grops/ps.cpp (ps_printer::ps_printer):
+ * src/devices/grotty/tty.cpp (tty_printer::set_char)
+ (tty_printer::add_char, tty_printer::end_page):
+ * src/roff/troff/env.cpp (line_length, title_length): Do it.
+
+2022-06-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl: Do more "DESC" file validation.
+ (LoadDesc): Bomb out gracefully if any of "unitwidth", "res", or
+ "sizescale" missing from "DESC" file. This prevents Perl
+ warnings about use of uninitialized values, and undoubtedly
+ mangled output.
+
+2022-06-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl: Revise diagnostic message
+ handling.
+ (top level): Add new scalar `progname` to house executable name.
+ (Msg): Output messages in format recommended by GNU Coding
+ Standards manual. Identify who's talking (Savannah #52463).
+ Rename `lev` scalar to `fatal` since it is used only as a
+ Boolean for immediately exiting with failure status. Report
+ diagnostic severity as part of message.
+ (Warn, Die): Add new subroutines through which all diagnostics
+ are now emitted.
+ (top level): Migrate a use of Perl `die` builtin to our `Die`.
+ (top level, ToPoints, LoadDownload, LoadDesc, do_x, GetPoints,
+ LoadSWF, LoadPDF, LoadStream, BuildStream, ParsePDFHash,
+ LoadFont, GetType1, GetChunk, RemapChr, do_N): Migrate `Msg(0,
+ ...)` calls to `Warn` and `Msg(1, ...)` to `Die`. Begin
+ messages in lowercase (GNU Coding Standards). Recast a few
+ messages for clarity.
+
+ Continues the long process of fixing Savannah #52463.
+
+2022-06-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (Load_Config): Drop unused
+ subroutine and its commented-out call site, which came in that
+ way in July 2011.
+
+2022-06-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (LoadFont): Warn if a font to be
+ embedded in PDF output cannot be located in the "download" file.
+
+ Fixes <https://savannah.gnu.org/bugs/?62572>. Thanks to Deri
+ James.
+
+2022-06-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/a4.tmac: Drop file from distribution. It has been
+ superseded by papersize.tmac for nearly 20 years.
+ * tmac/tmac.am (TMACNORMALFILES): Delete reference.
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?62569>.
+
+2022-06-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Parameterize X11-related man pages, so they don't get
+ spuriously generated (and not cleaned) when building with X11
+ support disabled.
+
+ * Makefile.am (.man): Fix logic nit: drop unnecessary removal of
+ target before clobbering it with sed.
+ * src/devices/xditview/xditview.am (GXDITVIEW_MAN1): Add new
+ macro, expanding to nothing if `WITHOUT_X11` and to the target
+ name otherwise.
+ (man1_MANS): Append `GXDITVIEW_MAN1` expansion, not a literal.
+ * src/devices/xditview/xditview.am (XTOTROFF_MAN1): Add new
+ macro, expanding to nothing if `WITHOUT_X11` and to the target
+ name otherwise.
+ (man1_MANS): Append `XTOTROFF_MAN1` expansion, not a literal.
+ * doc/doc.am (GROFF_MAN_PAGES1): Append foregoing expansions
+ instead of literals.
+
+2022-06-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Add `AM_CONDITIONAL`: `HAVE_URW_FONTS`, so our
+ Automake files can more easily cope with their absence.
+ * font/devpdf/Foundry.in: Add easily matched phrases to
+ comments, to clearly delimit the URW foundry portion of the file
+ so it can be omitted if those fonts are absent.
+ * font/devpdf/devpdf.am (font/devpdf/Foundry): Generate file
+ differently depending on `HAVE_URW_FONTS`; keep the existing
+ procedure if true, and delete the URW section from the generated
+ file otherwise, avoiding diagnostic messages from afmtodit(1)
+ and our BuildFoundries script.
+
+ Fixes <https://savannah.gnu.org/bugs/?62570>.
+
+2022-06-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/devpdf.am (font/devpdf/util/BuildFoundries):
+ Generate script using the `PATH_SEPARATOR` Automake macro.
+ * font/devpdf/util/BuildFoundries.pl: Add `pathsep` scalar to
+ house the build-time path separator.
+ (LocateFile): Use it.
+ (LoadFoundry, CheckFoundry): Stop using spaces as part of the
+ path separation delimiter. It is not idiomatic.
+
+2022-06-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Explicitly identify poppler tools in report.
+
+2022-06-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/util/BuildFoundries.pl: Trivially refactor. Drop
+ unused hash `foundry`. Drop scalar `warn` that was set and
+ updated but never tested.
+
+2022-06-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/util/BuildFoundries.pl: Alter script to write to
+ the standard output stream instead of (re)writing a file named
+ "download" in the current working directory. This recovers from
+ a problem I introduced in commit 6e62be835d, 2 May, as an
+ unforeseen side effect of improving build parallelism so that
+ the "download" file wouldn't be read until it was fully
+ populated. As a side benefit, this approach is more Unixy, and
+ less dependent on $PWD.
+ (top level): Stop calling `WriteDownload` with an argument.
+ (LoadFoundry): Close only the file handle of interest when done,
+ not all of them (including `STDOUT`, which we now need).
+ (CheckFoundry): Same--just for cleanliness, since at present
+ running the script in 'check' mode doesn't write to any streams.
+ (WriteDownload): Stop taking an argument and manipulating file
+ handles. Write download file to standard output.
+ (LoadDownload, WriteDownload): Drop `top` scalar, used as a
+ mutex to serialize read and write access to "download" file; it
+ is no longer needed since the "download" file is now only read.
+
+2022-06-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Rename shell variables and Autoconf/Automake macros of
+ Boolean sense to have names more like logical predicates and
+ avoid doofy "DONT" nomenclature.
+
+ * m4/groff.m4 (GROFF_MAKE_RM): Rename shell variable
+ `groff_is_rm_defined` to `groff_make_defines_rm` (purely for
+ clarity; it already had a good name).
+ (GROFF_MAKE_RM): Rename this...
+ (GROFF_MAKE_DEFINES_RM): to this, to make parallelism obvious,
+ and enabling...
+ * configure.ac: ...rename of `MAKE_DONT_HAVE_RM` to
+ `MAKE_DEFINES_RM` with sense of test reversed. Also interpolate
+ `GROFF_MAKE_DEFINES_RM` instead of `GROFF_MAKE_RM`. This in
+ turn enables...
+ * Makefile.am: ...revision of conditional from
+ `MAKE_DONT_HAVE_RM` to "!`MAKE_DEFINES_RM`".
+
+2022-06-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_URW_FONTS_PATH)
+ (GROFF_WITH_COMPATIBILITY_WRAPPERS, GROFF_APPDEFDIR_OPTION)
+ (GROFF_UCHARDET): Recast help strings to more closely parallel
+ structure and style of Autoconf's own help strings.
+ (GROFF_WITH_COMPATIBILITY_WRAPPERS): Recast to tighten wording.
+
+2022-06-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac:
+ * m4/groff.m4 (GROFF_APPDEFDIR_OPTION, GROFF_APPDEFDIR_DEFAULT)
+ (GROFF_APPDEFDIR_CHECK): Rename m4 macros and shell variable
+ from "*appres*" to "*appdef*. Update interpolation sites.
+
+ * configure.ac:
+ * m4/groff.m4 (GROFF_APPDEFDIR_CHECK): Further rename this...
+ (GROFF_APPDEFDIR_NOTICE): ...to this, for consistency with other
+ post-report output macros.
+
+ * Makefile.am:
+ * PROBLEMS:
+ * doc/automake.mom:
+ * src/devices/xditview/xditview.am: Update interpolation sites
+ of `appresdir`.
+
+ * Makefile.am:
+ * src/devices/xditview/gxditview.1.man:
+ * src/roff/groff/groff.1.man: Update interpolation sites of
+ `APPRESDIR`.
+
+ * NEWS: Add item.
+
+2022-06-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_X11, GROFF_UCHARDET): Drop redundant
+ messages (which are easily overlooked amid the torrent of
+ "checking" output anyway). Discovery failures of X11 and the
+ uchardet library are already parts of the configuration report
+ at or near the end of output.
+
+2022-06-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PNMTOPS_NOSETPAGE): Partially revert change
+ from 21 May and document why in a comment.
+
+2022-06-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/troffrc: Skip loading of "papersize.tmac" if not in troff
+ mode.
+
+ Fixes <https://savannah.gnu.org/bugs/?62238>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-05-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Report use of "g" prefix for commands and macro
+ package compatibility wrappers.
+ * m4/groff.m4 (GROFF_G): Fix code style nits. Update
+ indentation to match recent practice.
+
+2022-05-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Fix code style nits and tweak report. Stop
+ superfluously using braces for shell parameter expansions that
+ don't require them. The shell is not make(1). Say
+ "installation _directory_ prefix" since another kind of prefix
+ can be used by groff (the "g" in front of command and macro
+ package names shared with AT&T troff).
+
+2022-05-31 Dave Kemper <saint.snit@gmail.com>
+
+ * doc/groff.texi: Fix content and style nits.
+ - Remove redundancy ("fixed-width... character that can't be
+ adjusted").
+ - Fix incorrect word ("environment value" -> "environment
+ variable").
+ - Add or change the placement of a couple tie{}s to comport
+ with style-guide recommendation.
+ - Grammarify.
+ - Clarify and tighten wording.
+
+ Fixes <https://savannah.gnu.org/bugs/?62551>.
+
+2022-05-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/node.cpp (font_position): If mounting a font
+ fails and a third argument was given (to the `fp` request),
+ report its value in the diagnostic message. This could reveal a
+ prohibited attempt at directory traversal. See commit
+ a891161bc9, 7 November.
+
+2022-05-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/fontfile.cpp (font::open_file): Refactor.
+ Move more logic, including memory allocation, inside conditional
+ that accepts only file names without '/' characters, skipping
+ unnecessary work in the alternative. Annotate use of zero
+ literals as null pointers to ease any future migration to ISO
+ C++11. Add 'const' qualifier to variable that doesn't require
+ modification (and which is used in the LHS of an equality
+ comparison, so that clumsy operator misuse will provoke a
+ compiler warning).
+
+ Fixes <https://savannah.gnu.org/bugs/?62532>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-05-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: In configuration report, say that we're
+ reporting compiler options along with the compiler executable.
+ Fix leftover test(1) comparison with garbage, overlooked in
+ commit faa22d89d2, 20 May.
+
+2022-05-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/meintro_fr.ps): Build with '-t' option.
+
+ Fixes <https://savannah.gnu.org/bugs/?62542>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-05-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.1.man (Options) <-l>: Handle case where
+ no default print spooler is configured, and report formatter
+ behavior correctly if it isn't.
+
+ Fixes <https://savannah.gnu.org/bugs/?62535>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-05-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am (.man): Process '@PSPRINT@' substitutions with
+ "makevarescape.sed".
+
+2022-05-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PROG_YACC, GROFF_MAKEINFO, GROFF_TEXI2DVI):
+ Fix logic error in detection of build scenario: the presence of
+ a ".git" directory is not an indicator that we're not building
+ from a distribution archive, because we might be building from a
+ snapshot archive (which also lacks it). Instead, perform checks
+ required only by builds from Git checkouts and snapshot archives
+ if the ".tarball-version" file is not present.
+
+2022-05-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am (EXTRA_DIST): Ship "HACKING" file.
+
+2022-05-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * bootstrap.conf: Add "pkg-config" to `buildreq`. Not having it
+ causes pretty horrible macro expansion problems and diagnostics
+ when 'autoreconf' is run; they're still pretty bad even if you
+ use `AC_REQUIRE` and `m4_pattern_forbid`. So just demand it.
+
+2022-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devps/S:
+ * font/devps/symbolmap: Drop excess mapping of `*U` special
+ character. groff maps it to the Adobe Glyph List name
+ 'Upsilon1'. (The AGL 'Upsilon' is a homoglyph of the Latin
+ capital 'Y'.)
+ * PROBLEMS: De-document build-time warning, now resolved.
+
+2022-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.tables: Regenerate using Unicode
+ 14.0. No substantive changes.
+
+2022-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/make-afmtodit-tables: Refactor. Drop
+ unused variable `prog`. Use value of `CPP` from environment (if
+ defined) and use parameter expansion to apply a default if null
+ or not set. Use for loop to eliminate duplicative if statement.
+ Test input files for readability, not just existence. Use more
+ portable test(1) and shell syntax. Swap usage error and fatal
+ error exit statuses; using "1" for failure and "2" for usage
+ errors is more common in shell scripts I've seen. Update usage
+ message to put non-literal parameter in full caps, and clarify
+ its name. Update comment blocks written to generated files to
+ further clarify data provenance.
+
+2022-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PRINT): Refactor. Stop performing checks
+ for spooler options if none is available. Stop redundantly
+ reporting command name used for spooling PostScript files. If
+ an option is required for spooling DVI files, report it alone
+ instead of repeating the command name as well.
+
+2022-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Fix insensitivity of groff(1) man page to configured spooler.
+
+ * Makefile.am (.man): Replace `@PSPRINT@` in man page sources
+ with name of configured print spooler command.
+ * src/roff/groff/groff.1.man (Options) <-l>: Use configured
+ print spooler command instead of literal 'lpr'.
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_UCHARDET_CHECK): Fix grammar nit in failure
+ message when user demands uchardet support but the library
+ cannot be located.
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_CHECK_GROHTML_PROGRAMS): Fix logic error in
+ computation of verb to be used in notice message.
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PROG_YACC, GROFF_URW_FONTS_CHECK)
+ (GROFF_WITH_COMPATIBILITY_WRAPPERS, GROFF_UCHARDET_NOTICE):
+ Improve shell code portability. Per the GNU Autoconf manual,
+ "The -a, -o, '(', and ')' operands are not present in all
+ implementations, and have been marked obsolete by Posix 2008.
+ ...portable uses of test should never have more than four
+ arguments, and scripts should use shell constructs like '&&' and
+ '||' instead."
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.1.man (Installation directories): Don't
+ output a tagged paragraph for the X11 application defaults
+ directory if the build symbol '@APPRESDIR@' is not defined (that
+ is, we didn't build with X11 support).
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_GHOSTSCRIPT_VERSION_CHECK): Fix code style
+ nits. Use lowercase for shell variables we define. Don't quote
+ literal operands to test(1) that don't contain syntactically
+ shell-significant characters. Update indentation to match
+ recent practice.
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_URW_FONTS_NOTICE): Don't emit the notice if
+ Ghostscript isn't available, since it was a prerequisite for
+ the `GROFF_URW_FONTS_CHECK` macro in the first place.
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Add print spooler determination to configuration
+ report.
+
+ * m4/groff.m4 (GROFF_PRINT): Add shell variable
+ `groff_have_spooler` to house the name of the print spooler
+ {"lp" or "lpr"} or the word "no".
+ * configure.ac: Report determined spooler, or its absence.
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/tests/do-not-seek-the-unseekable.sh: Skip
+ seekability check of the standard input stream if there is no
+ controlling terminal.
+
+ Fixes <https://savannah.gnu.org/bugs/?62506>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-05-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_CHECK_GROHTML_PROGRAMS): Migrate from
+ `AC_FOREACH` to `m4_foreach` to avoid obsolescence warning from
+ GNU Autoconf 2.70 or later.
+
+ Fixes <https://savannah.gnu.org/bugs/?61059>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-05-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man: Rename "pilot" list macros for man(7) from
+ `BL`/`EL` to `LS`/`LE`, per suggestion from Alejandro Colomar.
+
+2022-05-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_MAKEINFO, GROFF_TEXI2DVI): Check for
+ makeinfo(1) and texi2dvi(1) programs only if building from Git,
+ not a distribution archive.
+
+2022-05-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/meintro_fr.ps): Call groff with `-K utf8`
+ instead of `-k`, in case the "configure" script didn't find
+ uchardet (and preconv(1) thus can't auto-detect an encoding).
+
+ Fixes <https://savannah.gnu.org/bugs/?59463>.
+
+2022-05-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/tests/do-not-seek-the-unseekable.sh: Skip
+ a check if /dev/stdin is not a character special device.
+
+2022-05-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PDFTOOLS): Rename this...
+ (GROFF_POPPLER): ...to this.
+ * configure.ac: Update call site.
+
+2022-05-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_UCHARDET_CHECK): Rename this...
+ (GROFF_UCHARDET_NOTICE): ...to this.
+ * configure.ac: Update call site.
+
+ * m4/groff.m4 (GROFF_UCHARDET_NOTICE): Tighten wording of
+ message reported to user.
+
+ Fixes <https://savannah.gnu.org/bugs/?59481>. Thanks to Dave
+ Kemper for the report.
+
+2022-05-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PNMTOOLS_CAN_BE_QUIET)
+ (GROFF_PNMTOPS_NOSETPAGE): Skip check if prerequisite not met.
+
+2022-05-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_URW_FONTS_CHECK): Rename this...
+ (GROFF_URW_FONTS_NOTICE): ...to this.
+ (GROFF_URW_FONTS): ...and this...
+ (GROFF_URW_FONTS_CHECK): ...to this.
+ (GROFF_URW_FONTS_NOTICE): Give lengthy notice message a one-line
+ summary.
+ * configure.ac: Update call sites.
+
+2022-05-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_URW_FONTS): Refactor. If our prerequisites
+ are not met (availability of 'awk' and 'gs'), don't even run the
+ check logic or print a "checking" message.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Handle missing programs required to construct files needed at
+ runtime by gropdf more gracefully. Rename and refactor
+ configuration-time logic to be more understandable.
+
+ * configure.ac:
+ * m4/groff.m4: Rename `GROFF_PDFDOC_PROGRAMS` macro to
+ `GROFF_CHECK_GROPDF_PROGRAMS`. Rename shell variable
+ `make_pdfdoc` to `use_gropdf`. Set it explicitly to "no" or
+ "yes" instead of null or not null.
+
+ * configure.ac:
+ * m4/groff.m4:
+ * doc/doc.am: Rename `BUILD_PDFDOC` to `USE_GROPDF`.
+
+ * configure.ac: Call `GROFF_GROPDF_PROGRAM_NOTICE`.
+
+ * doc/doc.am: Bracket definition of `PROCESSEDDOCFILES_PDF`
+ macro and `$(PROCESSEDDOCFILES_PDF)` dependency declaration in
+ Automake `if USE_GROPDF` conditional. This prevents attempts
+ to build PDF documents using groff that are doomed to fail.
+
+ * m4/groff.m4: Refactor gropdf runtime-dependency program check.
+ Split into two macros: one (`GROFF_CHECK_GROPDF_PROGRAMS`)
+ performs the check, the other (`GROFF_GROPDF_PROGRAM_NOTICE`)
+ issues a notice at the end of the configuration process if at
+ least one program was not found. Rename `docnote` shell
+ variable to `gropdf_notice`. Tighten wording of notice. Drop
+ unused `make_install_pdfdoc` and `make_uninstall_pdfdoc` shell
+ variables.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Handle missing programs required at runtime by grohtml more
+ gracefully. Rename and refactor configuration-time logic to be
+ more understandable.
+
+ * configure.ac:
+ * m4/groff.m4: Rename `GROFF_HTML_PROGRAMS` macro to
+ `GROFF_CHECK_GROHTML_PROGRAMS`. Rename shell variable
+ `make_htmldoc` to `use_grohtml`. Set it explicitly to "no" or
+ "yes" instead of null or not null.
+
+ * configure.ac:
+ * m4/groff.m4:
+ * doc/doc.am: Rename `BUILD_HTML` to `USE_GROHTML`.
+
+ * configure.ac: Call `GROFF_GROHTML_PROGRAM_NOTICE`.
+
+ * doc/doc.am: Bracket definition of `PROCESSEDDOCFILES_HTML`
+ macro and `$(PROCESSEDDOCFILES_HTML)` dependency declaration
+ in Automake `if USE_GROHTML` conditional. This prevents an
+ attempt to build an HTML version of the "pic.ms" document that
+ is doomed to fail (noisily).
+
+ * m4/groff.m4: Refactor grohtml runtime-dependency program
+ check. Split into two macros: one
+ {`GROFF_CHECK_GROHTML_PROGRAMS`} performs the check, the other
+ {`GROFF_GROHTML_PROGRAM_NOTICE`} issues a notice at the end of
+ the configuration process if at least one program was not found.
+ Rename `html_docnote` shell variable to `grohtml_notice`.
+ Tighten wording of notice. Drop unused `make_install_htmldoc`
+ and `make_uninstall_htmldoc` shell variables.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_GHOSTSCRIPT_VERSION_NOTICE): Add newline at
+ end of buggy Ghostscript notification, so that the multiple
+ possible lengthy notices after the configuration report have
+ blank lines separating them.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Check for m4 program at configuration time.
+
+ * m4/groff.m4 (GROFF_PROG_M4): Define new macro to perform the
+ check and error out if the program is missing.
+ * configure.ac: Call the new macro.
+ * tmac/tmac.am (tmac/groff_man.7.man)
+ (tmac/groff_man_style.7.man): Use the new implicitly AC_SUBST-ed
+ variable `M4` to run the program.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_PROG_YACC): Update wording of error
+ message: we search for "yacc", so report it as missing if it is
+ not found (along with "byacc" and "bison").
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Fix shell style nits. Get rid of string
+ {non-}nullity tests and comparisons involving concatenation with
+ garbage (usually "x"). See 13 November entry regarding m4. Use
+ idiomatic shell "brace style" for control structures.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Trivially refactor libgroff allocator configuration.
+
+ * m4/groff.m4 (GROFF_USE_GROFF_ALLOCATOR): Update description of
+ configuration flag to clarify that it's implemented in a
+ library. Rename shell variable to prefix it with "groff_",
+ putting it in an ad hoc name space as with other variables. If
+ feature disabled, set variable to literal "no".
+ * configure.ac: Use renamed variable and interpolate it directly
+ into configuration report, simplifying shell logic.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Revise configuration report for intelligibility.
+ Add report of C++ compiler and flags used: we compile much more
+ C++ than C code so this seems appropriate. Report Perl
+ interpreter version so that we can collect build reports and
+ turn the ratchet past Perl 5.6.1 at some point. Fix X11
+ "resources" misnomer (application defaults are what is meant).
+ Rephrase generally.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am (EXTRA_DIST): Ship "ChangeLog.122" in distribution
+ archive. Overlooked in commit c11995df16, 19 February 2021.
+
+2022-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grotty/tests/basic_latin_glyphs_map_correctly.sh:
+ Fix portability problem: POSIX says that "od -c" (and "od -t c")
+ are supposed to emit printing characters as defined by the
+ underlying locale, but GNU coreutils od doesn't do this and
+ macOS od does. Set `LC_ALL` to "C" when running it to force
+ 3-digit octal reporting of characters with their eighth bit set.
+
+ Fixes <https://savannah.gnu.org/bugs/?62357>. Thanks to John
+ Gardner for the report. Also see <https://pubs.opengroup.org/\
+ onlinepubs/9699919799/utilities/od.html>.
+
+2022-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * INSTALL.extra (In Case of Trouble): Add advice on using the
+ test suite, particularly if it fails.
+
+ Fixes <https://savannah.gnu.org/bugs/?62478> (one hopes).
+
+2022-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Input Line Traps): Expand discussion. The
+ `it` and `itc` requests count neither input lines (strictly) nor
+ text lines. Instead, they count input lines that _directly
+ produce formatted output_ (and, in the case of `itc`, are not
+ "interrupted" or continued with the `\c` escape sequence). This
+ is useful--empty requests and requests that don't put nodes on
+ the output don't break things--but does demand some explanation.
+ Clarify and provide example.
+ * man/groff.7.man (Escape sequence short reference) <it>: Sync.
+
+2022-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (environment::choose_breakpoint): Tweak
+ diagnostic message ("can't" -> "cannot").
+ * doc/groff.texi (Breaking): Update example.
+
+2022-05-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Copy Mode):
+ * man/groff.7.man (Copy mode): Fix omission; `\?` is interpreted
+ in copy mode.
+
+2022-05-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (PT): Unclutter name space; remove
+ `pg*saved-page-number-format` string when we're done with it.
+
+2022-05-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Add unit tests, including one XFAIL for bad behavior.
+
+ * src/preproc/tbl/tests/check-horizontal-line-length.sh:
+ * src/preproc/tbl/tests/check-line-intersections.sh:
+ * src/preproc/tbl/tests/check-vertical-line-length.sh:
+ * src/preproc/tbl/tests/table-lacks-spurious-top-border.sh: Do
+ it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run tests.
+ (tbl_XFAIL_TESTS, XFAIL_TESTS): Expect one test failure.
+
+2022-05-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grotty/tty.cpp (tty_printer::add_char): Modify
+ diagnostic message: what gets written "above [the] first line"
+ might not be a character (glyph) per se, but a line (rule) from
+ a drawing command, and in fact the occurrence of these from
+ boxed tables is the most common cause of this message I've seen.
+
+2022-05-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grotty]: Do more input validation.
+
+ * src/devices/grotty/tty.cpp (tty_printer::draw): Throw warning
+ if an unsupported geometric primitive is encountered.
+ (tty_printer::line): Throw warning if a line is diagonal. Die
+ if length of a horizontal or vertical line is not a multiple of
+ the appropriate motion quantum of the device (troff should never
+ emit such nonsense, and currently doesn't appear to).
+
+2022-05-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/tbl.1.man (Miscellaneous): Document GNU tbl's
+ use of `#T` and `T.` registers.
+
+2022-05-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (read_color_draw_node): Tweak
+ diagnostic message to better distinguish drawing commands and
+ device control commands.
+
+2022-05-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Mitigate double-free problem exposed by malformed
+ input.
+
+ * src/roff/troff/mtsm.h (struct statem): Place member variable
+ `issue_no` behind `DEBUGGING` preprocessor symbol, omitting it
+ from production and ordinary development builds.
+ * src/roff/troff/mtsm.cpp (no_of_statems): Place global variable
+ behind `DEBUGGING` preprocessor symbol, omitting it from
+ production and ordinary development builds.
+ (statem::statem): Make constructor trivial if `DEBUGGING` not
+ defined in preprocessor; it manipulates only `issue_no` and
+ `no_of_statems`, which are synchronized.
+ (statem::statem {copy}): Gate assignment of `issue_no` member
+ variable from copy constructor behind `DEBUGGING` preprocessor
+ symbol.
+ (statem::flush, mtsm::inherit): Gate debugging output, already
+ runtime-gated on `debug_state` symbol, of `issue_no` member
+ variable, so that we don't reference it when it is not declared.
+
+ See <https://savannah.gnu.org/bugs/?62040>.
+
+2022-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [refer]: Rename a test artifact; it's a bibliographic database
+ file, not a refer(1) command file.
+
+ * src/preproc/refer/tests/artifacts/62124.ref: Rename this...
+ * src/preproc/refer/tests/artifacts/62124.bib: ...to this.
+ * src/preproc/refer/refer.am (EXTRA_DIST):
+ * src/preproc/refer/tests/report-correct-line-numbers.sh: Use
+ new name.
+
+2022-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/command.cpp (process_commands): Begin
+ migration to use existing global variables for location reports
+ in diagnostic messages. Save current file name and line number
+ before calling `command_loop()` and restore them afterward.
+ Also decrement line counter before entering that loop because it
+ would be too far advanced by one due to the final newline on a
+ parsed input line.
+
+2022-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/refer.cpp (main): Report system error on
+ `fflush()` failure. POSIX Issue 5 a.k.a. SUSv2 (1997) specifies
+ several possible `errno` values this C standard library function
+ can set; see
+ <https://pubs.opengroup.org/onlinepubs/007908799/xsh/fflush.html>.
+
+2022-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [refer]: Refactor: drop unused version of function (taking only
+ a `const char *` parameter).
+
+ * src/preproc/refer/command.cpp (process_commands): Drop
+ definition.
+ * src/preproc/refer/command.h (process_commands): Drop
+ declaration.
+
+2022-05-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/refer.cpp (do_file): Fix another off-by-one
+ line number reporting bug exposed by fix for Savannah #62391.
+
+2022-05-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/tests/report-correct-line-numbers.sh: Add
+ more regression tests.
+
+2022-05-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [refer]: Trivially refactor: boolify.
+
+ * src/preproc/refer/command.cpp (input_stack::push_file): Demote
+ and rename local variable from `int` to `bool`.
+ (bol): Renamed from this...
+ (is_at_beginning_of_line): ...to this.
+
+2022-05-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [refer]: Trivially refactor.
+
+ * src/preproc/refer/command.cpp (input_stack::push_file):
+ * src/preproc/refer/refer.cpp (do_file): Drop unnecessary
+ construction of integer from integer (return type of `getc()`)
+ in argument to error diagnostic functions; parallelizes with
+ other diagnostic function calls.
+
+2022-05-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/command.cpp: Refactor to simplify.
+ (get_location): Demote return type from `int` to `void`. The
+ function only ever returned a `1` literal.
+ (input_stack::error): Update call site to stop uselessly testing
+ return value of `get_location()`.
+
+2022-05-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (dist-info-bits, install_infodoc, dist-gnueps): Fix
+ logic error. When checking both source and build trees for
+ files to copy, break after successfully copying the files, not
+ after the first iteration of the loop unconditionally. This
+ caused the Info documents not to be installed from out-of-tree
+ builds, and potentially would prevent them and doc/gnu.eps from
+ being included in the distribution archive if for some reason
+ they didn't build and that build failure were not treated as an
+ error. Problems introduced by me in commits e78bd20d54, 27
+ March, and d79c3f3a4a, 11 November.
+
+2022-05-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_APPRESDIR_OPTION): Update comments and
+ human-readable output to (1) stop claiming that existing
+ gxditview application defaults in the installation directory
+ will be backed up; this is no longer true as of commit
+ c66cb7725f, 3 April; and (2) refer to these files as
+ "application defaults", not "resources". (X11 application
+ defaults are client-side and mandatory [for Xt-based programs];
+ X resources are stored server-side and need not be configured to
+ determine an X client's geometry and rendering.)
+
+2022-05-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devX100-12/devX100-12.am (devX100_12_fontdir):
+ * font/devX100/devX100.am (devX100_fontdir):
+ * font/devX75-12/devX75-12.am (devX75_12_fontdir):
+ * font/devX75/devX75.am (devX75_fontdir): Define macros without
+ an extra "font/" layer in the directory hierarchy.
+
+ Fixes problem introduced by me in commit 3c82cbbfe5, 27
+ February.
+
+2022-05-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/devpdf.am (font/devpdf/util/BuildFoundries): Spell
+ dependency on `$(SH_DEPS_SED_SCRIPT)` using that macro expansion
+ instead of a literal file name. See doc/automake.mom.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/eqn.am (MAINTAINERCLEANFILES):
+ * src/preproc/pic/pic.am (MAINTAINERCLEANFILES):
+ * src/preproc/refer/refer.am (MAINTAINERCLEANFILES): Preserve
+ byacc/bison output artifacts unless "maintainer-clean"ing. Per
+ the GNU Automake manual, "The intermediate files generated by
+ yacc (or lex) will be included in any distribution that is made.
+ That way the user doesn’t need to have yacc or lex."
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am: Stop manually handling "test-groff". Per the
+ GNU Automake manual, "If configure built it, then distclean
+ should delete it." This is taken care of automatically if we
+ don't interfere.
+ (BUILT_SOURCES, MOSTLYCLEANFILES): Drop "test-groff".
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/eqn.am (neqn): Produce temporary file first
+ and set its permissions before moving it into place. If
+ anything in the future ever has a dependency on it, this avoids
+ a race where the file exists, satisfying a dependency, but
+ execution is attempted before its `x` permission bit is set.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Ensure that we install *.me source files, but don't
+ include them in the distribution archive.
+
+ * doc/doc.am (dist_otherdoc_DATA): Move `$(GENERATEDDOCFILES)`
+ from here...
+ (nodist_otherdoc_DATA): ...to here.
+ (.PRECIOUS): Add `$(GENERATEDDOCFILES)` so that make(1) doesn't
+ automatically remove "intermediate" objects in the .me.in -> .me
+ -> .ps chain.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Handle "gnu.eps" file better.
+
+ * doc/doc.am (GENERATEDDOCFILES): Remove `$(DOC_GNU_EPS)`.
+ (EXTRA_DIST): Ship `$(DOC_GNU_EPS)` in distribution archive.
+ ($(DOC_GNU_EPS)): Simplify rule commands; stop trying to copy
+ the file around since it will either be (1) in the distribution
+ archive from which a build is performed; or (2) missing because
+ a build is being done from Git, in which case we expect the PNM
+ tools to be available.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (clean_otherdoc): Drop target: it doesn't seem to
+ accomplish anything.
+ (clean_infodoc): Drop target, moving its rules into...
+ (maintainer-clean-local): ...this. Drop deps, both gone now.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (distclean-local): Drop target: stop cleaning
+ generated forms of our Texinfo manual with the "distclean"
+ target. They ship with the distribution archive and should
+ remain in the tree even if the user needs to re-./configure.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Fix problems exposed by high build parallelism.
+
+ * font/devpdf/devpdf.am (font/devpdf/util/BuildFoundries)
+ (font/devpdf/DESC, font/devpdf/Foundry): Drop
+ unnecessary removal of target prior to creating it.
+ (font/devpdf/Foundry): Add creation of destination build
+ directory as other targets do.
+ (font/devpdf/download): Create dedicated target instead of
+ lumping its generation under the stamp file. Add missing
+ dependencies on `$(DEVPDFFONTMAP_1)`, `$(DEVPDFFONTMAP_2)`,
+ `font/devpdf/Foundry` and `font/devpdf/enc/text.enc`. Remove
+ now-unnecessarily complicated "forgery" of "GEN" line in quiet
+ builds. Tweak format of comment written to "download" file to
+ make field identities clearer. Construct output (with multiple
+ shell commands) in temporary file so it is not read prematurely
+ by the "BuildFoundries" script. Move target into place as the
+ last step.
+ (font/devpdf/stamp): Relocate target to follow its dependencies.
+ Add dependency on "font/devpdf/download".
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Tweak diagnostic messages in BuildFoundries script.
+
+ * font/devpdf/util/BuildFoundries.pl (LoadFoundry)
+ (WriteDownload, CheckFoundry): Recast for specificity and
+ consistent style.
+ (Die): Stop reporting line number with fatal errors; none of the
+ call sites are parsing input.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [refer]: Fix off-by-one error in line number for some
+ diagnostics.
+
+ * src/preproc/refer/command.cpp (input_item::get_location):
+ Decrement reported line number by one after looping over input
+ so that we report the line number as it was before the last
+ newline character seen. This off-by-one error was partially
+ masked by...
+ * src/preproc/refer/refer.cpp (do_file): ...initialization of
+ `current_lineno` to zero. However, for syntax problems (as
+ opposed to the semantic problems of refer(1) command
+ processing), this could result in complaints about the line
+ number before they occurred, even on "line zero". Initialize
+ the variable to 1.
+
+ Fixes <https://savannah.gnu.org/bugs/?62391>.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/tests/report-correct-line-numbers.sh: Add
+ regression test for Savannah #62391.
+
+2022-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/tfmtodit/tfmtodit.cpp (usage): Tweak usage message.
+ Condense `-v` and `--version` into a single output line with
+ brace and pipe notation, which we do not use in our man pages,
+ but consistently do in our usage messages. Use lowercase for
+ option arguments since they are separated from option flag
+ letters by space. Call `fprintf()` once instead of 3 times.
+
+2022-05-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/refer.cpp (main): Tweak wording of
+ diagnostic messages to refer to options consistently and to
+ characterize input as "invalid" rather than "bad".
+ (usage): Document --version option. Use more informative
+ metasyntactic variable names. Organize usage message
+ consistently with our others, and stop wrapping the output
+ lines: we know neither the width of the terminal nor the length
+ of the `program_name` string we're interpolating. See commit
+ b4de44f0, 19 July 2021.
+
+2022-05-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (string_iterator::backtrace): Fix
+ spurious output when `mac.filename` is empty. Provoked by:
+ $ printf '\\(' | troff -b
+
+2022-05-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/refer.cpp: Trivially refactor. Demote
+ global variable `recognize_R1_R2` from integer to Boolean.
+ (main, do_bib): Give expressions to `assert()` meaningful
+ content.
+ (is_list): Demote return type from `int` to `bool`.
+ (do_file): Demote and rename integer local variables
+ `start_of_line` to Boolean `at_start_of_line`.
+ (is_list, do_file): Reorder equality comparisons to avoid
+ inadvertent lvalue assignment.
+
+2022-05-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Reduce and rationalize in-tree document dependencies.
+ This eliminates spurious rebuilds of numerous documents
+ {including the 380+-page groff-man-pages collections}. It also
+ fixes missing dependencies when using the build's groff to
+ generate PostScript documents.
+
+ * .gitignore: Drop old name of devpdf stamp file.
+ * doc/.gitignore: Drop now-unused "example.stamp" file.
+ * doc/doc.am (PROCESSEDDOCFILES_HTML, PROCESSEDDOCFILES_PDF)
+ (PROCESSEDDOCFILES_TXT): Add new macros grouping targets by the
+ format/output driver used to produce them, to better organize
+ dependencies for their generation.
+ (PROCESSEDDOCFILES): Redefine as simply the expansions of the
+ foregeoing.
+ (PROCESSEDFILES_DEPS_HTML, PROCESSEDFILES_DEPS_HTML,
+ PROCESSEDFILES_DEPS_PDF, PROCESSEDFILES_DEPS_TXT): Add new
+ macros defining prerequisites for production of the
+ corresponding output document formats.
+ ($(PROCESSEDDOCFILES_HTML), $(PROCESSEDDOCFILES_PDF),
+ $(PROCESSEDDOCFILES_PS), $(PROCESSEDDOCFILES_TXT)): Declare the
+ dependencies using expansions of the foregoing macros.
+ (MOSTLYCLEANFILES): Drop "doc/automake.pdf", now part of
+ `PROCESSEDDOCFILES_PDF`.
+ (doc/automake.pdf): Drop dependencies already supplied by
+ `PROCESSEDFILES_DEPS_PDF`.
+ (HTMLDOCFILES): Drop macro. "doc/pic.html" is now in the
+ expansion of `PROCESSEDDOCFILES_HTML`.
+ (htmlpic_DATA): Redefine as expansion of
+ `PROCESSEDDOCFILES_HTML` instead of `HTMLDOCFILES`.
+ (PROCESSEDEXAMPLEFILES_HTML) [BUILD_HTML]: Define as
+ "doc/webpage.html", otherwise as empty.
+ (PROCESSEDEXAMPLEFILES_PS): Contain "doc/webpage.ps" and
+ "doc/grnexampl.ps".
+ (PROCESSEDEXAMPLEFILES): Redefine as expansions of
+ `PROCESSEDEXAMPLEFILES_HTML` and `PROCESSEDEXAMPLEFILES_PS`.
+ ($(PROCESSEDEXAMPLEFILES_HTML), $(PROCESSEDEXAMPLEFILES_PS)):
+ Declare dependencies using `PROCESSEDFILES_DEPS_HTML` and
+ `PROCESSEDFILES_DEPS_PS`, respectively.
+ (HTMLEXAMPLEFILES): Drop macro. "doc/webpage.html" is now in
+ the expansion of `PROCESSEDDOCFILES_HTML`.
+ (nodist_htmlexamples_DATA): Drop macro, no longer needed.
+ ($(PROCESSEDDOCFILES_PS)): Relocated and redefined above.
+ ($(PROCESSEDEXAMPLEFILES) $(PROCESSEDDOCFILES)): Drop overbroad
+ dependency declarations in favor of the above.
+ (MOSTLYCLEANFILES, doc/examples.stamp): Drop generation and
+ removal of unnecessary stamp file.
+ (doc/pic.html, doc/webpage.html): Add explicit dependency on
+ required preprocessors. Drop redundant and spurious
+ dependencies.
+ * font/devhtml/devhtml.am (MOSTLYCLEANFILES)
+ (font/devhtml/stamp): Generate and remove stamp file to enable
+ reliable target dependencies for build-time generation of HTML
+ documents by groff.
+ * font/devpdf/devpdf.am (MOSTLYCLEANFILES, font/devpdf/stamp):
+ Rename stamp file from "font/devpdf/build_font_files".
+ (font/devpdf/stamp): Drop unnecessary dependency on "afmtodit".
+ * font/devps/devps.am (MOSTLYCLEANFILES, font/devps/stamp):
+ Generate and remove stamp file to enable reliable target
+ dependencies for build-time generation of PostScript documents
+ by groff.
+ * font/devutf8/devutf8.am (MOSTLYCLEANFILES)
+ (font/devutf8/stamp): Generate and remove stamp file to enable
+ reliable target dependencies for build-time generation of
+ UTF-8-encoded text documents by groff.
+
+ Fixes <https://savannah.gnu.org/bugs/?62084>; thanks to
+ Sergei Trofimovich for the report. Also fixes
+ <https://savannah.gnu.org/bugs/?62297>; thanks to Bjarni Ingi
+ Gislason for the report.
+
+2022-04-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Fix code style nits in Automake files.
+
+ * doc/doc.am: Put spaces around (Auto)make variable assignments,
+ for consistency with the rest of this .am file, and our others.
+ * font/devpdf/devpdf.am (font/devpdf/build_font_files): Use
+ shell '>' operator instead of touch(1).
+ * font/devhtml/devhtml.am (font/devhtml/DESC):
+ * font/devps/devps.am (font/devps/DESC): Construct target in
+ temporary file, since doing so is a multi-step process, moving
+ it to the target name when it is complete and usable by
+ dependencies.
+
+2022-04-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/refer.cpp (main): When complaining of
+ unrecognized option, report the entire option string (after
+ the leading dash), not just its first character.
+
+2022-04-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/error.cpp: Trivially refactor. Explicitly
+ compare pointer lvalues to null pointers instead of punningly
+ treating them as Booleans. Annotate use of zero literals as
+ null pointers to ease any future migration to ISO C++11.
+
+2022-04-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (an*abbreviate-inner-footer): Clean up better
+ before early returns. Remove temporary registers.
+
+2022-04-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/fallbacks.tmac: Add fallbacks for U+02C6 MODIFIER LETTER
+ CIRCUMFLEX ACCENT and U+02DC SMALL TILDE to Basic Latin
+ characters.
+
+2022-04-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Fix portability problem. Don't pass echo(1) arguments
+ containing backslashes because implementations handle them
+ differently. Use printf(1) instead. Thanks to Bertrand
+ Garrigues for reporting the problem and confirming the fix on
+ his build host.
+
+ * tmac/tests/e_chapter-titles-work.sh:
+ * tmac/tests/e_ld-works.sh:
+ * tmac/tests/localization-works.sh: Do it.
+
+2022-04-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (ppsz): Recognize "com10" (U.S.
+ commercial envelope) paper format.
+
+ Addresses the original issue reported in
+ <https://bugs.debian.org/1009248>. We have however broadened
+ its scope; see <https://savannah.gnu.org/bugs/?62344>.
+
+2022-04-27 Dave Kemper <saint.snit@gmail.com>
+
+ * src/devices/gropdf/gropdf.pl (ppsz): Recognize ISO B-series
+ paper formats using strings of the form "b0-b6", not "isob0-b6",
+ for consistency with libgroff and papersize.tmac.
+
+ Fixes <http://savannah.gnu.org/bugs/?62346>.
+
+2022-04-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Refactor to simplify. Ingo's removal of the
+ "--with-doc" "configure" option, among other changes, clears the
+ way to remove many phony targets and simplify dependencies
+ involving generation of the 5 formats of our Texinfo manual.
+ (build_infodoc, doc, doc_all, doc_txt, dvi, doc_dvi, pdf,
+ doc_pdf, html, doc_html): Drop phony targets.
+ (all): Depend directly on doc/groff.{info,txt,html,dvi,pdf}.
+ * NEWS: Add item since "make doc" is no longer necessary and
+ will do nothing.
+
+2022-04-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Handle `\R` sequences in text blocks robustly.
+
+ * src/preproc/tbl/table.cpp (table::add_entry): Fix SEGV when
+ repeating glyph table entry syntax (`\Rx`) used in a text block.
+ Lift extraction of entry string to be done unconditionally,
+ rather than in 5 different special cases. This frees us up to
+ rewrite the entry if necessary, changing '\R' to '\&' inside a
+ text block. Recast diagnostic to describe the problem
+ clearly--"bad repeated character" suggests that something is
+ wrong with the "argument" to `\R`, when really the problem is
+ the _context_.
+
+ Fixes <http://savannah.gnu.org/bugs/?62366>.
+
+2022-04-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Regression-test Savannah #62366.
+
+ * src/preproc/tbl/tests/\
+ do-not-segv-when-backslash-R-in-text-block.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+2022-04-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/string.cpp (string::extract): Check return
+ value of `malloc()` for nullity, and only poke into the buffer
+ returned if it is valid. Discovered while troubleshooting
+ Savannah #62366.
+
+2022-04-23 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+ gnulib: replace non-recursive-gnulib-prefix-hack with
+ automake-subdir option
+
+ 'non-recursive-gnulib-prefix-hack' is deprecated by gnulib's
+ commit f8eed11b15e9141d061900e4068ea1f3ba9b63f6 and replaced by
+ '--automake-subdir'.
+
+ * bootstrap.conf:
+ (gnulib_modules): Remove option
+ 'non-recursive-gnulib-prefix-hack'.
+ (gnulib_tool_option_extras): Add option '--automake-subdir'.
+ (bootstrap_post_import_hook): Remove the invocation of
+ 'build-aux/prefix-gnulib-mk'.
+
+ * doc/automake.mom: update documentation accordingly.
+
+ Fixes <http://savannah.gnu.org/bugs/?61708> and
+ <https://savannah.gnu.org/bugs/?62205> , issues reported and fix
+ suggested by Bjarni Ingi Gislason <bjarniig@rhi.hi.is>. Fix
+ also suggested by Werner LEMBERG <wl@gnu.org> (see
+ <https://repo.or.cz/ttfautohint.git/commit/a938fc63cb55ef48393a924d7083b13c1352d294>).
+
+2022-04-23 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+ Update gnulib submodule
+
+ * gnulib now points on c8b8f3bbcde37a53cd226f4c9cebd0dde6aca37f
+
+ * bootstrap: merge the latest version from gnulib/build-aux
+ {groff's bootstrap has a patch for OS X}.
+
+ * bootstrap.conf: update copyright date.
+
+2022-04-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (XH-UPDATE-TOC): Modify Keith Marshall's new XN/XH
+ feature to indent TOC entries by section heading depth. The
+ increment is 2 ens per depth level.
+
+2022-04-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (XA): Drop apparently useless `ll` request. It
+ doesn't do anything according to my tests.
+
+2022-04-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/label.ypp: Drop redundant declaration of
+ `yyparse`. Both byacc 20140715 and GNU Bison 3.3.2 supply the
+ the function prototype themselves. Addresses
+ "-Wredundant-decls" warning from GCC.
+
+ Fixes <https://savannah.gnu.org/bugs/?43569>.
+
+2022-04-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/grn/hdb.cpp (DBGetType): Lower fatal diagnostics
+ to errors when encounting invalid element type characters.
+ Return a value interpreted by our caller as an error indication
+ instead. Helps compilers determine that we're not implicitly
+ falling through our cases. Addresses "-Wimplicit-fallthrough"
+ warnings from GCC.
+
+ Fixes https://savannah.gnu.org/bugs/?54702>.
+
+2022-04-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/grn/hdb.cpp (DBRead): Add more validity checking.
+ Verify that the number of conversions returned by fscanf() is as
+ expected instead of throwing this information away--abort
+ processing ("giving up" like pic(1) does) if it does not.
+ Consistently report this abandonment in diagnostic messages.
+ Similarly validate pointer returned by fgets(). Soften handling
+ of invalid text condition from fatal error, introduced in
+ commit eb4f0675e, 16 August, to a normal one with abandonment of
+ Gremlin file. Addresses "-Wunused-result" warnings from GCC.
+
+2022-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/grn/main.cpp (conv): Throw an error diagnostic
+ when failing to open a Gremlin picture file.
+
+2022-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Fix extraneous space in output after `ME` or `UE` when
+ mandoc wrapper is used.
+
+ * tmac/an-ext.tmac (UE, ME): Double backslashes in macro
+ definitions when interpolating `.$` register (just like we tell
+ everyone else to do). This one was interesting to track down.
+ When using just `-man`, the problem never manifested; only with
+ `-mandoc`. The difference is that with the former, the `.$`
+ register is initialized to zero; with the latter, because `TH`
+ is aliased to another macro (then unaliased), `.$` has the
+ argument count to the `TH` macro, not to the macros actually
+ being called. This caused the wrong branch of a conditional to
+ be taken and put an extra space node on the output.
+
+ Fixes <https://savannah.gnu.org/bugs/?62044>.
+
+2022-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/cp1047.tmac:
+ * tmac/latin1.tmac:
+ * tmac/latin2.tmac:
+ * tmac/latin5.tmac:
+ * tmac/latin9.tmac: Stop remapping input soft hyphen characters
+ with `tr` requests in character encoding macro files. The
+ formatter does this for us now.
+
+2022-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Translate 8-bit NBSP and SHY on input.
+
+ * src/roff/troff/input.h: Define constant integers for "input"
+ no-break spaces and soft hyphens for EBCDIC and non-EBCDIC
+ (presumably ASCII/ISO 8859/Unicode) systems.
+
+ * src/roff/troff/input.cpp (token::next): Translate the input
+ character codes for NBSP to \~ and SHY to \%.
+
+ Fixes <https://savannah.gnu.org/bugs/?58962>. Thanks to Dave
+ Kemper for the report, code review, and his suggestion to push
+ more work to compile time.
+
+2022-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [groff]: Regression-test Savannah #58962.
+
+ * src/roff/groff/handle_special_input_code_points.diff: Do it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2022-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_if_request): Clarify diagnostic;
+ at the point it is thrown, we know not merely that we're in a
+ conditional expression, but processing an output comparison
+ operator.
+
+2022-04-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi:
+ * doc/ms.ms:
+ * man/groff.7.man: Characterize "roff language" in the singular,
+ not the plural, emphasizing the similarity of extant specimens.
+
+ * doc/groff.texi (Conventions Used in This Manual): Add
+ paragraph discussing denotations of "groff" and "roff".
+
+ Fixes <https://savannah.gnu.org/bugs/?62233>. Thanks to John
+ Gardner and Dave Kemper for the discussion.
+
+2022-04-12 Ingo Schwarze <schwarze@openbsd.org>
+
+ Delete the harmful, ill-designed, buggy, and essentially
+ unmaintained and untested --with-doc option of the configure
+ script.
+
+ * configure.ac: Delete five AM_CONDITIONAL variables, one
+ autoconf(1) macro call, and some related diagnostic output.
+ * doc/doc.am: Delete two BUILD_EXAMPLES and one BUILD_OTHERDOC
+ conditional and use BUILD_HTML instead of BUILD_HTMLEXAMPLES.
+ * m4/groff.m4: Delete the GROFF_DOC_CHECK macro and simplify the
+ macros GROFF_HTML_PROGRAMS, GROFF_INSTALL_INFO, GROFF_MAKEINFO,
+ and GROFF_PDFDOC_PROGRAMS. This also deletes more than thirty
+ configuration variables.
+ * Makefile.am: Delete comments about 16 variables that are no
+ longer set.
+ * NEWS: Add details regarding the rationale.
+
+2022-04-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/preconv.cpp (unicode_entity): Convert
+ input U+00A0 to \~ as troff would, not to \[u00A0].
+
+ Fixes <https://savannah.gnu.org/bugs/?62300>.
+
+2022-04-11 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf] fails to deal with 255th glyph in font.
+
+ * src/devices/gropdf/gropdf.pl: a pdf font can only contain 255
+ glyphs. The array which holds the glyph names also holds the
+ start position (zero) as first element, it is legal for it to
+ contain 256 elements, so truncate to 256 (not 255).
+
+ Fixes <https://savannah.gnu.org/bugs/?62294>.
+
+2022-04-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [localization]: Define hyphenation mode registers for Japanese
+ and Chinese. They are set to zero but must be defined so that
+ macro packages can rely on their existence without causing 'reg'
+ warnings.
+
+ * tmac/ja.tmac:
+ * tmac/zh.tmac: Do it.
+
+2022-04-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Add test for multi-lingual man(7) scenario.
+
+ * tmac/tests/localization-works.sh: Test two more cases. Ensure
+ that the 'trap bit' (hyphenation value 2, which has nothing to
+ do with any language) is preserved when switching locales back
+ from a CJK language, since those languages' modes
+ unconditionally clear it. We test Japanese and Chinese; we have
+ no localization macro file for Korean at this time.
+
+2022-04-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Slightly refactor `an*abbreviate-inner-footer`.
+
+ * tmac/an.tmac (an*abbreviate-inner-footer): Discard
+ unnecessary string.
+
+2022-04-09 Ingo Schwarze <schwarze@openbsd.org>
+
+ Fix the configuration of texi2dvi.
+
+ * m4/groff.m4: Set groff_have_texi2dvi if texi2dvi(1) is
+ available and usable, even if the availability was specified by
+ the user by manually providing the configure variable
+ PROG_TEXI2DVI, and not only if it was autodetected.
+ Also, set the PROG_TEXI2DVI Makefile variable to the name of
+ the texi2dvi program specified by the user or autodetected,
+ and not to the string "found", such that this Makefile variable
+ can be used for invoking the program.
+ * doc/doc.am: Call the texi2dvi program specified by the user
+ or autodetected rather than hardcoding "texi2dvi". This lets
+ the groff build succeed on systems where the first texi2dvi
+ in the $PATH is an old version unfit for groff's purposes.
+
+2022-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Abbreviate long `TH` arguments more carefully.
+
+ * tmac/an.tmac: Do it.
+ (an*scan-string-for-backslash): Add new helper macro.
+ (an*abbreviate-inner-footer): Rewrite. Use the foregoing and a
+ different technique to compute available space and shorten the
+ string.
+
+ Fixes <https://savannah.gnu.org/bugs/?62257>.
+
+2022-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add regression test for Savannah #62257.
+
+ * tmac/tests/an_do-not-abbreviate-escape-using-TH-arguments.sh:
+ Do it.
+ * tmac/tmac.am (tmac_TESTS): Run it.
+
+2022-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Trivially refactor. Rename strings `an-ifoot`
+ to `an*ifoot` and `an-outer-footer-text` to `an*ofoot`.
+
+2022-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Refactor. Abbreviate page title and inner
+ footer only once per document instead of once per page.
+ Exception: the legacy macros `AT` and `UC` change the inner
+ footer, so re-abbreviate it if they are called.
+ (TH, AT, UC): Call abbreviation macros from here...
+ (an-header, an-footer): ...instead of here.
+
+2022-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Refactor: initialize header/footer environment
+ only once. Also rename it to `an*env-header-and-footer`.
+ (TH): Do it here...
+ (an-header, an-footer): ...instead of here.
+
+2022-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Trivially refactor.
+ (an*prepare-page-title): Rename this...
+ (an*abbreviate-page-title): ...to this.
+ (an-prepare-inner-footer): And this...
+ (an*abbreviate-inner-footer): ...to this.
+ (an-header, an-footer): Update call sites.
+
+2022-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/other.cpp (hmotion_box::output): Fix typo in
+ generated MathML diagnostic message.
+
+2022-04-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (EXTRA_DIST): Add "groff.dvi" and "groff.pdf" to
+ ensure that the GNU-released groff distribution archive contains
+ our Texinfo manual in these formats. (This doesn't increase the
+ build-dependency requirements unless you want to "make dist", in
+ which case it _should_.)
+
+2022-04-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Add nroff mode fallback for `UL` macro.
+
+ * tmac/s.tmac (UL): On nroff devices, bracket the first argument
+ with \(ul (underline rule) special character escape sequences.
+ {In plain language, '.UL "like this"' renders "_like this_".}
+ See corresponding 12 February change to "tmac/e.tmac".
+
+2022-04-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Drop unnecessary `-I` options to groff.
+ (DOC_GROFF): There is no need to look at the top of the build
+ directory for any file inclusions.
+ (doc/webpage.html): There is no need to look in `doc_builddir`
+ for file inclusions, since that is the current working directory
+ when "webpage.ms" is processed.
+
+2022-04-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Trivially refactor. Use `RM` macro idiomatically.
+ Automake ensures that it is defined to call an `rm` command with
+ the `-f` option, and this in turn ignores failures to delete
+ nonexistent files, so...
+ (uninstall_doc_examples, uninstall-pdf): Stop adding superfluous
+ `-f` flag.
+ (clean_infodoc uninstall-pdf, uninstall-html): Stop prefixing
+ command with `-` to ignore error exit status.
+ (uninstall-html): Drop superfluous `-r` flag; we're only
+ deleting files with this command, not directories.
+
+2022-04-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Trivially refactor shell style in rule commands.
+ The placement of `&&` was inconsistent. Always begin a
+ continued rule line with it, and don't give it its own
+ indentation level. In general, operators adjacent to line
+ continuations should _follow_ the continuations because they are
+ easier for humans to spot at the (possibly indented) beginning
+ of a physical line.
+
+2022-04-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am: Rename `TFLAG` macro, which means "tmac flag", to
+ `MFLAG`, because it expands to `-M` options to groff, not the
+ `-T` option, which can be bewildering.
+ * doc/doc.am (DOC_GROFF): Update expansion site.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Rename `DOC_GROFF_ONLY` to `DOC_GROFF`.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Refactor. Drop ghastly hack used to get file
+ names into troff diagnostics when reading from standard input.
+ We've refactored so that it no longer does, making the hack
+ unnecessary. For the same reason, no users of the `DOC_GROFF`
+ macro remain, so delete it. Add comments to explain what
+ `DOC_SED` and `DOC_GROFF_ONLY` are for.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Refactor.
+ (doc/pic.html, doc/webpage.html): Drop indirection of source
+ document through `DOC_SED` macro. It was not necessary since
+ neither of these documents are parameterized in configuration
+ options (that is, they don't contain @VERSION@ or @g@).
+
+2022-04-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Trivially refactor.
+ (doc/webpage.html): Tidy up dependency list. Create directory
+ using the same macro interpolation we use to change into it.
+
+2022-04-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Refactor and fix error in builds in remote
+ out-of-source-tree builds exposed by pending commit and `make
+ distcheck`. The images generated for the pic.html and
+ webpage.html files were being built in the wrong directory, and
+ subsequently not found by an install rule.
+ (imagedir): Add comment explaining purpose of macro. It should
+ _not_ be used with any file specifications relative to the
+ source or build trees--it is for installation directories only.
+ (htmldocimagedir, exampleimagedir): Drop macros.
+
+ (doc/pic.html, doc/webpage.html): Replace interpolations of
+ `imagedir` with literal "img", since these files are being
+ generated within the build tree: the directory name is known.
+
+ (mostlyclean_doc, install_doc_htmldoc, install_doc_examples):
+ Replace interpolations of `htmldocimagedir` relative to
+ `doc_builddir` with "img" literals.
+
+ (install_doc_htmldoc, uninstall_doc_htmldoc): Interpolate
+ concatenation of `htmldocdir` and `imagedir` instead of
+ `htmldocimagedir` (relative to `DESTDIR`).
+ (install_doc_examples, uninstall_doc_examples): Interpolate
+ concatenation of `exampledir` and `imagedir` instead of
+ `exampleimagedir` (relative to `DESTDIR`).
+
+2022-04-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Refactor. Relocate "doc/grnexampl.ps" target to
+ group it with other me(7) documents. Put addition of
+ "doc/examples.stamp" to `MOSTLYCLEANFILES` adjacent to its
+ target rule. Relocate same rule so that it precedes the target
+ depending on it (make(1) might not benefit from this, but human
+ readers can).
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Refactor.
+ (DOC_GROFF_ONLY): Drop preprocessor options from groff command.
+ This macro is now, simply, a way to run the in-tree groff: no
+ assumptions about preprocessors, macro packages, or output
+ device are made.
+ (doc/pic.html, doc/webpage.html): Add only necessary
+ preprocessor options after expansion of `DOC_GROFF_ONLY`.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Refactor. Add explicit dependencies of compiled
+ man page documents on preprocessors needed to generate them. In
+ their target rules, explicitly use groff's preprocessor options,
+ freeing us up to simplify the `DOC_GROFF_ONLY` macro.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Rationalize dependencies. Drop dependency of
+ `PROCESSEDEXAMPLEFILES` and `PROCESSEDDOCFILES` on expansion of
+ `hdtbltmac_DATA`, because nothing in this directory uses the
+ hdtbl package. Move dep of same expansions on "gnu.eps" to
+ "doc/webpage.html", which actually uses it. Put the numerous
+ dependencies of "doc/pic.html" and "doc/webpage.html" in a
+ parallel ordering so that they are easier for humans to
+ evaluate. These targets' dependencies on `bin_PROGRAMS` and
+ `prefixexecbin_PROGRAMS` are overkill and should be reviewed at
+ a later date.
+
+2022-04-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Refactor use of target and suffix rules.
+ (doc/meintro.me, doc/meintro_fr.me, doc/meref.me): Add target
+ rules, with lengthy, exasperated comment about lack of feature
+ parity in various make(1) implementations.
+ (doc/meintro_fr.ps): Add target rule, as this seems to be the
+ only way to keep GNU Make from ignoring a '_fr.me._fr.ps' suffix
+ rule in favor of '.me.ps', which doesn't call preconv (and
+ doesn't need to--and moreover we don't want to build English
+ me(7) documents with the `-mfr` option). Depend on `preconv`.
+ (doc/webpage.ps): Convert from suffix rule to target rule.
+ (doc/ms.ps, doc/pic.ps, doc/webpage.ps): Add target rules and
+ dependencies.
+ (.ms.ps): Add commented-out suffix rule (since nothing uses it,
+ but might in the future).
+ (doc/meintro_fr.ps, .me.ps, doc/pic.ps, doc/webpage.ps): Migrate
+ expansions of `DOC_GROFF` to `DOC_GROFF_ONLY` to prepare for a
+ forthcoming simplification.
+
+2022-04-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Clean generated doc files better. doc/me*.me were
+ getting left behind in the build tree.
+ (MOSTLYCLEANFILES): Add `GENERATEDDOCFILES`. This includes
+ `DOC_GNU_EPS`, so...
+ (clean_maintdoc): Drop phony target that manually removes it.
+ (maintainer-clean-local): Drop dependency on foregoing.
+
+2022-04-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/xditview/xditview.am (install_xditview)
+ [!WITHOUT_X11]: Stop backing up existing "GXditview" and
+ "GXditview-color" application defaults files. There is no
+ symmetric restoration of them in the uninstall target, and it
+ seems like unjustifiable complexity to add such. These are
+ groff-specific file names, installed (by default) to /usr,
+ not /etc, so they are not going to be "configuration files" in
+ Debian-based systems, for example (and likely not elsewhere).
+ There are other ways to supersede application defaults for
+ programs using the X Toolkit Intrinsics.
+
+2022-04-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Stop treating "gnu.eps" as an "example" file; it
+ is also used by pdfmark's cover.ms, which is ordinary
+ documentation. We therefore must not omit it when building.
+ (install-data-hook): Add dependency on new phony target,
+ "install_doc_gnu_eps".
+ (install_doc_examples): Move installation of "gnu.eps" from
+ here...
+ (install_doc_gnu_eps): ...to here. Also refactor the loop we
+ use to locate the file to follow a more idiomatic pattern.
+
+2022-04-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (dist-info-bits, install_infodoc, dist-gnueps): Fix
+ code style nit: use consistent "brace style" in conditionals and
+ loops.
+
+2022-04-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (mostlyclean_doc): When cleaning, try harder to
+ remove the image directory created by the "pic.html" and
+ "webpage.html" targets.
+
+2022-04-02 Ingo Schwarze <schwarze@openbsd.org>
+
+ * doc/doc.am: Stop installing doc/meintro.me.in,
+ doc/meintro_fr.me.in, and doc/meref.me.in.
+
+2022-03-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/webpage.ms: Die horribly if `PSPIC` call fails.
+
+2022-03-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pspic.tmac (pspic*error-hook): Define (as empty).
+ * man/groff_tmac.5.man (Auxiliary packages) <pspic>: Document.
+ * NEWS: Add item.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/webpage.ps): Relocate target rule.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/pdfpic_does-not-choke-on-bad-pdfinfo-output.sh:
+ * tmac/tests/pdfpic_falls-back-to-PSPIC.sh: Remove output file
+ even when skipping test. Quote `fail` variable when checking it
+ with `test -z`.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff_tmac.7.man (Auxiliary packages): Tweak sboxes
+ documentation to imply ms dependency.
+
+ Fixes <https://savannah.gnu.org/bugs/?62062>.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (an*bookmark): Trivially refactor. Now that
+ we're no longer doing arithmetic on our first argument, simplify
+ our definition. Made possible by commit 3baf0e2f3, 23 February.
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/preconv.cpp (detect_file_encoding): Demote
+ an error diagnostic to a debugging message. libuchardet has no
+ man page, and inspecting the source of the
+ `uchardet_handle_data` function we find that it effectively
+ returns a Boolean value (if the result of a
+ `reinterpret_cast`(!) is not `NS_OK`). This is useless
+ information for a user-facing tool. We're designed to muddle on
+ regardless (see preconv(1)).
+
+2022-03-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grodvi/dvi.cpp (dvi_printer::set_color)
+ (draw_dvi_printer::fill_next):
+ * src/devices/grops/ps.cpp (output::put_color):
+ * src/libs/libgroff/color.cpp (color::print_color): Construct
+ doubles instead of casting to them.
+
+2022-03-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [doc]: Refactor handling of "gnu.eps" file.
+
+ * doc/doc.am: Put "gnu.eps" in a Make macro, `DOC_GNU_EPS`.
+ ($(PROCESSEDEXAMPLEFILES) $(PROCESSEDDOCFILES),
+ doc/webpage.html, install_doc_examples): Migrate dependency to
+ `DOC_GNU_EPS`.
+ (doc/webpage.ps): Add (missing) dependency on `DOC_GNU_EPS`.
+ (DOC_GROFF_ONLY): Drop `-I` flag; it's not necessary given the
+ following.
+ (.ms.ps): Drop `-mwww` argument from suffix rule. A truly
+ generic ms document won't need it.
+ (doc/webpage.ps): Add target rule. Include `-mwww` argument.
+ (doc/webpage.ps, doc/webpage.html): Pass `-I` option to
+ `DOC_GROFF` and `DOC_GROFF_ONLY` (respectively) to enable
+ location of "gnu.eps" file. Search the build and source trees'
+ "doc" directories because the file can be generated as part of
+ the build or can come with the distribution archive.
+ (EXTRA_DIST): Drop redundant inclusion of "doc/gnu.xpm".
+ (clean_maintdoc): Add phony target to dispose of `DOC_GNU_EPS`.
+ (maintainer-clean-local): Depend on "clean_maintdoc".
+
+ * tmac/tests/pdfpic_does-not-choke-on-bad-pdfinfo-output.sh:
+ * tmac/tests/pdfpic_falls-back-to-PSPIC.sh: Update tests to look
+ for "gnu.eps" in "doc" directory of build tree. Give generated
+ files distinguishable names so their tests can run concurrently.
+
+2022-03-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Add new macro `PROCESSEDDOCFILES_PS` to isolate
+ names of targets in PostScript format. Expand this macro in
+ definition of `PROCESSEDDOCFILES` and use it to move PostScript
+ font description file dependencies of the latter and
+ `PROCESSEDEXAMPLEFILES` to the former. (At present, the
+ dependency might seem superfluous, since those files are in the
+ source distribution, but it's conceivable that in the near
+ future, they will be produced at build time from Adobe font
+ metric files; see font/devps/generate/Makefile). The "pic.html"
+ and "webpage.html" targets already had such a dependency because
+ of the way grohtml (pre-grohtml) works.
+
+2022-03-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * INSTALL.extra: Add a section on uninstalling.
+
+2022-03-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Create target rule for "doc/grnexampl.ps" instead
+ of relying on a suffix rule. Explicitly depend on grn and eqn
+ executables. Produce output using their groff flags, "-ge".
+
+2022-03-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdfpic.tmac (PDFPIC): Fix breakage when no temporary
+ directory environment variables are defined: actually use string
+ interpolation syntax in comparand to output comparison
+ operator. Problem introduced by me in commits adc1999af and
+ 24900cf6d, 15 February.
+
+2022-03-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devX100-12/devX100-12.am:
+ * font/devX100/devX100.am:
+ * font/devX75-12/devX75-12.am:
+ * font/devX75/devX75.am: Fix in-tree build; expand `fontdir`
+ instead of `abs_top_builddir` Make macro when defining Automake
+ variable for generated artifacts. Problem introduced by me in
+ commit 3c82cbbfe, 27 February. Thanks to Robert Goulding for
+ the report.
+
+2022-03-22 Ingo Schwarze <schwarze@openbsd.org>
+
+ * doc/doc.am: delete redundant "SUFFIXES +=" line
+
+2022-03-22 Ingo Schwarze <schwarze@openbsd.org>
+
+ * doc/doc.am: fix non-portable syntax in the meintro_fr.ps
+ target: This rule requires DOC_GROFF and hence $<, so turn it
+ into a suffix rule.
+
+2022-03-22 Ingo Schwarze <schwarze@openbsd.org>
+
+ * doc/doc.am: fix non-portable syntax in the doc/me*.me targets:
+ POSIX does not define the meaning of $< in non-suffix rules, so
+ use the portable $? instead. This is adequate here because each
+ of these three rules has exactly one prerequisite.
+
+2022-03-22 Ingo Schwarze <schwarze@openbsd.org>
+
+ * doc/doc.am: fix non-portable syntax in the groff-man-pages.*
+ targets by using DOC_GROFF_ONLY rather than DOC_GROFF in order
+ to not use $< outside a suffix rule; DOC_GROFF functionality is
+ not needed here in the first place.
+
+2022-03-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac:
+ * tmac/doc.tmac: Stop remapping input hyphens on `utf8` device.
+
+2022-03-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac: Stop remapping ` and ' on `utf8` output device.
+ Aligns mdoc(7) with commit 697e6db7f, 19 October 2020 (for
+ man(7)).
+
+2022-03-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Fix bug introduced in commit
+ 0d451902c, 10 March. Don't store a newline in the version
+ string. Put `\n` in its interpolation context as necessary.
+
+2022-03-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Install ptx.tmac.
+
+ * tmac/tmac.am (TMACNORMALFILES): Add it.
+ * NEWS: Report availability.
+
+ Fixes <https://savannah.gnu.org/bugs/?62201>. Thanks to Ralph
+ Corderoy for the report.
+
+2022-03-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Drop ditroff(7) document. It says nothing that is not covered
+ elsewhere.
+
+ * man/ditroff.7.man: Delete.
+ * doc/doc.am (GROFF_MAN_PAGES):
+ * man/man.am (man7_MANS, EXTRA_DIST): Stop processing, shipping.
+ * src/roff/groff/groff.1.man: Drop cross reference to it.
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?61817>.
+
+2022-03-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [preconv]: Trivially refactor.
+
+ * src/preproc/preconv/preconv.cpp: Use diagnostic message
+ functions from libgroff where possible. Explain in a comment
+ why we don't use `debug()`. Boolify and rename some variables,
+ and use Boolean literals to assign to them.
+ debug_flag -> is_debugging
+ invalid_warning -> emit_invalid_utf8_warning
+ incomplete_warning -> emit_incomplete_utf8_warning
+ Rename `expected_bytes` to `expected_byte_count`. Except for
+ the debugging flag, these are all members of `struct
+ conversion`.
+ (get_tag_lines): Migrate to `warning()`.
+ (detect_file_encoding): Migrate to `error()` and `fatal()`, as
+ appropriate.
+ (utf8::invalid, utf8::incomplete, get_tag_lines): Don't break a
+ line in the middle of a diagnostic; doing so frustrates grepping
+ and necessarily makes an assumption about the terminal width.
+
+2022-03-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Trivially refactor.
+
+ * src/roff/troff/input.cpp: Rename global variable
+ `have_string_arg` to `have_multiple_params` and demote it from
+ an integer to a Boolean. Assign Boolean literals to it.
+ (read_long_escape_parameters, get_copy, token::next): Do it.
+
+2022-03-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix Savannah #62191.
+
+ * src/preproc/tbl/main.cpp (table_input::get): Increment input
+ line counter when encountering an escaped newline; this fixes
+ inaccurate diagnostics from the formatter at any point in a
+ document after a line-continued row of table data. Also drop a
+ "perhaps" comment. I tested the surmise (setting the FSM state
+ to "START"), and it results in bad formatting.
+
+ Fixes <https://savannah.gnu.org/bugs/?62191>. Problem appears
+ to date back to groff 1.02 (June 1991) at the latest.
+
+2022-03-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Regression-test Savannah #62191.
+
+ * src/preproc/tbl/tests/count-continued-input-lines.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+2022-03-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Environments): Clarify environment handling.
+ * man/groff.7.man (Environments): Add new section.
+
+ Fixes <https://savannah.gnu.org/bugs/?62036>. Thanks to Dave
+ Kemper for the report and a suggested patch.
+
+2022-03-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (initialization): Define `@b` as empty if
+ formatting for HTML, because no page breaks occur in that
+ format.
+
+ Fixes <https://savannah.gnu.org/bugs/?62039>.
+
+2022-03-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grodvi/dvi.cpp (usage): Align usage message with
+ man page; disclose `-l` option.
+
+2022-03-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grodvi/dvi.cpp (main):
+ * src/devices/grops/ps.cpp (main): Update diagnostic:
+ characterize bad `-w` argument as "invalid", not "bad", and
+ explicitly report it as ignored.
+
+ * src/devices/grodvi/dvi.cpp (main): Report invalid parameter
+ in `-w` diagnostic.
+
+2022-03-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grodvi/dvi.cpp (dvi_printer::set_color)
+ (draw_dvi_printer::fill_next):
+ * src/devices/grops/ps.cpp (output::put_color):
+ * src/libs/libgroff/color.cpp (color::print_color): Explicitly
+ cast `enum` divisors to `double`; quietens
+ `-Wdeprecated-enum-float-conversion` warnings.
+
+ Fixes <https://savannah.gnu.org/bugs/?61964>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-03-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Recover more quickly from missing `EE` calls.
+ (initialization): Define new strings, `an*body-family` and
+ `an*example-family` to house the font families used in these
+ rendering contexts.
+ (TH, SH, SS): Restore the font family to `an*body-family`.
+ (TH): Set font style to roman as well.
+ (EX): Change to `an*example-family` instead of literal "C".
+
+ Fixes <https://savannah.gnu.org/bugs/?62187>.
+
+2022-03-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Test register for existence before using it to
+ set hyphenation mode. A site troffrc or other local
+ customization might remove the register (which is guaranteed to
+ be set under the stock configuration) and, perversely, Heirloom
+ Doctools troff interprets a `do` request, instead of ignoring it
+ as a historical troff implementation would, so if they borrow
+ our me(7) changes, the register would be unset, interpolate
+ zero, and hyphenation would wind up disabled.
+
+ Fixes <https://savannah.gnu.org/bugs/?62181>. Thanks to Dave
+ Kemper for the report.
+
+2022-03-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Rename test to apply naming scheme.
+
+ * tmac/tests/pdfpic_falls_back_to_PSPIC.sh: Rename this...
+ * tmac/tests/pdfpic_falls-back-to-PSPIC.sh: ...to this.
+ * tmac/tmac.am (tmac_TESTS): Use new name.
+
+2022-03-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grops/ps.cpp (usage): Align usage message with man
+ page synopsis.
+
+2022-03-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Input Line Traps): Fix error; input traps do
+ _not_ ignore control lines. Error appears to have crept in with
+ the first version of our Texinfo manual, shipped with groff 1.14
+ {December 1999}.
+
+2022-03-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devps/devps.am: Rename targets.
+ (fonts):
+ (devps_fonts): Rename these...
+ (maintainer-font-descriptions):
+ (devps_font-descriptions): ...to these. Add comments explaining
+ what they're for and why they aren't used in a build.
+
+ * font/devps/generate/Makefile: Add `outdir` variable to store
+ destination directory of font description files, and update all
+ targets that write artifacts to use this directory. This makes
+ the targets "phony", which I don't regard as a problem since the
+ generated artifacts are kept under source control, and this
+ isn't really a user-facing script (even though it gets
+ installed). I think there is a good chance that this will
+ become a shell script, because to avoid regressions we need to
+ generate the font descriptions using both the 229-glyph and
+ 314-glyph versions of the Adobe fonts' AFM files (so that we get
+ wider glyph coverage _and_ more kerning pair data) and we need
+ to add kerning information for the ellipsis (Savannah #58897).
+ (symbolsl.afm): Revise generation process to be sensitive to
+ failure.
+
+2022-03-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devps/symbolsl.afm: New file.
+ * font/devps/devps.am (EXTRA_DIST): We have long shipped
+ "symbol.afm" with the distribution archive--I don't see why we
+ don't ship "symbolsl.afm" and "zapfdr.afm" as well (metrics for
+ `SS`, the slanted symbol font, and ZDR, reversed Zapf Dingbats).
+ Like the Type 1 font descriptions themselves, this file is
+ updated only in "maintainer mode", not as part of the build.
+ Moreover, these fonts are not part of the PostScript level 2
+ base 35 fonts so their AFM files are unlikely to be readily
+ available elsewhere.
+
+2022-03-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Trivially refactor. Store the
+ program's version string in scalar `afmtodit_version` and use
+ that in the usage message and comment embedded in the output.
+
+2022-03-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Fix code style nits. Migrate
+ to the shebang line style we use in more recently modified Perl
+ scripts. Replace `-w` with `use warnings;`. Shorten an output
+ comment since the groff version string can grow long (see commit
+ 1264531310, 14 January 2018).
+
+2022-03-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Stop writing full file name to
+ the generated font description file as the "name" (i.e., don't
+ include directory components).
+
+ Fixes <https://savannah.gnu.org/bugs/?62150>. Thanks to Dave
+ Kemper for the discussion and code review.
+
+2022-03-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.1.man:
+ * src/utils/afmtodit/afmtodit.pl: Update and align man page
+ synopsis, option descriptions, and command usage output.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/X.tmac: Redirect `fchar` requests for \[lq] and \[rq] to
+ \[dq] since the X11 Type 1-based text fonts encode ISO 8859-1
+ {Latin-1} and don't have typopgrapher's quotes. Drop `fchar`
+ request for \[aq], which _is_ represented, per recent changes.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * /font/devX100-12/CB:
+ * /font/devX100-12/CBI:
+ * /font/devX100-12/CI:
+ * /font/devX100-12/CR:
+ * /font/devX100-12/HB:
+ * /font/devX100-12/HBI:
+ * /font/devX100-12/HI:
+ * /font/devX100-12/HR:
+ * /font/devX100-12/NB:
+ * /font/devX100-12/NBI:
+ * /font/devX100-12/NI:
+ * /font/devX100-12/NR:
+ * /font/devX100-12/TB:
+ * /font/devX100-12/TBI:
+ * /font/devX100-12/TI:
+ * /font/devX100-12/TR:
+ * /font/devX100/CB:
+ * /font/devX100/CBI:
+ * /font/devX100/CI:
+ * /font/devX100/CR:
+ * /font/devX100/HB:
+ * /font/devX100/HBI:
+ * /font/devX100/HI:
+ * /font/devX100/HR:
+ * /font/devX100/NB:
+ * /font/devX100/NBI:
+ * /font/devX100/NI:
+ * /font/devX100/NR:
+ * /font/devX100/TB:
+ * /font/devX100/TBI:
+ * /font/devX100/TI:
+ * /font/devX100/TR:
+ * /font/devX75-12/CB:
+ * /font/devX75-12/CBI:
+ * /font/devX75-12/CI:
+ * /font/devX75-12/CR:
+ * /font/devX75-12/HB:
+ * /font/devX75-12/HBI:
+ * /font/devX75-12/HI:
+ * /font/devX75-12/HR:
+ * /font/devX75-12/NB:
+ * /font/devX75-12/NBI:
+ * /font/devX75-12/NI:
+ * /font/devX75-12/NR:
+ * /font/devX75-12/TB:
+ * /font/devX75-12/TBI:
+ * /font/devX75-12/TI:
+ * /font/devX75-12/TR:
+ * /font/devX75/CB:
+ * /font/devX75/CBI:
+ * /font/devX75/CI:
+ * /font/devX75/CR:
+ * /font/devX75/HB:
+ * /font/devX75/HBI:
+ * /font/devX75/HI:
+ * /font/devX75/HR:
+ * /font/devX75/NB:
+ * /font/devX75/NBI:
+ * /font/devX75/NI:
+ * /font/devX75/NR:
+ * /font/devX75/TB:
+ * /font/devX75/TBI:
+ * /font/devX75/TI:
+ * /font/devX75/TR: Regenerate font descriptions with xtotroff,
+ using updated ISO-8859_1 map. \[aq] and \[oq] are now aliases
+ of "'" and \[ga] is an alias of "`". This change probably
+ should have been made when the X11 fonts were corrected in
+ XFree86 4.0 (March 2000). See
+ <https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html>.
+
+ Fixes <https://bugs.debian.org/243238>.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libxutil/DviChar.c (ISO_8859_1_map): Fix incorrect
+ assignment of Latin-1 grave accent to \[oq] special character;
+ reassign it to the neutral apostrophe. Map \[aq] to neutral
+ apostrophe. Map \[ga] to '`'.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/xtotroff/xtotroff.1.man (Options) <-d>: Document new
+ option.
+ * src/utils/xtotroff/xtotroff.c (usage): Align with man page.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Manipulating Filling and Adjustment):
+ Explicitly identify the page offset as an output line property
+ that is not determined until a break occurs.
+
+ (Line Layout) <po>: Correct error; the page offset for terminal
+ devices is set by "tty.tmac", not "troffrc". (The manual has
+ been wrong for a long time; we've had it in tty.tmac since James
+ Clark put it there in 1992.) Recast and tighten wording. Drop
+ the word "horizontal"; there is no vertical page offset (as
+ such) in *roff. Replace hand-waving about unexpected results
+ with a description of the formatter's behavior. Document
+ request behavior without an argument before getting into the
+ weeds (and CSTR #54 errata). Migrate terminology from "scaling
+ indicator" to "scaling unit".
+
+ Fixes <https://savannah.gnu.org/bugs/?58035>.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Expressions): Expand '|' operator explanation.
+ Split discussion of its application into horizontal and vertical
+ contexts. Add example of vertical usage.
+
+ Fixes <https://savannah.gnu.org/bugs/?60820>.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp: Trivially refactor. Drop `#define`
+ that was working around a GCC 2.95-era libstdc++ problem.
+ Shorten long line.
+ (get_char_for_escape_parameter): Demote parameter from `int` to
+ `bool` and use Boolean literal for default argument. Annotate a
+ null pointer constant.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Rename some internal functions.
+
+ * src/roff/troff/input.cpp: Do it.
+ (read_escape_name):
+ (read_long_escape_name):
+ (read_two_char_escape_name):
+ (get_char_for_escape_name):
+ (read_increment_and_escape_name): Rename these...
+ (read_escape_parameter):
+ (read_long_escape_parameters):
+ (get_char_for_escape_parameter):
+ (read_two_char_escape_parameter):
+ (read_increment_and_escape_parameter): ...to these.
+ (read_two_char_escape_parameter, read_long_escape_parameters,
+ read_escape_parameter, read_increment_and_escape_parameter,
+ get_copy, token::next): Update call sites.
+
+2022-03-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (get_char_for_escape_name): Recast
+ diagnostic messages to more accurately refer to escape
+ "sequence" rather than "name". "Name" is a confusing term here,
+ given that it also applies to a group of objects sharing a name
+ space (natch): requests, macros, strings, and diversions.
+ Further, the "escape name" cited by these diagnostics is not the
+ escape function selector; that is, the character after the
+ escape character which determines how the escape sequence is to
+ be interpreted. These diagnostics are only thrown after that
+ function is known, however, when parsing of an escape sequence
+ parameter is attempted.
+ (input_char_description): Drop leading articles ("a") from
+ input character descriptions, to economize in diagnostic
+ messages this function helps produce.
+ (non_empty_name_warning): Use zero copula for economy.
+
+ * src/roff/troff/input.cpp (empty_name_warning, read_size)
+ (token::get_char, check_missing_character):
+ * src/roff/troff/number.cpp (start_number, parse_term): Recast
+ messages to more consistently use the form "expected X, got Y"
+ where feasible.
+
+ * src/roff/troff/number.cpp (start_number): Say "numeric
+ expression missing" instead of "missing number"; we don't
+ require a terminal symbol in the expression grammar here. Also
+ use `tok.description()` where we can, and remove assumption that
+ the escape character is the default.
+
+2022-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (AT, UC, HP): Add deprecation warnings. For the
+ last, only do so if we're not inside a synopsis (SY/YS), since
+ our definition of `SY` calls `HP` internally. (This does seem
+ hypocritical. Perhaps if we knew the correct CSS incantation
+ to speak in grohtml, we could un-deprecate `HP`.)
+
+2022-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.an (M4CHECK): Rename stamp file to make its purpose
+ clearer.
+
+2022-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Tweak customization management.
+
+ * tmac/an.tmac: Load "man.local" with `msoquiet` request, so
+ people can get rid of the file if they don't need it.
+ (PT, BT): Define these macros only if not already defined. This
+ is slightly less paranoid but far more ergonomic, given
+ interactions with the andoc wrapper. Now user-defined page
+ header traps (PT) defined in man.local can take effect on the
+ first page rendered.
+
+ * tmac/groff_man.7.man.in (Hooks): Document how to remove page
+ headers and/or footers entirely.
+
+ Fixes <https://savannah.gnu.org/bugs/?61954>.
+
+2022-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [refer,mm]: Add and use `ref*reset` macro to clean up between
+ bibilography entries.
+
+ * tmac/refer.tmac (]-): Move string clean up logic from here...
+ (ref*reset): ...to this new macro. Now we can also use it...
+
+ * contrib/mm/refer-mm.tmac (ref*][-first-pass): ...here.
+
+ Problem appears to date back to refer-mm.tmac's introduction in
+ January 2011. Thanks to Bjarni Ingi Gislason for the root-cause
+ analysis and proposed fix, to which I applied the DRY principle
+ and added a reset of `ref*string` as well.
+
+ Fixes <https://savannah.gnu.org/bugs/?60657>.
+
+2022-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mm]: Regression-test Savannah #60657.
+
+ * contrib/mm/tests/remove-stale-bib-entry-data.sh: Do it.
+ * contrib/mm/tests/artifacts/60657.ref: Add new file.
+ * contrib/mm/mm.am (mm_TESTS): Run test.
+ (EXTRA_DIST): Ship test artifact in distribution archive.
+
+ Thanks to Bjarni Ingi Gislason for the straightforward
+ bug reproducer.
+
+2022-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [refer]: Report correct line number in bibliography file
+ diagnostics.
+
+ * src/preproc/refer/refer.cpp (do_bib): Set line number to 1
+ upon successfully opening a bibliography file.
+
+ Problem appears to date back to groff 1.02 (June 1991) at the
+ latest.
+
+ Fixes <https://savannah.gnu.org/bugs/?62142>.
+
+2022-03-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [refer]: Regression-test Savannah #62124.
+
+ * src/preproc/refer/tests/report-correct-line-numbers.sh: Do it.
+ * src/preproc/refer/tests/artifacts/62124.ref: Add new file.
+ * src/preproc/refer/refer.am (refer_TESTS): Run test.
+ (EXTRA_DIST): Ship test artifact in distribution archive.
+
+2022-03-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/div.cpp
+ (top_level_diversion::transparent_output):
+ * src/roff/troff/input.cpp (transparent_translate): Suppress two
+ troublesome (i.e., more or less spurious) error diagnostics
+ about transparent output/throughput unless the environment
+ variable `GROFF_ENABLE_TRANSPARENCY_WARNINGS` is present. This
+ is a bit of a bodge until we get diversion sanitization worked
+ out. See Savannah #61407.
+
+2022-03-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [preconv]: Stop assuming that the default input stream, or an
+ explicit '-' operand, is the only unseekable stream. Check
+ instead.
+
+ * src/preproc/preconv/preconv.cpp (do_file): Add new Boolean
+ `is_seekable`. Test the input stream with `fseek()` per a
+ suggestion from Ingo Schwarze. Report unseekability in debug
+ output and skip coding tag and uchardet tests altogether
+ {precisely paralleling our description in the preconv(1) man
+ page}. Also update debugging output to say "<standard input>"
+ instead of "-".
+
+ Fixes <https://savannah.gnu.org/bugs/?62131>.
+
+2022-03-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [preconv]: Regression-test Savannah #62131.
+
+ * src/preproc/preconv/tests/do-not-seek-the-unseekable.sh: Do
+ it.
+ * src/preproc/preconv/preconv.am (preconv_TESTS): Run test.
+
+2022-03-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (process_format): Update diagnostic
+ to recognize that a font mounting position is also an acceptable
+ argument to the 'f' column modifier.
+
+2022-02-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Refactor X11 font description generation. Integrate it with our
+ "new" (post-2014) Automake-based build system.
+
+ * src/utils/xtotroff/Makefile.in: Delete relic of old build
+ system. Also, it had a bug: it generated X11 output device
+ 'DESC' files with a "unitwidth 10" directive even for the "-12"
+ devices, which is not correct (the in-tree DESC files we've been
+ shipping for years were nevertheless correct, apparently fixed
+ by hand by James Clark in groff 1.07 [March 1993]).
+
+ * src/utils/xtotroff/xtotroff.am: Define `xtotroff` variable for
+ use by X11 font description generation targets below.
+
+ * font/devX100-12/devX100-12.am:
+ * font/devX100/devX100.am:
+ * font/devX75-12/devX75-12.am:
+ * font/devX75/devX75.am: Add new (phony) targets, variously
+ named "devX{100,100_12,75,75_12}", to generate the corresponding
+ output device's DESC file and run xtotroff(1) to generate its
+ font description files. Be sure to set the correct "unitwidth"
+ for the "-12" devices. Add new dependency-only rule
+ "maintainer-font-descriptions" depending on these new targets
+ for convenience (and future expansion to devps and devlj4).
+
+ * FOR-RELEASE: Document existence of
+ "maintainer-font-descriptions" Make target and when to run it.
+
+ Running this target with the aforementioned bug fix, overwriting
+ the in-tree DESC and font description files using data gathered
+ from a running X server, results in no changes whatsoever. Say
+ what you will about X11 core font technology--it's stable.
+
+2022-02-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Rename and ship "FontMap-X11". xtotroff(1) is not very useful
+ without a font name mapping file to read. To date it has been
+ available only in the source distribution. Remedy that. The
+ file is placed directly in the groff font directory alongside
+ the device directories because it applies to four different
+ devices, and four copies of this data are not required.
+
+ * src/devices/xditview/FontMap: Rename to...
+ * src/devices/xditview/FontMap-X11: ...this.
+
+ * LICENSES:
+ * src/devices/xditview/xditview.am (EXTRA_DIST): Reflect rename.
+
+ * src/devices/xditview/xditview.am (install_xditview
+ [!WITHOUT_X11], uninstall_xtdiview): (Un-)install it.
+
+ * src/utils/xtotroff/xtotroff.1.man (Files): Add section
+ documenting the presence and purpose of this file.
+
+2022-02-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [xtotroff]: Add `-d` option to produce font description files in
+ specified directory.
+
+ * src/utils/xtotroff/xtotroff.c: Do it. Add global `destdir`
+ pointer.
+ (xtotroff_exit): Add new function to clean up storage allocated
+ by `strdup()` (below) for destination directory.
+ (MapFont): Introduce new variable `file_name`, into which we
+ assemble a destination file name from `destdir` (if not null)
+ and the troff font name. Handle memory allocation failure (by
+ carefully dying). Free allocated storage on success and failure
+ paths out of the function.
+ (usage): Document new `-d` option.
+ (main): Instruct `getopt_long` to expect a `-d` flag with an
+ argument. Use `strdup()` to make a copy of any such option
+ argument. Call `xtotroff_exit()` instead of `exit()`.
+
+ * src/utils/xtotroff/xtotroff.1.man: Document new `-d` option.
+
+2022-02-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [xtotroff]: Trivially refactor.
+
+ * src/utils/xtotroff/xtotroff.c: Boolify. Include `stdbool.h`
+ and `errno.h` headers.
+ (charExists, CanonicalizeFontName, FontNamesAmbiguous, MapFont):
+ Boolify. Demote return type from `int` to `bool` and return
+ Boolean instead of integer literals.
+ (FontNamesAmbiguous, main): Reorder equality comparisons with
+ simple left-hand sides to avoid inadvertent lvalue assignments.
+ (FontNamesAmbiguous, MapFont): Refer to font name as "invalid",
+ not "bad", in diagnostic messages.
+ (MapFont, main): Use `strerror()` instead of `perror()` so that
+ diagnostics include the program name and an indication of
+ problem severity.
+ (MapFont): Compare `FILE` stream pointer to `NULL` instead of
+ treating it as a Boolean.
+ (main): Use `EXIT_SUCCESS` and `EXIT_FAILURE` constants from C
+ library instead of integer literals for exit status.
+
+2022-02-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pic]: Fix "unused result" compiler warning.
+
+ * src/preproc/pic/pic.ypp (placeless_element) <SH>: Check return
+ value of `system()` to quieten `-Wunused-result` warning; if it
+ is less than zero, report it to the standard error stream.
+
+2022-02-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/safer.tmac: Drop file from distribution. It contained
+ only comments.
+ * tmac/tmac.am (TMACNORMALFILES): Delete reference.
+ * NEWS: Add item. Suggest two workarounds for its absence.
+
+ Fixes <https://savannah.gnu.org/bugs/?61831>.
+
+2022-02-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac (initialization): Drop definition of
+ `doc-curr-size` register. It is no longer needed since nothing
+ internal to the package now changes the type size.
+
+ * tmac/doc.tmac (Fl, doc-print-recursive, doc-print-prefixes)
+ (doc-generic-macro, Ar, Cd, doc-do-func-decl, Fd, In, Nm, Pa)
+ (Tn, doc-enclose-string, Ef, Bd, doc-save-global-vars)
+ (doc-restore-global-vars, doc-diag-list, Xr, Dl, Vt, Ft, Fa)
+ (doc-do-func, Fn, doc-do-func-args, Fo, Fc, %A, %B, %C, %D, %I)
+ (%J, %N, %O, %P, %Q, %R, %T, %U, %V, doc-do-reference, Hf, An)
+ Lk):
+ * tmac/mdoc/doc-common (Sh, Ss, Rd):
+ * tmac/mdoc/doc-syms (Ux, Bx, At, Dx, Fx, Nx, Ox, Bsx, St, Lb):
+ Drop interpolations of the string and comments documenting that
+ each macro has a side effect on the type size.
+
+2022-02-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/doc.tmac (Tn):
+ * tmac/mdoc/doc-syms (Ux, Bx): Stop interpolating string
+ `doc-Tn-font-size` to set macro arguments at a smaller type
+ size. This leaves the string without a purpose, so...
+
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Drop definitions of `doc-Tn-font-size`.
+
+ * tmac/mdoc/doc-syms: Drop interpolations of that string from
+ numerous other string definitions.
+
+ Fixes <https://savannah.gnu.org/bugs/?60616>.
+
+2022-02-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Revert addition of man(7) `BD` register. This feature, which I
+ introduced in commit ea3b27102f (31 January) doesn't work
+ because pdf.tmac normalizes the bookmark depth. Embedding a man
+ page in a larger PDF document with appropriately nested
+ bookmarks is a project that will have to await another day (or
+ perhaps already has tools to implement it).
+
+ * tmac/an.tmac: Do it.
+ * tmac/groff_man.7.man.in: De-document it.
+
+2022-02-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdf.tmac: Add string containing the name of the macro
+ package for use in diagnostic messages.
+ (pdf:warn, pdf:error): Use it.
+
+ Continues the long process of fixing Savannah #52463.
+
+2022-02-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man,mdoc,me]: Revise hyphenation localization.
+
+ * tmac/an.tmac (an*reset-hyphenation-mode): New macro sets the
+ hyphenation mode appropriate to the locale depending on the
+ values of `cR` (continuous rendering mode) and `HY` (hyphenation
+ enablement); the latter is now interpreted as a Boolean. Define
+ new register `an*hyphenation-mode` reflecting these conditions.
+ (TH): Call the foregoing instead of invoking `hy` request.
+ (MR): Restore hyphenation mode to `an*hyphenation-mode`.
+ (initialization): Simplify; if not defined, set `HY` to 1.
+
+ * tmac/e.tmac (ld): Set the hyphenation mode here instead of in
+ initialization (which already calls this macro). Set the mode
+ to 6 for the benefit of anyone borrowing our me(7) changes, but
+ then immediately change to the mode determined by the
+ localization file.
+
+ * tmac/mdoc/doc-common (doc-hyphen-flags): Set a hyphenation
+ mode appropriate to the locale, depending on the values of `cR`
+ and `HY`.
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff: Simplify initialization; if not defined,
+ set `HY` to 1.
+
+ * tmac/cs.tmac:
+ * tmac/de.tmac:
+ * tmac/en.tmac:
+ * tmac/fr.tmac:
+ * tmac/it.tmac:
+ * tmac/sv.tmac: Before switching locales, set a flag if
+ troublesome value 2 of the hyphenation mode is set so that we
+ can preserve it. Shift man(7) and me(7) logic to follow setup
+ of the new hyphenation mode; for the former, call the new
+ `an*reset-hyphenation-mode`.
+
+ * tmac/groff_man.7.man.in:
+ * tmac/groff_mdoc.7.man: Document updated meaning of `HY`
+ register.
+
+ * NEWS: Add item noting change of man(7) `HY`'s meaning. Update
+ existing item regarding mdoc(7)'s support for it (groff 1.22.4
+ mdoc(7) didn't recognize the register at all).
+
+ Fixes <https://savannah.gnu.org/bugs/?61734> (for real this
+ time?).
+
+2022-02-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Regression-test Savannah #61734.
+
+ * tmac/tests/an_reset-hyphenation-correctly.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-02-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff_char.7.man (History): Add new section.
+ (See also): Add cross reference to 1976 edition of CSTR #54.
+
+2022-02-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_man.7.man.in (Document structure macros) <EX, EE>
+ [style]: Add material cautioning writers against asoociating
+ the disablement of filling with some sort of "literal mode".
+ Document still-operational status of inter-sentence space
+ supplementation.
+ (Notes) [style]: Describe an alternative (and macro
+ call-symmetrical) means of using `RS` and `RE` with `TP`.
+
+2022-02-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Add phony targets "man-all" and "man-clean" to
+ {re-}generate and delete all man pages, respectively.
+
+ Arguably fixes <https://savannah.gnu.org/bugs/?61167>.
+
+2022-02-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am (.man): Prefix hyphenation control escape
+ sequences to more configuration-time interpolations to prevent
+ their hyphenation: @DEVICE@, @g@, @INDEX_SUFFIX@, @PAGE@,
+ @TMAC_{AN,M,S}_PREFIX@, @TMAC_MDIR@.
+
+2022-02-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Refactor `EX` and `EE` macros.
+
+ * tmac/an-ext.tmac: Add new `mC` string to store the font name
+ to be used for example regions. In AT&T device-independent
+ troff, "CW" was a common name, so use that. It is however a
+ terrible fit for groff's font family and style-combination
+ functionality, and is inflexible in the face of font selection
+ requests and escape sequences within the example region. (One
+ either needs to know the names of the fonts available on the
+ output device, or suffer the indignity of mixed constant-width
+ and proportional typefaces.) Relatedly, drop groff-specific
+ font remapping requests.
+ (EX, EE): Ignore definition if GNU troff is the formatter. Drop
+ font family manipulation. Drop specialized logic for groff's
+ DVI output device.
+
+ * tmac/an.tmac (initialization): Resurrect font remapping
+ requests here.
+ (EX, EE): Add new definitions, saving and restoring more state
+ and remapping DVI output device fonts to reflect the absence of
+ CWB and CWBI faces.
+
+2022-02-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Slightly refactor. Stop using groff's `HY`
+ register to restore the hyphenation mode, since I plan to change
+ its semantics to a Boolean value (see Savannah #61734).
+ Introduce new register `mJ` to store "1" (if not groff) and the
+ current hyphenation mode otherwise. Explain why in a comment.
+ (YS, UE, ME, MR): Restore hyphenation mode using `mJ` instead of
+ `HY`.
+
+2022-02-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: Trivially refactor. Use a better idiom
+ {seen in James Clark's changes to BSD me(7)} for conditionally
+ defining a (simple) macro.
+
+2022-02-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grotty/tty.cpp (tty_printer::special): Warn upon
+ encountering unrecognized device control commands using the
+ 'tty:' tag.
+
+2022-02-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grotty]: Remove 'sgr' device control command.
+
+ * src/devices/grotty/tty.cpp (tty_printer::special): Do it.
+ * src/devices/grotty/grotty.1.man (Device control commands):
+ {De-}document it.
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?61561>.
+
+2022-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdfpic.tmac: Add support for Cygwin/MinGW temporary
+ directory conventions.
+
+2022-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdfpic.tmac: Search for temporary directories as groff(1)
+ does, instead of going straight to /tmp.
+ (pdfpic@get-temporary-directory): New function checks each of
+ its arguments for validity as a temporary directory; if one is
+ found, its name is left in `pdfpic*temporary-directory`.
+ (pdfpic@cleanup): Remove strings `pdfpic*temporary-directory`
+ and `pdfpic*temporary-file`.
+ (PDFPIC): Call `pdfpic@get-temporary-directory`, using the
+ contents of the environment variables $GROFF_TMPDIR and $TMPDIR,
+ and then /tmp, in that order. Store the temporary file name in
+ string `pdfpic*temporary-file`. Use this string in subsequent
+ `sy` and `so` requests.
+
+ Fixes <https://savannah.gnu.org/bugs/?62055> for Unix systems.
+
+2022-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Add test for PDFPIC fallback to PSPIC.
+
+ * tmac/tests/pdfpic_falls_back_to_PSPIC.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Tweak PDFPIC test input.
+
+ * tmac/tests/pdfpic_does-not-choke-on-bad-pdfinfo-output.sh:
+ Eliminate unnecessary blank lines from input. Also call gs(1)
+ with '-q' in addition to '-o'. (Why does the latter not imply
+ the former?!) Thanks to Deri James for the advice.
+
+2022-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdfpic.tmac: Slightly refactor.
+ (pdfpic@cleanup, PDFPIC): Rename `pdfpic*file-name` to
+ `pdfpic*file-name-base` since it is not used as a complete file
+ name (but rather a basis for an ".eps" extension).
+ (PDFPIC): When testing PDF file extension, include the "."; a
+ file name like "mxyzptlkpdf" is too dubious to accept. Also
+ explicitly compare `systat` register as equal or not equal to
+ zero, since its truth value is inverted from the expectations of
+ *roff expressions.
+
+2022-02-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdfpic.tmac (PDFPIC): Refactor PDFPIC_NOSPACE handling.
+ Stop shelling out to create, and then sourcing, a temporary file
+ just to obtain the value of an environment variable. groff
+ already has the `\V` escape sequence for that purpose (it's even
+ safe!). Check that the value of $GROFF_PDFPIC_NOSPACE is a
+ valid numeric expression before assigning it to a register.
+ Trivially, use '=' instead of '==' as an equality operator.
+ *roff languages do not use '=' as an assignment operator, and I
+ believe the '==' synonym to be a sop to C programmers.
+
+2022-02-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Stop attempting to adjust pargraph tag lines.
+
+ * tmac/an.tmac (TP): Disable adjustment inside the diversion.
+ (an-write-paragraph-tag): Restore adjustment outside of it.
+
+ Fixes <https://savannah.gnu.org/bugs/?62051>.
+
+2022-02-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (@z): Conceal bare tab after request name (exposed
+ by no longer stripping the macro file). See commit ad0575f20, 9
+ December.
+
+2022-02-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grops,troff]: Migrate to term "scaling unit" in diagnostics.
+
+ * src/devices/grops/ps.cpp (ps_printer::do_import):
+ * src/roff/troff/input.cpp (warnscale_request):
+ * src/roff/troff/number.cpp (parse_term): Do it.
+
+2022-02-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Add nroff mode fallback for `u` macro.
+
+ * tmac/e.tmac (u): On nroff devices, bracket the first argument
+ with \(ul (underline rule) special character escape sequences.
+ {In plain language, '.u "like this"' renders "_like this_".}
+
+ I regard this as a cosmetic and semantic improvement; since the
+ quarter-em vertical motions used in troff mode were ignored in
+ nroff mode, the effect was not underlining but a sort of
+ strike-through, visible only at spaces in the argument. The use
+ of this macro was thus invisible in nroff output if no spaces
+ were present in the argument. This is probably the best we can
+ do without a fatter interface to terminal device capabilities.
+
+2022-02-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Simulate boxed text support on nroff devices with ISO 6429
+ color escape sequences.
+
+ * tmac/e.tmac (bx): Do it. Add further fallback for non-groff
+ formatters in nroff mode, bracketing the boxed argument with '|'
+ glyphs.
+ * doc/meref.me.in: Document it.
+
+ Fixes <https://savannah.gnu.org/bugs/?62038>.
+
+2022-02-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Rename registers `$v` -> `tv`, `$V` -> `dv`.
+
+ * tmac/e.tmac: Do it. Also include much commentary (including
+ some from James Clark in 1992) attempting to illuminate the
+ confusing history (and naming) of `$[rRvV]`.
+
+ * doc/meref.me.in: Document it. Introduce new terms
+ "text vertical spacing" and "display vertical spacing" earlier
+ and use them to condense and clarify discussions of their use.
+
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?61710>.
+
+2022-02-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Deferring Output): Add new node introducing
+ and motivating environments, diversions, and traps.
+
+2022-02-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Add more compatibility mode guards.
+
+2022-02-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/pdf.tmac: Add compatibility mode guards so that we can
+ run even if troff is given the -C option. Resurrect your
+ vintage 1975 Sixth Edition Unix manuals from '.deth' and format
+ them in PDF today!
+
+ Fixes <https://savannah.gnu.org/bugs/?61995>.
+
+2022-02-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/andoc.tmac: Prefix diagnostic with package file name
+ literally.
+
+2022-02-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Trivially refactor.
+
+ * tmac/an.tmac (an*localize): Rename to...
+ (an*localize-strings): ...this.
+ (TH): Update call site.
+
+2022-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Present several fundamental concepts.
+
+ * doc/groff.texi (Page Geometry):
+ * man/roff.7.man (Concepts): Add new node/section.
+ - page geometry
+ - basic units
+ - device resolution
+ - drawing position
+ - text baseline
+ - page offset
+ - vertical spacing
+ - page break
+
+ Fixes the remainder of <https://savannah.gnu.org/bugs/?58035>.
+
+2022-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Add page length insufficiency check.
+
+ * tmac/e.tmac (@h): Port Keith Marshall's page length checker
+ from ms(7).
+
+ Fixes <https://savannah.gnu.org/bugs/?61034> and
+ <https://savannah.gnu.org/bugs/?61428>.
+
+2022-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Add test for insufficient page length error.
+
+ * tmac/tests/e_rejects-too-short-page-lengths.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Slightly refactor.
+
+ * tmac/e.tmac (@h): Use groff default scaling operator in
+ conditional expression. Add `do` requests so that the logic for
+ checking the line length works in compatibility mode. Also move
+ misplaced parenthesis in conditional expression.
+
+2022-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Refactor insufficient page length check.
+
+ * tmac/s.tmac (pg@top): Drop extraneous closing parenthesis from
+ numeric expression. Change operator from '>' to '>='; a page
+ length right at the boundary causes a spurious extra page break
+ when a paragraphing macro is used to initialize the document.
+ Condense diagnostic emission using the @error macro instead of
+ duplicating it. Change indentation to fit the style of the rest
+ of the file (use hard tabs). If aborting, truncate the page
+ length to the current vertical position so that we don't
+ uselessly output further vertical space.
+
+2022-02-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Add test for insufficient page length error.
+
+ * tmac/tests/s_rejects-too-short-page-lengths.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-02-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Vertically space delayed text like other annotations.
+
+ * tmac/e.tmac ((d): Set vertical spacing using percentage in
+ `$V` register.
+ ()d): Restore vertical spacing using percentage in `$v`
+ register.
+
+ Fixes <https://savannah.gnu.org/bugs/?61973>.
+
+2022-01-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Expand '@PAGE@' when generating man pages.
+
+ * Makefile.am (.man): Substitute the './configure'd paper format
+ for @PAGE@.
+ * src/roff/groff/groff.1.man: Use it.
+
+2022-01-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Trivially refactor an-ext.tmac.
+
+ * tmac/an-ext.tmac (EX, EE): Do a better job of keeping the
+ name space promise made in comments at the top of the file.
+ Rename `sP` register to `mP`. Problem introduced by me in
+ commit 69895ec20, 15 January 2020. Also rename `la` and `ra`
+ strings to `mL` and `mR`, respectively. These (undocumented)
+ string names date back to commit 259929625, 15 January 2007.
+
+ * tmac/groff_man.7.man.in (Files) <an-ext.tmac>: Document the
+ aforementioned promise.
+
+2022-01-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Refactor PDF bookmark support.
+
+ * tmac/an.tmac (an*bookmark): New internal macro calls
+ `pdfbookmark` (only if the output device is 'pdf').
+ (initialization): Migrate macro appendments to appropriate
+ definitions. Two cases...
+ (SH, SS): ...were straightforward.
+ (initialization): Another (for the man page title) was poorly
+ placed when appended to the `TH` macro, skipping over the page
+ header. Move it instead...
+ (PT): ...here. But to keep this bookmark from being generated
+ on every page of a document, we need a new variable
+ `an*was-TH-bookmark-emitted` which is tested here and assigned
+ once one bookmark corresponding to a `TH` call has been written.
+ (TH): Initialize `an*was-TH-bookmark-emitted` to zero.
+ (SS): Write the bookmark _before_ the subsection heading text.
+ (initialization): Drop short-lived `BM` register. It seems
+ harmless to unconditionally include bookmarks in PDF output. A
+ PDF tool can strip them out if they're not desired, and viewers
+ seem capable of minimizing or reducing the navigation pane (if
+ they even offer one in the first place).
+
+ * tmac/an.tmac (initialization): Rename new `BN` register to
+ `BD`...
+ * tmac/groff_man.7.man.in (Options) <BD>: ...and document it.
+ Also document `PT`'s new bookmarking responsibility.
+
+ Fixes <https://savannah.gnu.org/bugs/?58949> and
+ <https://savannah.gnu.org/bugs/?58950>.
+
+2022-01-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml,groff,nroff,troff]: Tweak usage message.
+
+ * src/devices/grohtml/post-html.cpp (usage):
+ * src/roff/groff/groff.cpp (synopsis):
+ * src/roff/nroff/nroff.sh:
+ * src/roff/troff/input.cpp (usage): Partly revert commit
+ 06ae7b0b8, 16 January. Move an ellipsis back inside a bracketed
+ operand (that is, an optional one). On reflection, I think this
+ notation makes it clearer that the command can be meaningfully
+ run without operands.
+
+2022-01-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/papersize.tmac: Slightly refactor. Use new `stringdown`
+ request instead of a combination of `tr`, `di`, `asciify`, and
+ `chop`.
+
+2022-01-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Slightly refactor.
+
+ * tmac/an.tmac (an-prepare-page-title): Rename to...
+ (an*prepare-page-title): ...this. Also simplify numeric
+ expression. Add comment regarding necessity of correct
+ environment.
+
+ (an-header): Update call site of `an*prepare-page-title`.
+
+ (TH): Move planting of `an-header` trap from out of the midst of
+ footer trap management. Add comments.
+
+ (an-header): Move `pl` and `sp` requests from here...
+ (PT): ...to here. While it's conceptually nice to have these
+ macros consist solely of `tl` requests, it doesn't yield enough
+ power to those who want to redefine them. Add comment.
+
+ (an-footer, BT): ...simile.
+
+2022-01-27 Dave Kemper <saint.snit@gmail.com>
+
+ [man pages]: Add more references to pic(1)'s .PF.
+
+ * contrib/chem/chem.1.man:
+ * contrib/pic2graph/pic2graph.1.man:
+ * src/utils/grog/grog.1.man: Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?61949>.
+
+2022-01-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Implement PDF bookmark support for man pages. Limitation: A
+ {sub}section can only be bookmarked if it is specified in the
+ arguments to the `SH` or `SS` requests, not on the next line in
+ an input trap. Thanks to Deri James for providing the
+ fundamentals (blame me for any weird bits).
+
+ * tmac/an.tmac (an-prepare-page-title): Define a new string,
+ `an*page-ref-string`, which is the man page's own reference
+ {such as "groff(1)"} without any abbreviation, ellipsis, or font
+ selection or italic correction escape sequences.
+ (SS): Define a new string, `an*subsection-heading`, storing the
+ macro arguments (if any). These could contain font selection
+ escape sequences, for instance, a fact that becomes important
+ later.
+ (initialization):
+ - Recognize `BM` register to enable PDF bookmarks (only on the
+ 'pdf' output device); defaults on. Recognize `BN` register to
+ set a base level/depth for the bookmarks; this is to ease
+ embedding of man pages in other PDF documents that already use
+ bookmarks. The default is 0. The registers are not yet
+ documented.
+ - If the output device is 'pdf' and bookmarks are enabled, set
+ `PDFOUTLINE.FOLDLEVEL` and `PDFHREF.VIEW.LEADING` registers
+ {recognized by 'pdf.tmac'}. Append to `TH`, `SH`, `SS` to get
+ the `an*page-ref-string`, `an-section-heading`, and
+ `an*subsection-heading` bookmarks in the document at the
+ applicable levels.
+
+ * tmac/mdoc/doc-common: Add straw-man implementation--it doesn't
+ support the `BM` and `BN` configuration parameters yet. (This
+ is enough to get bookmarks for the groff_mdoc(7) page to
+ correctly appear in the new 'groff-man-pages.pdf' document.)
+ (Dt, Sh, Ss): If the output device is 'pdf', place bookmarks in
+ the document at levels 1, 2, and 3.
+
+ Fixes <https://savannah.gnu.org/bugs/?58950>.
+
+2022-01-26 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Allow multiline text in .pdfinfo
+
+ * src/devices/gropdf/gropdf.pl: Use either '\\\\\\\\n' or
+ '\[u000a]' as line separators in the string.
+
+2022-01-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/trans.tmac: Further follow up commit c64fd60dff. If the
+ `andoc` wrapper is being used, perform man(7) localization (not
+ just when `an` is loaded).
+
+2022-01-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man pages]: Fix options used to generate compilations.
+
+ * doc/doc.am (doc/groff-man-pages.pdf): Drop `-rU0` option (it's
+ unnecessary since we don't yet have PDF hyperlink support in
+ this document). Add `-rC1` option to enable continuous page
+ numbering.
+ (doc/groff-man-pages.utf8.txt): Drop `-rC1 -rU1`. Continuous
+ page numbering is superfluous since page numbers are not shown
+ in continuous rendering mode. Stop turning on OSC 8 defaults;
+ we don't know if the document will be viewed with a supporting
+ pager+terminal combination, and further we don't yet have a
+ mechanism for making `MR` man page cross references internal to
+ the document when they indicate groff man pages.
+
+2022-01-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man pages]: Ship compilations in UTF-8 text and PDF.
+
+ Localization support and the resolution of Savannah #61266 have
+ made it practical to batch-render all of groff's man pages as a
+ single giant document. Provide PDF and UTF-8 text (with ECMA-48
+ escape sequences, but not the italic attribute or OSC 8
+ sequences).
+
+ Reasons for this addition include: {1} it is now possible,
+ whereas I don't believe it was in any previous groff release;
+ {2} many people still don't realize how much more pleasant
+ reading typeset man pages can be (while a subjective assessment,
+ I'm not alone[1]); {3} providing these forms permits full-text
+ searching of groff's entire man page corpus via the PDF viewer
+ or a pager like "less -R", the latter without sacrificing the
+ style variations of the text that aid the reader to comprehend
+ the material; {4} sentimentally, it honors the 50th anniversary
+ of the first Unix manual (dated 3 November 1971)
+ <https://www.bell-labs.com/usr/dmr/www/1stEdman.html>.
+
+ * doc/doc.am (PROCESSEDDOCFILES): Add
+ 'doc/groff-man-pages.{pdf,utf8.txt}'.
+ (GROFF_MAN_PAGES{1,2,3}): Add new macro storing names of all man
+ pages generated in the build tree. Motivate the reason for 3
+ variables in a comment (it's due to groff locale switching).
+ (GROFF_MAN_PAGES_ALL): Add convenience macro for use in
+ dependency lists required by...
+ ('doc/groff-man-pages.{pdf,utf8.txt}'): ...these targets.
+ Generate pages with the lint dial turned all the way up.
+
+ Fixes <https://savannah.gnu.org/bugs/?61900>.
+
+ [1] "The manual was intended to be typeset; some detail is
+ sacrificed on terminals." (man(1), _Unix Time-Sharing System
+ Programmer's Manual_, Eighth Edition, Volume 1, February 1985)
+
+2022-01-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Commit c64fd60dff was not quite cooked. The localized
+ strings (in English) for the manual section titles need to be
+ set at every document load (i.e., when `TH` is called), but only
+ if the groff locale is "english". When switching locales, these
+ strings were getting "stuck" in their non-English translations
+ even when returning to an English page.
+
+ * tmac/an.tmac (an*localize): New macro initializes strings.
+ (TH): Call `an*localize` if the locale is "english".
+ (initialization): Drop initialization of section title strings.
+
+ Continues fixing <https://savannah.gnu.org/bugs/?61734>.
+
+2022-01-24 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ [gropdf]: Fix Savannah #61908
+
+ * src/devices/gropdf/gropdf.pl: Adjust text position when
+ given landscape media (i.e -P-l).
+
+ Fixes <https://savannah.gnu.org/bugs/?61908>.
+
+ Thanks to KUBO Koichi for finding the problem and supplying a
+ patch.
+
+2022-01-24 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ * src/devices/gropdf/gropdf.pl: A fix to importing pdf
+ versions > 1.4.
+
+2022-01-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grotty]: Skip part of test if locale doesn't support UTF-8.
+
+ * src/devices/grotty/tests/basic_latin_glyphs_map_correctly.sh:
+ Skip test of 'utf8' output device if locale lacks UTF-8 support.
+ But if the 'ascii' or 'latin1' test cases have already failed,
+ report that instead.
+
+ Fixes <https://savannah.gnu.org/bugs/?61891>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2022-01-23 Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+ [man pages]: Fix typos.
+
+ Fixes <https://savannah.gnu.org/bugs/?61430>.
+
+2022-01-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Fix style nits in test.
+
+ * tmac/tests/pdfpic_does-not-choke-on-bad-pdfinfo-output.sh:
+ - Emit complaints about test environment to standard error.
+ - Replace lingering literal file name with variable expansion.
+ - Skip test if gs(1) fails, instead of reporting failure.
+ - Begin continued lines with operators, for visibility.
+
+2022-01-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Fix misspelled member variable.
+
+ * src/devices/grohtml/post-html.cpp (class html_printer):
+ Rename `supress_sub_sup` to `suppress_sub_sup`.
+
+2022-01-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pdfpic]: Fix Savannah #58206.
+
+ * tmac/pdfpic.tmac (PDFPIC): Scrub null bytes out of pdfinfo(1)
+ output. Thanks to an anonymous contributor for the patch (the
+ commentary about it is mine, if someone wants an argument).
+
+ Fixes <https://savannah.gnu.org/bugs/?58206>.
+
+2022-01-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pdfpic]: Regression-test Savannah #58206.
+
+ * tmac/tests/pdfpic_does-not-choke-on-bad-pdfinfo-output.sh: Do
+ it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-01-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pdfpic]: Refactor.
+
+ Now that the package does not abort upon the first whiff of any
+ trouble, avoid littering groff's name spaces. Take this
+ opportunity to rename registers and strings to have obvious
+ meaning to even the casual reader.
+
+ * tmac/pdfpic.tmac: Do it.
+ (pdfpic@cleanup): New macro removes temporary strings and
+ registers.
+ (PDFPIC): Call the cleanup macro upon entry; this way, if we
+ errored out from a previous call, we avoid confusion. (We don't
+ clean up upon an error return because the leftover objects might
+ be useful for troubleshooting.) Rename registers and strings,
+ to get them under name space discipline and also to better
+ suggest their purpose.
+ - convert-pdf -> pdfpic*do-conversion
+ - pdf-offset-mode -> pdfpic*offset-mode
+ - pspic-args -> pdfpic*pspic-args
+ - pdf-offset -> pdfpic*indentation
+ - is-pdf -> pdfpic*file-extension
+ - img-file -> pdfpic*file-name
+ - pdf-wid -> pdfpic*width
+ - pdf-ht -> pdfpic*height
+ - pdf-deswid -> pdfpic*desired-width
+ - pdf-desht -> pdfpic*desired-height
+ Call cleanup macro before returning upon successful operation.
+
+2022-01-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pdfpic]: Improve robustness.
+
+ * tmac/pdfpic.tmac (@abort): Rename to `pdfpic@error`. This is
+ an auxiliary package, and something else could very well step on
+ the former name (or worse, we break it if we're loaded later).
+ (pdfpic@error): Stop aborting; simply report an error. It's up
+ to the user how serious `PDFPIC` macro problems are. As noted
+ in a comment, the user can easily `am pdfpic@error` to tack an
+ `ab` request onto the end of its definition. Always report
+ input file name and line number. Replace "[PDFPIC]" prefix with
+ the name of the macro file complaining, to make it easier for
+ groff non-experts to find.
+ (PDFPIC): Return upon errors. Recast diagnostic messages. Stop
+ implying that we perform any sort of probing test of file type
+ {there's no telling what pdfinfo(1) will say}. Apply new
+ 'stringdown' request so that we accept '.pdf' file name
+ extension in any lettercase. Test file argument for existence
+ before proceeding (acknowledge TOCTTOU exposure). Skip file if
+ pipeline returned a non-zero exit status or the registers into
+ which we extract the height and width are undefined (indicating
+ failure of a temporary file to be created or read). Reject
+ files with non-positive image width or height reported by
+ pdfinfo. Validate `width` and `height` arguments, if given,
+ rejecting non-positive values.
+
+ Fixes <https://savannah.gnu.org/bugs/?61892>.
+
+2022-01-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mdoc]: Make `Pa` macro interpolate basic Latin tilde on all
+ output devices.
+
+ * tmac/doc.tmac (Pa): Do it.
+
+2022-01-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix incorrect line numbers in diagnostics. Line numbers
+ for multiple format-time diagnostics emitted by tbl(1)-generated
+ groff input were off by +5 lines.
+
+ * src/preproc/tbl/table.cpp: Fix it.
+ (NOP_NAME): Add new preprocessor symbol to construct name of
+ "nop" macro to be used as end macro for `ig` requests inside
+ macro definitions.
+ (table::init_output, table::compute_expand_list,
+ table::compute_separation_factor):
+ - Move `entry_list->set_location()` calls to more auspicious
+ locations.
+ - Replace "around line X" language in diagnostic messages with a
+ more idiomatic, and less embarrassing, simple report of an
+ integer.
+ (table::init_output):
+ - Add `entry_list->set_location()` call right before emitting
+ diagnostic about a table row not fitting on a page.
+ - Turn off eqn(1) delimiters when emitting diagnostic about a
+ boxed table not fitting on a page (necessitating `.TS H`
+ support), using new NOP_NAME-based end macro to achieve this
+ inside a macro definition.
+ (table::compute_expand_list): Suppress issue of too-wide table
+ diagnostic when the `EXPAND` table flag is set (corresponding to
+ the `expand` region option), because other code already emits
+ diagnostics in this case.
+
+ Fixes <https://savannah.gnu.org/bugs/?60598>. Problem appears
+ to date back to commit 3bc4a53a45, 2013-01-07.
+
+2022-01-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Add unit test for format-time diagnostics.
+
+ Ensure that the various format-time diagnostics that a
+ tbl-preprocessed document can generate (1) occur when they are
+ supposed to and (2) are appropriately suppressed by the
+ "nowarn" and/or "nokeep" region options. One of them is an
+ error and cannot be suppressed by the former, but _can_ be by
+ "nokeep", which is arguably a bug (Savannah #61878).
+
+ * src/preproc/tbl/tests/format-time-diagnostics-work.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TEST): Run test.
+
+2022-01-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Trivially refactor.
+
+ * src/preproc/tbl/table.cpp (table::compute_expand_width):
+ Declare and initialize variables closer to use. Also, the width
+ computed is compared to the line length and indentation, so use
+ these well-established *roff terms in the diagnostic message.
+
+2022-01-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix Savannah #61854.
+
+ * src/preproc/tbl/table.cpp (compute_expand_width): To properly
+ warn if a table is too wide to fit between the indentation and
+ the right margin, we need to compute its column widths including
+ those eligible for expansion via the 'x' column modifier; we
+ cannot use the same expression that we do to determine the
+ amount of space we have to distribute among the expanded
+ columns. Iterate through columns again (the function was
+ already doing so twice), once to potentially produce the
+ warning, and then as before to distribute any available width.
+ In other words, warnings were only being emitted for too-wide
+ tables where one or more columns used the 'x' modifier.
+
+ Fixes <https://savannah.gnu.org/bugs/?61854>.
+
+2022-01-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Don't add leaders that don't lead anywhere.
+
+ * tmac/s.tmac (toc*end-entry): If no page number string
+ `toc*num` is defined, don't interpolate its emptiness prefixed
+ with a leader (and tab). This makes "no" as the first argument
+ to `XS` and `XA` work as documented, suppressing not only the
+ page number but the leader after the entry.
+
+ Fixes <https://savannah.gnu.org/bugs/?61853>.
+
+2022-01-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Add regression test for Savannah #61853.
+
+ * tmac/tests/s_XA-literal-no-argument-suppresses-leader.sh: Do
+ it.
+ * tmac/tmac.am (tmac_TESTS): Run it.
+
+2022-01-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Fix bad unit test.
+
+ * tmac/tests/e_chapter-titles-work.sh: Fix missing shell test at
+ end of script, which caused it to exit successfully regardless
+ of any test failures. Irritating. This is among the fruits of
+ the "never, ever use 'set -e'" tree. (This religion has a thick
+ bible: <https://mywiki.wooledge.org/BashFAQ/105>.) Fortunately,
+ all the tests pass legitimately.
+
+2022-01-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [font]: For 'ascii' and 'latin1' devices, consistently define
+ glyphs for ordinary characters before their special character
+ aliases. This parallels existing usage for the 'cp1047' device,
+ and, I think, makes the file contents slightly more accessible.
+
+ * font/devascii/R.proto:
+ * font/devlatin1/R.proto: Do it.
+
+2022-01-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Update diagnostic messages.
+
+ * src/devices/grohtml/post-html.cpp (assert_state::add)
+ (assert_state::compare, replace_negate_str)
+ (assert_state::check_value_error, make_val): Make format of
+ internal assertion system messages shorter and more mutually
+ parallel.
+ (html_printer::set_char, html_printer::set_numbered_char)
+ (html_printer::set_char_and_width): Parallelize diagnostic
+ messages with libdriver; see yesterday's commit.
+ (main): Put information in argument to `assert()`; see commit
+ 11b43053, 24 November.
+
+2022-01-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [nroff]: Emit usage message on usage errors.
+
+ * src/roff/nroff/nroff.sh: Store the usage message in a shell
+ variable instead of a here document, and sling it to the
+ standard output or standard error streams, as appropriate.
+
+2022-01-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml,groff,nroff,troff]: Tweak usage message.
+
+ * src/devices/grohtml/post-html.cpp (usage):
+ * src/roff/groff/groff.cpp (synopsis):
+ * src/roff/nroff/nroff.sh:
+ * src/roff/troff/input.cpp (usage): Stop putting an ellipsis
+ inside a bracket expression (for file arguments); that suggests
+ misleading complexity.
+
+ * src/devices/grohtml/post-html.cpp (usage): Also don't set
+ metasyntactic variable names in screaming capitals when they are
+ separated from option letters by space and thus can't be
+ confused with them.
+
+2022-01-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libdriver]: Update diagnostic messages.
+
+ * src/libs/libdriver/printer.cpp (printer::find_font): Describe
+ the problem encountered instead of saying lamely "sorry, I can't
+ continue".
+ (printer::set_char_and_width, printer::set_numbered_char):
+ Characterize input as "invalid", not "bad"; see commit bb7512b5,
+ 17 September. When referring to font mounting position, say so.
+ (printer::set_char_and_width): Describe required input character
+ as "ordinary", not "ascii". Apart from the incorrect casing,
+ doing so better aligns with our terminology in groff_char(7),
+ groff_out(5), our Texinfo manual, and other diagnostic messages;
+ moreover, the use of "ascii" is potentially confusing to those
+ whose environments use another encoding, like UTF-8 or IBM code
+ page 1047.
+
+ Fixes <https://savannah.gnu.org/bugs/?61829>.
+
+2022-01-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grotty]: Check basic Latin ("ASCII") glyph mappings.
+
+ * src/devices/grotty/tests/basic_latin_glyphs_map_correctly.sh:
+ Do it.
+ * src/devices/grotty/grotty.am (grotty_TESTS): Run test.
+
+2022-01-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [font,tmac]: Simplify Unicode character mapping process.
+
+ * tmac/unicode.tmac: Drop. It was originally added in 2005 to
+ suppress horizontal spacing of glyphs in the range U+0483..9.
+ Its purpose has wandered over the years; most recently to map
+ the Basic Latin ("ASCII") hyphen-minus, apostrophe, and grave
+ accent to special characters (and thus ultimately to the General
+ Punctuation block). But this is unnecessary since the font
+ descriptions for devices with the `unicode` property can provide
+ this information, and anyone who wants to alter the mappings can
+ change either font description files, output device macro files,
+ or troffrc; or add `char` requests to their macro packages or
+ documents (in decreasing magnitude of ambition).
+
+ * tmac/html.tmac:
+ * tmac/tty.tmac: Stop sourcing unicode.tmac.
+
+ * tmac/tmac.am (TMACNORMALFILES): Stop shipping it.
+
+ * font/devutf8/NOTES: Drop remarks about mapping of \[a~],
+ \[a^], and Basic Latin circumflex accent and tilde. Not only do
+ I disagree with the reasoning (whether these glyphs are "too
+ small" depends on the font used by the terminal emulator, over
+ which we have no control), but this mapping happens in a
+ completely different part of the source tree,
+ src/libs/libgroff/glyphuni.cpp.
+
+ * font/devhtml/R.proto:
+ * font/devutf8/R.proto: Add mappings for the five Basic Latin
+ characters that map surprisingly (see groff_char(7)) and are not
+ syntactically significant to troff. Three of these are ported
+ from unicode.tmac.
+ (html): Don't migrate the hyphen-minus--yet.
+
+2022-01-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tty-char.tmac: Drop redundant logic. We don't need to
+ source the `cp1047` or `latin1` files here; `troffrc` will
+ already have loaded `tty` for us, which loads whichever applies.
+
+2022-01-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Separate concerns better; stop re-generating plain
+ text and HTML documents when the 'doc' target is updated; these
+ are already handled by the 'build_infodoc' target.
+ (build_infodoc): Use existing phony targets for plain text and
+ HTML output files instead of repeating filename literals.
+ (doc_all): Remove those same two phony targets from this one's
+ dependencies.
+
+2022-01-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp: Rename `eoi_macro_name` to
+ `end_of_input_macro_name`. It's long, yes, but better parallels
+ `blank_line_macro_name` and `leading_spaces_macro_name`. It is
+ not used in lengthy expressions and furthermore clarifies the
+ meaning of the nearby function name `eoi_macro` in one use.
+
+2022-01-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/preconv.1.man (Limitations): Add
+ subsection.
+
+ Fixes <https://savannah.gnu.org/bugs/?55035>.
+
+2022-01-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Be more careful with control characters when they are
+ word-initial in filled text lines. The idea is to prevent
+ baffling surprises if a sentence is recast in a text editor, and
+ a word beginning with a dot or neutral apostrophe is reflowed
+ onto the beginning of the next input line--suddenly it is parsed
+ as a control character. Based on a patch by Bjarni Ingi
+ Gislason.
+
+ * contrib/hdtbl/groff_hdtbl.7.man:
+ * doc/automake.mom:
+ * doc/meintro.me.in:
+ * doc/meintro_fr.me.in:
+ * doc/pic.ms:
+ * doc/webpage.ms:
+ * src/devices/gropdf/gropdf.1.man: Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?51312>.
+
+2022-01-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Font Description File Format):
+ * man/groff_font.5.man (Font description file format): Document
+ restriction of kerning adjustment to glyph pairs from within a
+ single font (since that is the scope of the font description).
+
+ Fixes <https://savannah.gnu.org/bugs/?44715>.
+
+2022-01-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * contrib/groff_filenames/groff_filenames.5.man: Remove
+ superfluous paragraphing macro.
+
+ Fixes <https://savannah.gnu.org/bugs/?55084>. Thanks to Bjarni
+ Ingi Gislason for the report and a suggested patch.
+
+2022-01-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Operators in Conditionals): Update explanation
+ of output-comparison conditional operator.
+
+ Fixes <https://savannah.gnu.org/bugs/?60836>.
+
+2022-01-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Use pnmtops(1)'s -quiet option if possible, to quieten
+ build.
+
+ * m4/groff.m4 (GROFF_PNMTOOLS_CAN_BE_QUIET): Add new macro to
+ test pnmtops for support for (undocumented) '-quiet' option.
+
+ * configure.ac: Perform the check.
+
+ * doc/doc.am: Alter check of shell variable `pnmtops_nosetpage`
+ {processed by AC_SUBST} to correctly match even if pnmtops
+ accepts the '-quiet' option.
+
+2022-01-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Manage hyphenation mode more carefully in localization
+ packages.
+
+ * tmac/{cs,de,it,sv}.tmac: Localize the man(7) package's HY
+ register.
+
+ * tmac/{cs,de,fr,it,sv}.tmac: When localizing the ms(7) package,
+ use mode "2" instead of "3": the 'hy' request complains of
+ contradictory hyphenation modes if "3" is used (the semantics of
+ the hyphenation mode are complex and non-orthogonal; see
+ groff(7) or our Texinfo manual).
+
+ * tmac/{cs,de,en,fr,it,sv}.tmac: If the one language-independent
+ hyphenation bit (don't hyphenate just prior to a page location
+ trap) is set, preserve it; this way a system's troffrc or a
+ macro package can set it and it will not get turned off by the
+ localization package, which for best results should be loaded
+ after any full-service package (and any auxiliary package
+ requiring localized strings, though none are yet distributed
+ with groff).
+
+2022-01-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Add unit test for localization macro files. Right now
+ this just covers the hyphenation mode.
+
+ * tmac/tests/localization-works.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2022-01-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [indxbib]: Document --version in usage message.
+
+ * src/utils/indxbib/indxbib.cpp (usage): Document --version
+ option. Use more informative metasyntactic variable names.
+ Organize usage message consistently with our others, and stop
+ wrapping the output lines: we know neither the width of the
+ terminal nor the length of the `program_name` string we're
+ interpolating. See commit b4de44f0, 19 July 2021.
+
+2022-01-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libbib]: Refactor index header checking.
+
+ * src/libs/libbib/index.cpp: Move more header validity checks...
+ (index_search_item::load): ...from here...
+
+ (index_search_item::check_header): ...to here. Test all size
+ values in header for negative values (never valid) before
+ proceeding. (These data could be changed to unsigned integer
+ types in the file format, but that would require bumping the
+ file version. That in turn would make indexes generated with
+ groff 1.23 unusable on systems running older groffs and, perhaps
+ worse, would make groff 1.23 reject index files produced by
+ older groffs. On the other hand, the regeneration of index
+ files should be, for those who use them, a common activity, and
+ as long as the original database files are kept intact, it seems
+ likely that most people, given modern machines, won't even
+ notice a slowdown in document generation when refer(1) and
+ friends fail to open the indices and fall back to full-text
+ searches of the originals. So we could still consider revising
+ the file format before the groff 1.23 release.)
+
+ * src/libs/libbib/index.cpp (index_search_item::load):
+ Explicitly perform widening conversion from signed `off_t` value
+ {from a stat(2) buffer} to an unsigned integer; quietens
+ compiler warning about comparison between integers differing in
+ signedness.
+
+2022-01-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac (AC_CHECK_HEADERS): Expect stdbool.h, since we
+ now use it in src/include/lib.h.
+
+2022-01-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libbib, libgroff, indxbib]: Slightly refactor.
+
+ Also, it's silly to test even numbers > 2 for primality. Stop.
+
+ * src/include/lib.h: Include `stdbool.h` since this header file
+ is used for both C and C++ code.
+
+ * src/include/lib.h (is_prime):
+ * src/libs/libgroff/prime.cpp (is_prime): Boolify. Return
+ Boolean instead of integer literals and demote return type to
+ `bool`. Include `assert.h` and add assertion to reject
+ mathematically offensive input.
+
+ * src/libs/libbib/index.cpp
+ (index_search_item::read_common_words_file): Test only odd
+ numbers for primality.
+ * src/utils/indxbib/indxbib.cpp (main): Same. Since the number
+ comes from user input, make it (a potential hash table size) odd
+ first.
+
+2022-01-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Internationalize and localize.
+
+ * tmac/an.tmac (TH): Indirect predefined manual section titles
+ through new strings `an*section[1-9]` so that they can be
+ localized.
+ (initialization): Give these strings English defaults.
+ (TH): Move `ss` request from here...
+
+ * tmac/en.tmac: ...to here. It's not the man(7) package's
+ business what the inter-word and inter-sentence spacing values
+ are. Also, having the correct[disputed] inter-sentence spacing
+ value for English in its localization file restores it for the
+ benefit of multi-lingual documents (mainly roff applications
+ other than man(7)).
+
+ * tmac/{cs,de,fr,it,sv}.tmac: Supply translations for the manual
+ section titles; these were done by a monoglot American employing
+ Google Translate, so those scandalized or running into howlingly
+ wrong locutions are warmly invited to submit corrections.
+
+ * tmac/trans.tmac: Load localized strings.
+
+ Fixes <https://savannah.gnu.org/bugs/?61734>.
+
+2022-01-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Handle auxiliary macro package
+ arguments correctly.
+ (process_arguments): Don't append the argument to the '-m'
+ option to the command line; requested macro packages have
+ dedicated logic.
+ (construct_command): When iterating through requested package
+ list, assume each element is an auxiliary package unless it
+ matches an element in the list of main packages. If the
+ assumption holds, append the package name to a new list,
+ `auxiliary_package_argument` (prefixed with '-m'). Push this
+ list onto the command line after any main package.
+
+ Also rename `$selected_main_package` to `$main_package` for
+ brevity, and drop unused global lists `m` and
+ `supplemental_package`.
+
+ Fixes <https://savannah.gnu.org/bugs/?61758>.
+
+2022-01-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/tests/smoke-test.sh: Add test cases for user
+ specification of auxiliary macro packages.
+
+2022-01-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Drop unnecessary code. Apart from being superfluous, it
+ prevented a user-defined value of the `sx` register from being
+ applied to the first footnote marker interpolated, a subtlety
+ that escaped my notice because the first footnotes in our
+ "meref" and "meintro" documents are not numeric, but symbolic,
+ and their markers occurred on lines with vertical space above
+ and below. (The bug was further masked by an otherwise
+ redundant redefinition of the `*` string inside the `)f` macro.)
+
+ * tmac/e.tmac ()f, +c): Stop redefining footnote marker string
+ `*` after updating the automatic footnote number; its
+ interpolation is already backslash-protected.
+ ()d, pd): Stop redefining delayed text marker string `#` for an
+ analogous reason.
+ (initialization): Drop unneeded `_*` and `_#` strings.
+
+ Thanks to Robert Goulding for his feedback and patience. See
+ <https://savannah.gnu.org/bugs/?61025>.
+
+2022-01-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/e_footnote-marks-work.sh: Enhance test. Confirm
+ that the automatic footnote number is reset to 1 by starting a
+ new chapter with the `+c` macro.
+
+2022-01-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Revise `n1` and `n2` interface and behavior.
+
+ There were several bugs in the previous implementation.
+
+ * tmac/e.tmac (po): Issue diagnostic if an attempt is made to
+ set the page offset to a negative value.
+
+ (n1): Accept new optional "C" argument to behave more (but not
+ exactly) like roff(1), as the formerly-recognized "c" argument
+ to `n2` did. If present, the line length is reduced by the same
+ amount (in new interface register `no`) as the line number field
+ to preserve the overall line length. Save the previous line
+ length in internal register `_l` and set a flag, stored in `?N`,
+ indicating this reduction. Otherwise, the macro expects to be
+ able to reduce the page offset to accommodate the line number.
+ If it cannot (for example, with the zero page offset default
+ used by nroff output devices), see above re: the `po` macro.
+
+ (n2): Cache the last line number that may have been output,
+ instead of the current one, so that we can operate on it
+ consistently with user expectations. Do this earlier, and
+ rename this macro-local variable from `_ln` to `_n` so that we
+ don't need groff's `do` request to operate on it. Drop
+ recognition of "c" as an optional second argument. If turning
+ off line numbering: if the line length was shortened (`?N`)
+ restore the saved value and delete `_l` register; otherwise,
+ reverse the change to the page offset. Delete `_n` register.
+
+ (initialization): Assign `\w'0000'u` to `no` register; this was
+ previously hard-coded in `n1` and `n2`. Initialize `?N` with 0.
+
+ * doc/meref.me.in (roff Support): Update to reflect interface
+ changes and describe behavior more accurately.
+
+ * doc/meref.me.in (Summary):
+ * tmac/groff_me.7.in (Registers): Document new `no` register and
+ mark it as a groff extension.
+
+ * NEWS: Add item documenting interface changes.
+
+ Fixes <https://savannah.gnu.org/bugs/?61646>. See the comments
+ in the report for a lengthy enumeration of rendering problems
+ exhibited by the previous implementation.
+
+2022-01-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Add unit test for line numbering feature.
+
+ * tmac/tests/e_line-numbering-works.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-12-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grohtml/post-html.cpp (style::style): Add
+ initializer to argumentless constructor to avoid later read from
+ uninitialized memory in `html_printer::do_font`.
+
+ Fixes <https://savannah.gnu.org/bugs/?61748>.
+
+2021-12-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [groff]: Add regression test for Savannah #61748.
+
+ * src/roff/groff/tests/html_works_with_grn_and_eqn.sh: Do it.
+ * src/roff/groff/groff.am (groff_TESTS): Run it.
+
+2021-12-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grohtml/post-html.cpp
+ (html_printer::do_file_components): Emit fatal diagnostic if
+ we're unable to `freopen()` standard output. Quietens
+ `-Wunused-result` warning from GCC 8.3.
+
+2021-12-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grohtml/html.h (INT_HEXDIGITS): Add new constant
+ to store the maximum possible quantity of digits in the
+ hexadecimal representation of an `int`.
+
+ * src/devices/grohtml/html-text.cpp (html_text::issue_tag):
+ * src/devices/grohtml/post-html.cpp (html_printer::do_body):
+ Guard against format string overflow by large integers in RGB
+ color channel specifications; in a *printf format string, the
+ precision (like the field width) is a _minimum_. Quietens
+ `-Wformat-overflow` warnings from GCC 8.3.
+
+2021-12-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (get_image_generator): Clarify
+ complex conditional expression. Quietens `-Wparentheses`
+ warning from GCC 8.3.
+
+2021-12-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Rename new `$x` register to `sx`. Since we expect the
+ user to set this register directly, it should not be named with
+ a leading '$' per the "me Reference Manual".
+
+ * tmac/e.tmac (initialization, {, }): Do it.
+
+ * tmac/groff_me.7.man:
+ * doc/meref.me.in:
+ * NEWS: Update documentation.
+
+ * doc/meintro.me.in:
+ * doc/meintro_fr.me.in:
+ * doc/meref.me.in: Sync with new register name.
+
+ See <https://savannah.gnu.org/bugs/?61025>. Thanks to Dave
+ Kemper for the discussion in
+ <https://savannah.gnu.org/bugs/?61710>.
+
+2021-12-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Slightly refactor.
+
+ * src/roff/troff/div.cpp:
+ * src/roff/troff/div.h:
+ * src/roff/troff/input.cpp: Rename variables to reduce confusion
+ between "end macros" and "end-of-input macros". Call the latter
+ "eoi" macros for brevity.
+
+2021-12-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Fix code style nits.
+ - Use new terminology in diagnostic. See commit 66ac1a8db9,
+ 11 December.
+ - Drop unused '&&&' annotation for macro definitions. This
+ was a BSD me(7) implementation detail wherein parts of the
+ package were broken out into module files, loaded if/when
+ their macros were called. groff me(7) is monolithic, except
+ for devtag and refer(1) support.
+ - Remove '&&' end macro when we're done using it.
+
+2021-12-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: (Re-)localize strings.
+
+ * tmac/{cs,de,fr,it,sv}.tmac: Update package localizations to
+ use new resources. As a happy side effect (and with the new
+ appendix string), the `+c` macro is now localized for Czech,
+ German, and Swedish.
+
+ * doc/meintro_fr.me.in (Les Parties du Document): Update example
+ to reflect mixed-case default string used in chapter headings.
+
+ * tmac/tests/e_ld-works.sh: Add tests for localization.
+
+2021-12-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Internationalize strings.
+
+ * tmac/e.tmac (initialization): Introduce internal
+ `_mo1`..`_mo12`, `_dw1`..`_dw7`, and `_td_format` strings (with
+ English defaults). Define them outside of the new `ld` macro so
+ that they can be overridden by localization packages.
+ (ld) <dw, mo, td>: Populate via the above new strings.
+ * tmac/trans.tmac: Stop defining `mo` and `dw`. Instead, make
+ them aliases of the new strings above. Handle `wa` and `wc`
+ similarly.
+
+2021-12-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Add `ld` macro to re-init date/l10n stuff.
+
+ * tmac/e.tmac (ld): New macro updates `y2` and `y4` registers
+ and `wa`, `wc`, `mo`, `dw`, and `td` strings.
+
+ * doc/meref.me.in (Miscellaneous, Predefined Strings):
+ * tmac/groff_me.7.man (Macros): Document it.
+
+ * tmac/tests/e_ld-works.sh: Add unit test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?61670>.
+
+2021-12-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/e_chapter-titles-work.sh: Add unit test for chapter
+ heading feature.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-12-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Ease localization and customization by exposing
+ strings for "Chapter" and "Appendix" instead of hard-coding
+ these words into the `$c` macro.
+ (initialization): Define new `wa` and `wc` strings. Separate
+ these and existing localization strings from `y2` and `y4`
+ initialization since the latter don't involve natural languages.
+ ($c): Interpolate these strings in chapter and appendix headings
+ and in calls to `$C` hook macro. Set "Chapter" and "Appendix"
+ in mixed case instead of full capitals, and set one
+ adjustable nonbreaking word space `\~` between them and the
+ chapter number instead of two unadjustable nonbreaking spaces.
+ {These changes do slightly alter the default output of the
+ package when the `+c` macro is used.}
+
+ * doc/meref.me.in (Predefined Strings):
+ * tmac/groff_me.7.man (Strings): Document new strings.
+
+ * doc/meintro.me.in (Parts of the Basic Paper): Update example
+ to reflect mixed-case default string.
+
+ Fixes <https://savannah.gnu.org/bugs/?61661>.
+
+2021-12-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (@p): Deactivate right alignment (the effect of
+ groff's `rj` request) when starting a new paragraph.
+ * doc/meref.me.in (Paragraphing) <lp>: Document this.
+
+2021-12-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac ()c): Add bounds check to avoid attempting to set
+ a negative indentation, provoking a troff warning. Problem
+ exposed by formatting "meintro_fr.me" document with default
+ nroff mode line length.
+
+2021-12-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Slightly refactor (boolify).
+
+ * src/roff/troff/div.cpp:
+ * src/roff/troff/div.h:
+ * src/roff/troff/env.cpp:
+ * src/roff/troff/input.cpp: Rename variables and demote from
+ `int` to `bool`. Initialize and assign them using Boolean
+ literals. The new names try harder to express a logical
+ predicate, and start with verbs to resist interpretation as
+ noun phrases.
+ - exit_started -> is_exit_underway
+ - done_end_macro -> is_end_macro_finished
+ - seen_last_page_ejector (demoted but not renamed)
+ - began_page_in_end_macro (demoted but not renamed)
+
+2021-12-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Explain presence of undocumented `$r` and `$R`
+ registers.
+
+ Fixes <https://savannah.gnu.org/bugs/?61683>.
+
+2021-12-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (bc): To get to the next column, space by the page
+ length `.p`, not by the distance to the next trap (or 24 inches,
+ as hard-coded in me(7) traditionally). It is up to any sprung
+ traps to issue further space requests or otherwise ensure a
+ transition to the next column.
+
+ See <https://savannah.gnu.org/bugs/?55081> for discussion.
+
+2021-12-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac ({): Fix missing scaling unit in arithmetic
+ expression: broke footnotes in troff mode. Problem introduced
+ by me in commit 6eafd208, 16 December. Thanks to Robert
+ Goulding for the (informal) report.
+
+2021-12-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/{pic,webpage}.html): Quieten build. Stop
+ passing `-p` (progress) option to postprocessor, which produces
+ TeX-like bracketed page numbers when images occur.
+
+2021-12-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (.ms.html): Drop unused suffix rule.
+
+2021-12-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am (tmac_XFAIL_TESTS): Mark test
+ "e_footnotes-work-with-columns.sh" as expected to fail (as it
+ does now, consequent to a reverted commit).
+
+2021-12-16 Dave Kemper <saint.snit@gmail.com>
+
+ * man/groff_tmac.5.man: Fix minor errors.
+
+ Fixes <https://savannah.gnu.org/bugs/?61633>.
+
+2021-12-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Parameterize line height adjustment when super/subscripting.
+
+ * tmac/e.tmac (initialization): Assign 0.2m to register `$x`.2m.
+ ({, <}: Apply adjustment, multiplied by -1 for superscripts.
+
+ * doc/meref.me.in:
+ * tmac/groff_me.7.man: Document it.
+
+ * NEWS: Add item.
+
+ * doc/meintro.me.in:
+ * doc/meintro_fr.me.in:
+ * doc/meref.me.in: Forego extra line height for more attractive
+ typesetting.
+
+ Fixes <https://savannah.gnu.org/bugs/?61025>. Thanks to Robert
+ Goulding for the suggestion.
+
+2021-12-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac ($c): Draw the footnote separator no wider than
+ the column width.
+
+ Fixes <https://savannah.gnu.org/bugs/?61675>.
+
+2021-12-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (2c): Accept an empty first argument, permitting
+ the number of columns to be specified but preserving the default
+ column separation.
+
+ Fixes <https://savannah.gnu.org/bugs/?61671>.
+
+2021-12-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (initialization): Initialize `$C` hook, preventing
+ `mac` warnings from troff(1) if chapter title feature is used.
+
+2021-12-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (i, bi): Add italic corrections.
+
+2021-12-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Fix groff warnings and correctness issue.
+ (n2): Prefix `ie` request with `do` because it uses the groff
+ `\B` escape sequence. Use braces to group multiple requests
+ after an `el` request: `ie` and `el` count as two requests, not
+ one. Add comment regarding the unfortunate choice of brace
+ style given *roff's syntactical constraints.
+ (n2, (c): Conceal bare tab in request argument list (exposed by
+ no longer stripping the macro file).
+
+2021-12-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Revise diagnostic messages to follow GNU Coding Standards,
+ identifying what is emitting them.
+
+ * tmac/e.tmac (_e): New string holds "e.tmac".
+ (@err): New macro constructs and issues diagnostics. Add file
+ name to messages when available. Suppress line number when
+ unavailable.
+ (check_page_length, @z, @h, n2, sk, @p, @(, @), (c, )c, EQ, (f,
+ ++, @U): Call `@err` instead of invoking `tm` request. Revise
+ wording of messages in an attempt at clarity.
+
+ Continues the long process of fixing Savannah #52463.
+
+2021-12-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Slightly refactor footnote numbering.
+ ()f): Tighten code style and end string definition with comment.
+ (+c, initialization): Drop unused auto-incrementation of
+ footnote number register `$f`. Add new string `_*` to use when
+ {re-}initializing `*` outside of a footnote diversion, and
+ interpolate the footnote number register instead of a literal.
+
+2021-12-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/e_footnote-marks-work.sh: Add unit test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-12-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Fix automatic numbering of delayed text.
+ (initialization): Add `_#` string for use in multiple
+ assignments of `#` string.
+ (initialization, pd): Remove unused auto-incrementation from
+ `$d` delayed text number register.
+ ()d): Increment `$d` register unconditionally, no longer
+ conditionally on whether the delayed text marker string `#` has
+ been interpolated.
+ ()d, pd): Update `#` string using new `_#` string. Stop
+ initializing the string with `\k` mark-setting escape sequence.
+
+ * doc/meref.me (Annotations) <)d>: Document now-unconditional
+ incrementation of `$d` register.
+
+ Fixes <https://savannah.gnu.org/bugs/?61632>.
+
+2021-12-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/e_delayed-text-marks-work.sh: Add test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-12-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Rename internal register out of user name space.
+ (@f): Rename `VL` to `__`; remove it immediately after using it.
+
+2021-12-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/meref.me: Fix documentation error; the `$s` macro draws a
+ horizontal line of 2 inches' length, not 1.5 inches.
+
+ Fixes <https://savannah.gnu.org/bugs/?58682>. Thanks to Dave
+ Kemper for the report.
+
+2021-12-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Generate me(7) manual sources as part of the build. We had been
+ shipping 'me' sources with the string '@VERSION@' in them and
+ only sed-replacing that to produce generated PostScript, but
+ this replacement was not occurring for users who processed the
+ documents themselves.
+
+ * doc/meintro.me:
+ * doc/meintro_fr.me:
+ * doc/meref.me: Rename these to...
+ * doc/meintro.me.in:
+ * doc/meintro_fr.me.in:
+ * doc/meref.me.in: ...these.
+
+ * doc/doc.am (DOCFILES): Add the new *.in files. Move the *.me
+ files from here...
+ (GENERATEDDOCFILES): ...to this new variable.
+ (dist_otherdoc_DATA, EXTRA_DIST): Add `$(GENERATEDDOCFILES)`.
+ (doc/me{intro{,_fr},ref}.me): Add new target rules.
+
+ * src/utils/grog/tests/smoke-test.sh: Update test to look for
+ the above source tree documents under their new names.
+
+2021-12-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (.me.txt, .ms.txt): Drop unused suffix rules.
+
+2021-12-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (DOC_SED): Add substitution of command prefix
+ {"@g@"} so we can make accurate reference to groff commands with
+ Unix counterparts in our documentation.
+
+2021-12-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac: Add nroff mode string definitions for 4.4BSD
+ compatibility.
+ - Define '{' and '}' (superscripting) strings as '[' and ']'.
+ - Define '<' and '>' (subscripting) strings as '\(la and
+ '\(ra' if available on the device, otherwise '<' and '>'.
+
+ * tmac/tests/e_footnote-marks-work.sh: Update expected output.
+
+ * doc/meref.me: Document it.
+
+ Fixes <https://savannah.gnu.org/bugs/?61619>.
+
+2021-12-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (doc/meintro_fr.ps): Add target rule (overriding
+ suffix rule) to generate this file using `-mfr` (load the French
+ localization macro file).
+
+2021-11-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Drop redundant `do_divert()` declaration.
+
+ * src/roff/troff/env.h: Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?61433>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2021-11-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Remove `DEBUGGING` preprocessor cruft.
+
+ * src/roff/troff/input.cpp:
+ * src/roff/troff/mtsm.cpp: Stop defining `DEBUGGING`
+ preprocessor macro (as empty).
+
+ * src/roff/troff/input.cpp: Give `DEBUG_OPTION` an empty string
+ value if the former is undefined, so the `getopt_long()` call
+ will compile.
+
+ Fixes <https://savannah.gnu.org/bugs/?61436>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2021-11-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Slightly refactor table format column modifier `p` and
+ `v` validation.
+
+ * src/preproc/tbl/main.cpp (process_format): Make code terser by
+ introducing references to `list->point_size` and
+ `list->vertical_spacing`. Doing this requires a new scope
+ {because a switch case isn't one} so add it, without updating
+ indentation for this commit. When complaining of out-of-range
+ type size or vertical spacing, report the limit.
+
+2021-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Improve diagnostic messages.
+
+ Revise diagnostic messages generally to use terminology
+ consistent with the recent rewrite of tbl(1), identify a
+ contextual token when possible, and communicate more helpfully.
+
+ * src/preproc/tbl/main.cpp (process_options): Tell the user
+ which region option is missing a closing parenthesis or cannot
+ accept an empty argument. Refer to region options as such, not
+ simply "options" (so they can't be confused with command-line
+ options). Say that input is "invalid" instead of "bad".
+ (process_format): Say "table format specification" instead of
+ just "format". Say "column classifier" instead of "format".
+ When a column modifier is missing an argument or a closing
+ parenthesis, identify it and refer to it as a "column modifier"
+ instead of omitting context. Inform user that arguments to `p`
+ and `v` column modifiers must be "(optionally signed) integer"s,
+ not "numbers", lower these diagnostics' levels from error to
+ warning, and indicate that the modifier is ignored. Clarify
+ diagnostic when extra characters trail `.` at the end of a table
+ format line.
+ (process_data): Say "table entry" instead of "data entry" when
+ discarding an excess one.
+ (process_table): Say we're giving up on "this table region", not
+ this "table", particularly since any table continuations (.T&)
+ are ignored.
+
+2021-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix call to `getopt_long()`.
+
+ * src/preproc/tbl/main.cpp (main): Stop telling `getopt_long()`
+ to look for a `T` option. Continues b4bbf32e, 16 October 2020.
+
+2021-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Tweak usage message.
+
+ * src/preproc/tbl/main.cpp (usage): Document `--version`. Give
+ version retrieval mode separate synopsis. Use more normative
+ synopsis syntax.
+
+2021-11-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Fix code style nits.
+
+ * src/preproc/tbl/main.cpp (process_input_file)
+ (entry_format::debug_print, process_data, main): Replace
+ `assert(0)` calls with communicative predicates.
+ (struct input_entry_format, input_entry_format::debug_print,
+ process_format): Boolify. Demote and rename `int`s
+ `last_column` and `equal` to `bool`s named `is_last_column` and
+ `is_equal_width`. Assign them Boolean literals.
+ (process_format): Boolify. Demote `have_expand`, `got_format`,
+ and `got_period` from `int` to `bool`. Use Boolean literals in
+ assignments thereto.
+ (process_options): Swap order of null pointer comparison when a
+ typo or thinko could lead to lvalue assignment.
+ (process_data): Boolify. Demote `give_up` from `int` to `bool`.
+ Demote and rename `int` `row_comment` to `bool`
+ `seen_row_comment`. Use Boolean literals in assignments
+ thereto.
+ (main): Use standard C library symbols `EXIT_SUCCESS` and
+ `EXIT_FAILURE` with `exit()` calls instead of `0` and `1`.
+
+2021-11-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Fix Savannah #61520.
+
+ * src/utils/grog/grog.pl: Move hash `preprocessor_for_macro` to
+ global scope since it is now mutable across `do_line` subroutine
+ calls.
+ (do_line): Adjust regex matching an end macro to work better.
+ Check names of macros being defined by the document; if they
+ start with '[' or ']', stop attempting to detect refer(1) usage,
+ by deleting its key from the `preprocessor_for_macro` hash.
+
+ Fixes <https://savannah.gnu.org/bugs/?61520>.
+
+2021-11-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Add regression test for Savannah #61520.
+
+ * src/utils/grog/tests/avoid-refer-fakeout.sh: Do it.
+ * src/utils/grog/grog.am (grog_TESTS): Run test.
+
+2021-11-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Page Motions):
+ * man/groff.7.man (Escape short reference): Fix error: the `\r`,
+ `\u`, and `\d` escape sequences move in ems, not vees, despite
+ being vertical motions. Add discussion and example. Thanks to
+ Bjarni Ingi Gislason for pointing out the problem in groff(7)
+ and Tadziu Hoffman for his lucid explanation.
+
+ Fixes <https://savannah.gnu.org/bugs/?61437>. Thanks to Bjarni
+ Ingi Gislason for the report and a suggested patch.
+
+2021-11-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/include/error.h: Drop `extern` storage class from
+ diagnostic function prototypes. Drop parameter names from
+ prototypes, in keeping with the Stroustrup-style C++ used in
+ most of groff.
+
+2021-11-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/font.cpp (font::load): Update diagnostic
+ messages to say "kerning pair" instead of "kern pair".
+
+2021-11-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (read_size): Update diagnostic
+ messages to use more normative language: say "type size" instead
+ of "point-size", and "escape sequence" instead of "escape".
+ * src/roff/groff/tests/\
+ use_point_size_escape_with_single_digit_arg.sh: Update expected
+ diagnostic wording in text.
+
+2021-11-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (read_size): Boolify. Update
+ prototype. Demote return type from `int` to `bool`. Use
+ Boolean literals for return values. Similarly demote local
+ variable, rename it from `bad_digit` to
+ `contains_invalid_digit`, and use Boolean literals with it.
+
+2021-11-16 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ * src/devices/gropdf/gropdf.pl: Fixes to importing pdf versions
+ > 1.4.
+
+2021-11-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: If "nowarn", suppress table row warning.
+
+ * src/preproc/tbl/table.cpp (table::init_output): Bracket the
+ generated groff code that emits a warning if a table row
+ overruns a page location trap (usually, is too long to
+ vertically fit on the page) in a test for whether the "nowarn"
+ region option was given, so that this warning is suppressed as
+ well when that option is used.
+ * src/preproc/tbl/tbl.1.man (Region options): Document new
+ "nowarn" behavior.
+
+ {"nokeep" also suppresses this warning, for a different reason;
+ no diversion is created to hold the table row, so its vertical
+ size does not exist to be compared to the distance to the next
+ page trap.}
+
+ Fixes <https://savannah.gnu.org/bugs/?61477>.
+
+2021-11-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::do_vspan): Fix code style
+ nits. Swap order of null pointer and zero equality comparisons
+ when a typo or thinko could lead to lvalue assignment. Break a
+ series of 6 and-ed assertion predicates into separate `assert()`
+ calls--sure to be less maddening for anyone who has to debug
+ such a contingency. Clarify comment since C++98 didn't yet have
+ `nullptr`.
+
+2021-11-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [m4]: Clean up shell variable quoting and bracing.
+
+ * m4/groff.m4 (GROFF_PROG_YACC, GROFF_MAKEINFO)
+ (GROFF_BROKEN_SPOOLER_FLAGS, GROFF_TARGET_PATH_SEPARATOR): Stop
+ bracing shell variable expansions that don't require it; the
+ shell is not make(1).
+ (GROFF_PROG_YACC, GROFF_MAKEINFO): Double-quote shell variable
+ expansions that might produce whitespace.
+ (GROFF_MAKEINFO): Drop unnecessary leading zeroes from version
+ number component construction. Drop unnecessary escaping of
+ plus sign in expr(1) input.
+
+2021-11-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [m4]: Clean up test(1) usage.
+
+ Get rid of string (non-)nullity tests and comparisons involving
+ concatenation with garbage (usually "x"). Even the GNU Autoconf
+ manual's shell portability material doesn't recommend this. It
+ must be either a bodge cooked up by shell programmers who
+ couldn't remember to quote variable expansions, or a workaround
+ for shells of such poor quality that they defied the odds and
+ decayed out of usage or got fixed.
+
+ Instead, use double quotes (only where necessary). Test for
+ non-empty strings with "test -n" and empty strings with "test
+ -z". Stop quoting literal comparands that obviously have no
+ shell metacharacters in them.
+
+ * m4/groff.m4 (GROFF_PRINT, GROFF_PROG_YACC, GROFF_PERL)
+ (GROFF_DOC_CHECK, GROFF_MAKEINFO, GROFF_TEXI2DVI)
+ (GROFF_HTML_PROGRAMS, GROFF_PDFDOC_PROGRAMS, GROFF_PAGE)
+ (GROFF_TMAC, GROFF_WITH_COMPATIBILITY_WRAPPERS, GROFF_X11)
+ (GROFF_APPRESDIR_DEFAULT, GROFF_APPRESDIR_CHECK)
+ (GROFF_HAVE_TEST_EF_OPTION, GROFF_BASH, GROFF_UCHARDET)
+ (GROFF_UCHARDET_CHECK, GROFF_PDFTOOLS)
+ (GROFF_USE_GROFF_ALLOCATOR): Do it.
+
+2021-11-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_TEXI2DVI): Add dependency on
+ `GROFF_MAKEINFO` macro. Rewrite to also test `MAKEINFO`
+ variable, which is empty if the `makeinfo` command is not
+ installed or too old. Consequently ignore `texi2dvi` if is too
+ old without having to do a version check (since it and
+ `makeinfo` are distributed together, both being part of GNU
+ Texinfo).
+
+ * doc/doc.am (.texi.dvi, .texi.pdf): Update error message to
+ indicate that `texi2dvi` is _either_ missing or too old.
+
+2021-11-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_MAKEINFO): Stop throwing a warning if the
+ installed `makeinfo` is old but the distributed Info manual is
+ up to date. This is not a configure-time problem; the user will
+ be notified when they run 'make' if they modify doc/groff.texi,
+ or if they run 'make doc' (which has required a TeX installation
+ for years). Empty the `MAKEINFO` variable immediately if a
+ too-old version is detected. Drop needless `AC_SUBST`itution of
+ the detected `makeinfo` version.
+
+2021-11-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_HTML_PROGRAMS): Clarify message; it is only
+ groff-generated HTML that is disabled by the absence of the
+ programs checked for. (`makeinfo` can still generate our
+ Texinfo manual in HTML format.)
+
+2021-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [build]: Drop `BUILD_INFODOC` symbol. Ship manual in GNU Info,
+ text, and HTML forms in distribution archive.
+
+ * Makefile.am (MAINTAINERCLEANFILES): Initialize.
+ (MOSTLYCLEANADD): Drop unused variable.
+ * configure.ac: Drop `AM_CONDITIONAL([BUILD_INFODOC]...`.
+ * doc/doc.am (EXTRA_DIST): Rearrange shipment of our Texinfo
+ manual source files to precede all of the generated forms, for
+ clarity. Drop all `BUILD_INFODOC` conditionals. Make
+ `build_infodoc` phony target depend on plain text, GNU Info, and
+ HTML forms of Texinfo manual unconditionally. Also drop unused
+ variables `groffinfodir`, `groffpdfdir`, and `texi2dvi_missing`.
+ (EXTRA_DIST, MAINTAINERCLEANFILES): Add Info form of manual.
+ Drop glob pattern attempting to match the segments that
+ `makeinfo` breaks it into. It isn't necessary for
+ MAINTAINERCLEANFILES.
+ (EXTRA_DIST, MAINTAINERCLEANFILES): Add text form of manual.
+ (EXTRA_DIST, MAINTAINERCLEANFILES): Add HTML form of manual.
+ (dist-hook): Depend on new (phony) target `dist-info-bits`.
+ (dist-info-bits): Look for the info document in the build
+ directory, then the source directory. (It could be in either
+ place depending on whether the build from a Git working tree is
+ being done in or out of a separate build directory.) When
+ found, copy the segments to the assembly area for the
+ distribution archive.
+ (install_infodoc): Refactor. Remove any groff info files from
+ the destination info directory using a shell glob directly
+ instead of a partly redundant ls(1) command substitution.
+ Similarly, use a shell glob to cp(1) the info files (including
+ any matched segments) to the destination info directory before
+ running `install-info`. (In this process I learned that
+ `install-info` doesn't "install" anything; instead, it
+ {de-}registers info files with their top-level catalog.)
+
+2021-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (.texi.txt, .texi.html): Reorder pattern rules to
+ make it clearer which formats require only `makeinfo` and which
+ require `texi2dvi`. The latter imposes more build dependencies,
+ including a full TeX installation.
+
+2021-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [mom]: Build more quietly.
+
+ * contrib/mom/mom.am (penguin.{ps,.pdf}): Make targets quiet by
+ default; they are simple file copies.
+
+2021-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Revise a test's setup.
+
+ * src/roff/groff/tests/fp_should_not_traverse_directories.sh:
+ Revise search for device/font description directory to work in
+ within-source-tree builds and (for now) with the approach used
+ by Automake's "distcheck" target.
+
+2021-11-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Accept `\&` as an empty table entry.
+
+ * src/preproc/tbl/table.cpp (table::add_entry): Suppress
+ diagnostic about non-empty table entries classified as `_` or
+ `=` if the entry consists of exactly `\&`.
+
+ * src/preproc/tbl/tbl.1.man (Table data): Document this idiom.
+
+2021-11-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Update diagnostic messages.
+
+ * src/preproc/tbl/main.cpp (process_options, process_format):
+ * src/preproc/tbl/table.cpp (table::add_entry): Align diagnostic
+ text with terminology now used in tbl(1) man page.
+ - "global option" -> "region option"
+ - "specifier" -> "column modifier"
+ - "format" -> "column classifier"
+
+2021-11-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Fix missing colon in diagnostic messages.
+
+ * src/libs/libgroff/error.cpp (do_error_with_file_and_line):
+ Restore missing colon to diagnostic text. Problem introduced by
+ me in commit 9a038161, 8 November.
+
+2021-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff,grops]: Slightly refactor.
+
+ * src/devices/grops/ps.cpp: Explicitly preprocessor-include
+ "lib.h" since we use the `PI` symbol it defines.
+
+ * src/include/lib.h: Add inclusion guard. Wrap only `extern "C"
+ and its braces in preprocessor conditionals, so that prototypes
+ are present in the header even for C language code that
+ #includes this header. Add `static` storage class to `PI`
+ symbol to avoid redefinition errors from the linker.
+
+ * src/libs/libgroff/iftoa.c (if_to_a):
+ * src/libs/libgroff/itoa.c (i_to_a, ui_to_a): Add `const` type
+ qualifier to function definitions for agreement with prototypes
+ in "lib.h". Drop local copies of prototypes.
+
+2021-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Centralize definitions of {U,}INT_DIGITS.
+
+ * src/libs/libgroff/iftoa.c:
+ * src/libs/libgroff/itoa.c: Move definitions of `INT_DIGITS` and
+ `UINT_DIGITS` from here...
+ * src/include/lib.h: ...to here.
+
+ * src/libs/libgroff/iftoa.c:
+ * src/libs/libgroff/itoa.c: Preprocessor-include "lib.h". This
+ revealed missing guards around `extern "C"` declarations, so...
+
+ * src/include/lib.h: Add them where necessary.
+
+2021-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (OP): Fix code style nits. Don't quote macro
+ arguments unnecessarily. Use consistent backslashing. Use
+ groff font escape sequence syntax. Use adjustable non-breaking
+ space escape sequence instead of a non-adjustable one.
+ Parenthesize numeric expression for better readability.
+
+2021-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Make allocator replacement optional. Switch it
+ off by default, relying on C++ runtime new/delete support.
+
+ * configure.ac: Call new `GROFF_USE_GROFF_ALLOCATOR` m4 macro.
+ Use `AM_CONDITIONAL` to set Automake variable
+ `USE_GROFF_ALLOCATOR` if appropriate. Report whether the
+ allocator is used in configure script output summary.
+ * m4/groff.m4 (GROFF_USE_GROFF_ALLOCATOR): Define new macro to
+ collect user preference. The default is off.
+ * src/libs/libgroff/libgroff.am (libgroff_a_SOURCES): Build and
+ link new.cpp only if we are to `USE_GROFF_ALLOCATOR`.
+
+ * NEWS: Add item.
+
+2021-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_TMAC): Report a human-readable message if
+ no system tmac prefix is found, instead of leaving the ellipsis
+ hanging.
+
+2021-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_TMAC): Use separate shell variable for
+ `AC_MSG_RESULT()` content since the human-readable string we
+ populate it with in the empty case is not appropriate for later
+ `AC_SUBST()`-itution. Problem introduced by me in commit
+ 19670348, 31 October.
+
+2021-11-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am (MOSTLYCLEANFILES): Remove `$(TMACMDOCFILES)`.
+ This variable, formerly named `TMACMDOCSTRIPFILES`, should not
+ be used in a clean target because its contents are (no longer)
+ generated files. Problem introduced by me in commit 24602f42, 4
+ July (only noticeable in within-source-tree builds).
+
+2021-11-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff,pic]: Check `strdup()` return value.
+
+ * src/libs/libgroff/font.cpp (struct text_file): Add `fatal()`
+ member function.
+ (text_file::fatal): Implement it.
+
+ * src/libs/libgroff/font.cpp (font::load_desc):
+ * src/preproc/pic/troff.cpp (troff_output::set_location): Die if
+ `strdup()` returned a null pointer.
+
+2021-11-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/error.cpp (do_error_with_file_and_line):
+ Revise to eliminate `fprintf()` calls, which might perform
+ dynamic memory allocation, rendering this function unsafe to
+ call after memory allocation failures. Since this function is
+ near the top of our diagnostic output call stack, that would be
+ unfortunate. `errprint()` does not use dynamic allocation, nor
+ do the `i_to_a()` and `ui_to_a()` functions it calls to format
+ integers.
+
+2021-11-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * configure.ac: Add `strdup` to AC_CHECK_FUNCS since we are
+ using it and the whole point of libgroff's `strsave()` was to
+ get along without it. But `strdup` has been standardized in
+ POSIX for 20 years (SUSv3, POSIX:2001) and is on its way into
+ ISO standard C (N2353) and C++ (P2391R0) as well.
+
+2021-11-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/strsave.cpp (strsave): Call `strcpy()` only
+ if `malloc()` did not return a null pointer. Problem noted by
+ Ingo Schwarze.
+
+2021-11-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/fontfile.cpp (font::open_file): Don't open
+ user-specified font file names with slashes in them; i.e., don't
+ traverse directories outside the configured font path. Also
+ refuse to open the file if the `sprintf()` used to construct its
+ file name doesn't write the expected quantity of bytes to the
+ destination buffer.
+
+ Fixes <https://savannah.gnu.org/bugs/?61424>. Thanks to Ingo
+ Schwarze for feedback.
+
+2021-11-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Regression-test Savannah #61424.
+
+ * src/roff/groff/tests/fp_should_not_traverse_directories.sh: Do
+ it.
+ * src/roff/groff/tests/artifacts/HONEYPOT: Add test artifact.
+ * src/roff/groff/tests/artifacts/devascii/README: ...and this;
+ we need a directory to make the test work but empty ones tend to
+ look unintentional.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+ (EXTRA_DIST): Ship artifacts.
+
+2021-11-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Fix diagnostic error wording.
+
+ * src/libs/libgroff/font.cpp (font::load): Fix diagnostic
+ message; this is issued when an unrecognized directive is
+ encountered, so it necessarily occurs _before_ any `charset` or
+ `kernpairs` directive. Give the user a hint accordingly.
+
+2021-11-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Fix paragraph tag regressions.
+
+ * tmac/an-ext.mac (UR, MR): Only create an environment and
+ diversion if we're not already in one of the latter. If we are
+ {in groff man, this occurs only when collecting a `TP` paragraph
+ tag}, then typeset the URI as part of the indented paragraph.
+ (UE, ME): Pop the diversion and environment stacks only if we
+ pushed them in the first place. Eliminate spurious space in
+ post-URI arguments by only typesetting excess macro parameters
+ if there were any.
+
+2021-11-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Regression-test Savannah #61425.
+
+ * tmac/tests/an-ext_link-macros-work-in-paragraph-tags.sh: Do
+ it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-11-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (DS): Drop a redundant unconditional break; every
+ display macro we call in the event of a valid call already
+ breaks the line, and it's polite to not break if we're given an
+ invalid argument. Emit a diagnostic error if the argument we're
+ given is invalid, and immediately end the diversion we just
+ opened.
+
+2021-11-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (environment::set_font): Clarify
+ diagnostic warning.
+
+2021-11-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::add_entry): If we see a '\^'
+ entry on the first row of a table, it's invalid, but we need to
+ create an empty entry in its place. Otherwise, someone can put
+ another '\^' right below the one on the first row, creating a
+ reference to a nonexistent table entry and provoking a SEGV.
+ Issue an error diagnostic (distinct from the one in
+ `do_vspan()`), create the entry, and skip `do_vspan()` (given a
+ '^' in a first-row definition, it issues an error diagnostic and
+ returns early, which suffices). Problem appears to date back to
+ groff 1.02 (June 1991) at the latest.
+
+ Fixes <https://savannah.gnu.org/bugs/?61417>.
+
+2021-11-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Regression-test Savannah #61417.
+
+ * src/preproc/tbl/tests/\
+ do-not-segv-on-invalid-vertical-span-entry.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+2021-11-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Fix Savannah #61408.
+
+ * tmac/an.tmac (an-prepare-inner-footer): Don't try to get a
+ substring of an empty string; the man page author might not have
+ specified a third argument to `TH` (or supplied an empty one).
+
+ Fixes <https://savannah.gnu.org/bugs/?61408>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2021-11-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add regression test for Savannah #61408.
+
+ * tmac/tests/an_inner-footer-abbreviation-works.sh: Do it.
+
+2021-11-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Tweak computation in URI breaking.
+
+ * tmac/an-ext.tmac (UE, ME): Stop adding the page offset `.o`
+ when performing the available horizontal space computation for
+ the typeset URI string. This made no difference on nroff
+ devices (grotty; even with `.po 15n`), but it caused the
+ breaking decision to be too conservative on troff devices
+ {grops}, forcing some URIs that would fit on the current line to
+ the next one.
+
+ * tmac/tests/an-ext_UE-breaks-before-long-URIs.sh: Add test of
+ URI with no link text, which also has break points after every
+ character, so that we detect even slight alterations.
+
+2021-11-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Do more device and font description file validation,
+ resolve an assertion failure arising from a negative declared
+ device resolution, and correct a documentation error.
+
+ * src/libs/libgroff/font.cpp (font::load): Include more
+ information about invalid input in diagnostic messages.
+ - When a kern pair's amount is missing or invalid, report the
+ name of the kern pair.
+ - When someone tries to declare the first entry in the charset
+ section as an alias, report the glyph name.
+ - Identify the token for the unnamed character if an attempt
+ is made to alias it.
+ - When an out-of-range character type is applied to a glyph,
+ name the glyph.
+ (font::load_desc): Same.
+ - Drop redundant zero initialization of `res`.
+ - Check all directives that take basic units for positive
+ values, adding `res`, `unitwidth`, `paperwidth`, and
+ `paperlength`. Update this diagnostic to demand positive,
+ not nonnegative, values.
+ - When the font count is long in a `fonts` directive, report
+ how many font names were declared (and thus expected). (If
+ the count is short, the next line is read for a font name,
+ like 'tcommand' in our devutf8/DESC.)
+ - When interpreting a `papersize` directive, throw an error
+ and return false if `res` has not yet been encountered,
+ since it is used in subsequent computations.
+ - When a paper format cannot be determined, report the
+ original declared value from the DESC file. Use `strdup()`
+ to save it since it gets clobbered by the resolving process.
+ `free()` the saved string when we're done, regardless of
+ error condition.
+
+ * doc/groff.texi (Device and Font Files):
+ * man/groff_font.5.man (DESC file format): Document additional
+ exception to order-indifference of directives: (at least one)
+ `res` must precede `papersize`.
+
+ Fixes <https://savannah.gnu.org/bugs/?61414>.
+
+2021-11-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grohtml/post-html.cpp
+ (html_printer::do_file_components): Add assertion.
+
+2021-11-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grops/ps.cpp (usage): Document -p and --version
+ options.
+
+2021-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-nroff (doc-setup-page-layout): Set the title
+ length to the device line length (register `.l`) if register
+ `LT` is not defined. This keeps the title length from being set
+ to 78n when the line length is not, preventing the output from
+ looking silly.
+
+2021-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (main): Emit groff code to define
+ macro `T&` as empty if it is not already defined. (All of our
+ full-service macro packages [except mdoc(7)] already do this, so
+ there's no change in semantics; mom(7) even defines it as an
+ empty _string_.)
+
+2021-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/string_case_xform_requests.sh: Migrate
+ test to POSIX shell, dropping use of process substitution (a
+ Bashism). Also rewrite to stop using a here document within a
+ command substitution, mainly for paranoia.
+
+ * src/roff/groff/tests/string_case_xform_requests.sh:
+ * src/roff/groff/tests/on_latin1_device_oq_is_0x27.sh: Update
+ shebang lines to use /bin/sh as the interpreter.
+
+2021-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grops/ps.cpp (encode_subfont): Update assertion to
+ check for `sub` parameter being a null pointer rather than
+ `sub->glyphs`; the latter is a member array of a `subencoding`
+ struct so it can't be a null pointer. (`glyphs` is an array of
+ pointers to `const char`; the _elements_ of the array can [and
+ are initialized to] be null pointers, but the address of the
+ array itself will never be in a C/C++ implementation.) Detected
+ by Clang 13's "-Wtautological-pointer-compare".
+
+2021-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/new.cpp (delete): Declare `throw()` (no
+ exceptions thrown); quiets "-Wimplicit-exception-spec-mismatch"
+ from Clang 13.
+
+2021-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4: Fix messaging nits.
+ (GROFF_MAKEINFO): Set `missing` to "missing 'makeinfo'" for
+ consistency with other assignments to `missing`.
+ (GROFF_TMAC): Utter an intelligible result in the configure
+ check when no system macro files requiring groff wrapping are
+ located.
+
+2021-10-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Handle special character escape sequences that map to
+ basic Latin glyphs in device control escape sequences
+ consistently among output devices.
+
+ * src/roff/troff/input.cpp (encode_char): Rearrange
+ conditionals. This is the logic that puts the "whatever" within
+ a \X'whatever' escape sequence into GNU troff's intermediate
+ output. Handle adjustable and nonadjustable space escape
+ sequences ("\~" and \ ") first. Then, if the token is a special
+ character escape sequence, retrieve its "contents" (glyph name).
+ Move the basic Latin mapping for the seven glyph names '-',
+ 'aq', 'dq', 'ga', 'ha', 'rs', and 'ti' here, before checking
+ whether the device description issued the
+ 'use_charnames_in_special' directive. This way, the 'html' and
+ 'xhtml' output devices can straightforwardly embed these basic
+ Latin characters in device control escapes (notably, "html:",
+ for which the present convention is to follow the this tag
+ immediately with a literal HTML URI, complete with `<a href>`
+ element syntax). If the special character is none of these and
+ we should 'use_charnames_in_special', proceed as groff 1.22.4
+ and earlier did. This is a behavior change, as was my addition
+ of this translation mechanism in the first place, so...
+
+ * doc/groff.texi (Postprocessor Access): Document it.
+
+ * src/roff/groff/tests/\
+ device_control_escapes_express_basic_latin.sh: Test it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?61401>.
+
+2021-10-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Map \[ti] correctly in device control escape sequences.
+
+ * src/roff/troff/input.cpp (encode_char): Fix copy-and-paste
+ error. \[ti] should put '~', not '^', into a device control
+ command.
+
+ Fixes <https://savannah.gnu.org/bugs/?61403>; problem introduced
+ by me in commit 9d61b3d1, 1 October.
+
+2021-10-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Handle degenerate input quietly.
+
+ * tmac/an.tmac (TH): Define new register `an-TH-was-called`.
+ (an-end): Return immediately if that register is not defined;
+ to format the default page footer we must have the information
+ declared in a valid `TH` call. (`TH` also initializes the type
+ size and baseline spacing registers we use to prepare the page
+ footer environment.) If the register _is_ defined, remove it
+ just prior to the end of this macro definition, in preparation
+ for next page to be rendered.
+
+ * tmac/tests/an_handle-degenerate-input-quietly.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/61402>, a regression from
+ groff 1.22.4 (problem introduced by me in the course of many
+ changes to trap management and header/footer handling to work
+ nicely in batch rendering with -mandoc and mdoc(7) documents).
+
+2021-10-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Warn if `TE` table macro called but `TW` register (set by
+ tbl(1)) undefined. Arrange it so that we warn only once per
+ man(7) document, not per table region.
+
+ * tmac/an.tmac (TH): Remove `TW` register when processing new
+ document and clear `an-was-tbl-failure-reported` register.
+ (TE): Check `TW` and `an-was-tbl-failure-reported` registers; if
+ the former is undefined and the latter false, emit the message
+ and set `an-was-tbl-failure-reported`.
+
+ Addresses part of <https://savannah.gnu.org/bugs/?61379>.
+ Thanks to Bjarni Ingi Gislason for the suggestion.
+
+2021-10-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Improve portability.
+
+ * src/devices/grotty/tests/osc8_works.sh: Fix typo in test.
+ Multiple regex quantifiers after an atom were not flagged with a
+ diagnostic by GNU grep 3.3, but were by BSD grep 2.5.1-FreeBSD.
+
+ * src/roff/groff/tests/smoke-test_html_device.sh: Stop trying to
+ set $LC_CTYPE to "C.UTF-8"; some systems don't support this
+ expediency. Skip the test if the tester hasn't configured the
+ environment adequately.
+
+ * tmac/tests/s_TC-works-with-percent-in-custom-titles.sh: Fix
+ portability problems exposed by FreeBSD sed (which version is
+ unclear). {1} Use POSIX BREs, dropping use of '+' quantifier.
+ {2} Add semicolons to terminate commands before braces on the
+ same line. Simplify surrounding test structure.
+ * tmac/tests/e_footnotes-work-with-columns.sh: Fix same two sed
+ problems.
+ * tmac/tests/andoc_flush-between-packages.sh:
+ * tmac/tests/doc_accept-mixed-case-section-headings.sh:
+ * tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh: Fix same
+ sed semicolon problem.
+
+ * src/roff/groff/tests/on_latin1_device_oq_is_0x27.sh: Rewrite
+ test to stop using a here document (containing an unpaired
+ single quote) inside a command substitution, which is broken in
+ GNU Bash 3.2 and some other versions. Instead construct the
+ input with printf(1). Also gets rid of a Bashism (process
+ substitution) that Ingo pointed out years ago.
+ * src/utils/grog/tests/recognize-perl-pod.sh: Same problem,
+ different solution. The Perl POD output is far too large to
+ construct programmatically, so move it into an external file...
+ * src/utils/grog/tests/foo.man: ...here.
+ * src/utils/grog/grog.am (EXTRA_DIST): Ship new test artifact.
+
+2021-10-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Make sed-based insertion of `lf` requests more
+ portable: a dance is required to embed a literal newline inside
+ a sed expression inside a shell command executed as part of a
+ Make target rule. We assume that neither the POSIX shell $''
+ operator nor a working printf(1) is available.
+ (DOC_GROFF): Define a shell variable containing a literal
+ newline, evading make(1) and echo(1)'s valiant attempts to
+ consume it.
+ (doc/pic.html, doc/webpage.html): Repeat trick, slightly
+ modified since the dependency needs to be manually identified.
+
+ Solution adapted from the GNU Autoconf manual, "Newlines in Make
+ Rules".
+
+ Fixes <https://savannah.gnu.org/bugs/?61265>. Thanks to John
+ Gardner for the report.
+
+2021-10-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (TH): Stop populating `an-extra3` (the default
+ center header) if the section argument is "3p". "3p" does not
+ always mean a Perl-related man page; Debian- and Arch
+ Linux-based systems[1][2] (at least) have long used a "3perl"
+ suffix, while OpenBSD appears to still use "3p" for Perl[3],
+ which is also used by the POSIX man page distribution[4].
+ Fortunately, Perl and POSIX are reliable at providing a fifth
+ argument to `TH` anyway, so our fallback is as unnecessary as it
+ is non-impartial.
+ * tmac/groff_man.7.man.in (Document structure macros) <TH>:
+ De-document the above behavior.
+
+ [1] https://manpages.debian.org/bullseye/perl-doc/\
+ Pod::Man.3perl.en.html
+ [2] https://man.archlinux.org/man/Pod::Man.3perl
+ [3] https://man.openbsd.org/man3p/Pod::Man.3p
+ [4] https://man7.org/linux/man-pages/man3/system.3p.html
+
+2021-10-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Abbreviate the inside footer if necessary.
+
+ * tmac/an.tmac (an-prepare-inner-footer): Prevent the inside
+ footer from overrunning the center footer.
+ (BT): Use new string `an-ifoot` instead of `an-extra2` in page
+ footers.
+
+ Fixes <https://savannah.gnu.org/bugs/?61386>.
+
+2021-10-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #61386.
+
+ * tmac/tests/an_inner-footer-abbreviation-works.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-10-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff_char.7.man (Description, Special character escape
+ forms): Document the `\C` escape sequence. Fix error: \[a] is
+ _not_ "translated to \a, the uninterpreted leader escape
+ sequence," but requests a glyph _named_ '\a' internally--it
+ appears thus in diagnostic messages and, importantly, in the
+ font description files defining special character glyph names.
+
+2021-10-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac: Refactor to reduce repetition.
+ (an-break-paragraph): New macro handles paragraph-breaking tasks
+ previously duplicated.
+ (SH, SS, P, TP, IP, HP): Call it rather than issuing its
+ constituent requests.
+
+2021-10-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (TP): Reset type size, vertical spacing, and font
+ to defaults before setting the new paragraph.
+
+ Fixes <https://savannah.gnu.org/bugs/?61380>.
+
+2021-10-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Auto-increment): Fix error; the `\R` escape
+ sequence does _not_ support an auto-incrementation amount.
+ * man/groff_out.5.man (Command reference/Simple commands): Fix
+ erroneous claim: 'N' is not a GNU roff extension; it appears on
+ page 27 of CSTR#54 (1992).
+
+2021-10-24 Keith Marshall <keith.d.marshall@ntlworld.com>
+
+ [ms]: Provide global default XH and XN implementations.
+
+ cf. <https://savannah.gnu.org/bugs/?58946#comment13>
+
+ * tmac/s.tmac (XH-INIT, XN-INIT, XH-UPDATE-TOC)
+ (XH, XN, XH-REPLACEMENT, XN-REPLACEMENT): Implement them, and...
+ * tmac/groff_ms.7.man: ...document them.
+
+2021-10-24 Keith Marshall <keith.d.marshall@ntlworld.com>
+
+ [ms]: Fix misleading NH macro indentation.
+
+ * tmac/s.tmac (@NH) [.T is html]: .if statement should exhibit
+ same indentation as preceding .DEVTAG-NH statement, but is
+ overindented; fix it.
+
+2021-10-23 Keith Marshall <keith.d.marshall@ntlworld.com>
+
+ [ms]: Defend against uncontrolled page trap recursion.
+
+ * tmac/s.tmac (pg@top) [HM+FM+.V>.p]: Diagnose insufficient page
+ length, and abort; cf. <https://savannah.gnu.org/bugs/?61294>
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [groff]: Fix code style nits.
+
+ * src/roff/groff/groff.cpp (main, help): Use standard C library
+ preprocessor symbols `EXIT_SUCCESS` and `EXIT_FAILURE` instead
+ of 0 and 1 literals, respectively. See commit fa4c27e9, 7
+ September.
+ (main): Replace `assert(0)` with a communicative predicate.
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grotty/tty.cpp (tty_printer::special_link):
+ Eliminate casts by retyping `uri` and `pair` to pointers to
+ `const char`s.
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am: Build more quietly.
+ (tmac/stamp-wrap): Prefix all rule commands with `$(AM_V_at)`;
+ since this target is a stamp file instead of a useful artifact
+ to be distributed, make its creation completely silent by
+ default.
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/troff.am: Build more robustly.
+ (src/roff/troff/majorminor.cpp): Drop progress-reporting `echo`
+ in favor of prefixing final rule command with `$(AM_V_GEN)`.
+ Prefix earlier rule commands with `$(AM_V_at)`. Use `printf`
+ instead of `echo` to build the file, and create a temporary file
+ at first so that we don't race with the compiler on parallelized
+ builds.
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/eqn.am (neqn): Simplify: drop removal of
+ target prior to overwriting it; any system we can build groff on
+ should have a shell that implements the clobbering semantics of
+ the POSIX shell '>' operator. (If this isn't true, we have
+ _many_ other target rules in our build to which we must add
+ prefatory `$(RM)`s, or I miss my guess.)
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/libgroff.am: Build more quietly and
+ robustly.
+ (src/libs/libgroff/version.cpp): Drop progress-reporting `echo`
+ in favor of prefixing final rule command with `$(AM_V_GEN)`.
+ Prefix earlier rule commands with `$(AM_V_at)`. Use `printf`
+ instead of `echo` to build the file, and create a temporary file
+ at first so that we don't race with the compiler on parallelized
+ builds. Drop nilpotent sed transformation; this looks like a
+ relic of past times when we'd drop a trailing ".0" from the
+ version number stored in the C symbol `Version_string`.
+ (charset.alias, ref-del.sed, ref-add.sed): Prefix rule command
+ with `$(AM_V_GEN)`.
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/xditview/xditview.am: Build more quietly.
+ (src/devices/xditview/GXditview-ad.h): Drop progress-reporting
+ `echo` in favor of prefixing rule command with `$(AM_V_GEN)`.
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/devpdf.am: Build more quietly.
+ (font/devpdf/enc/text.enc, font/devpdf/map/symbolmap,
+ $(DEVPDFFONTMAP_1)): Prefix all rule commands with
+ `$(AM_V_at)`; since these are all `mkdir`s and `cp`s, I reason
+ that little can go wrong with them that won't be disclosed by
+ these tools' own diagnostic messages, so they are insignificant
+ from a perspective of build progress.
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Build more quietly.
+ (doc/examples.stamp): Prefix all rule commands with
+ `$(AM_V_at)`; since this target is a stamp file instead of
+ a useful artifact to be distributed, make its creation
+ completely silent by default.
+ (doc/groff.info, .texi.txt): Prefix directory creation with
+ `$(AM_V_at)` and `makeinfo` command with `$(AM_V_GEN)`.
+ (.texi.dvi, .texi.pdf): Prefix directory creation with
+ `$(AM_V_at)` and `makeinfo` command with `$(AM_V_GEN)`. Send
+ diagnostic message to standard error if `texi2dvi` is
+ unavailable.
+ (.texi.html): Prefix directory creation with
+ `$(AM_V_at)`. Two HTML versions are produced, in split and
+ unsplit versions; prefix one `makeinfo` command with
+ `$(AM_V_GEN)` and the other with `$(AM_V_at)` so that only one
+ message is produced.
+ (gnu.eps): Drop useless/noisy `echo` command. Prefix copy
+ operation with `$(AM_V_at)`. Send diagnostic messages to
+ standard error if there are problems with the Netpbm tools.
+
+ (MOSTLYCLEANFILES): The `mostlyclean` target was leaving a file,
+ `groff.info-3`, behind in the build tree. At some point our
+ Texinfo manual grew beyond earlier expectations. Use a glob
+ `[0-9]` instead (giving a hostage to fortune that `makeinfo`
+ will never split our manual into more than nine chunks).
+
+2021-10-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * arch/misc/misc.am:
+ (arch_shdeps_sh): Pull file name into a new variable.
+ (EXTRA_DIST, shdeps.sed): Use it.
+ (shdeps.sed): Build more quietly; prefix with `$(AM_GEN_V)`.
+
+2021-10-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [nroff]: Support groff's -R flag to run refer(1).
+
+ There's no reason not to support calling `refer` with nroff-mode
+ documents; typographically, it's less demanding than tbl(1).
+ GNU troff(1) supports an incompatible `-R` flag to suppress the
+ reading of troffrc{,-end} files, but this is likely not the `-R`
+ that users will want--it is most useful for troubleshooting
+ troff, and nroff already unconditionally loads a macro file
+ {tty-char.tmac}.
+
+ * src/roff/nroff/nroff.sh: Do it.
+
+ * src/roff/nroff/nroff.1.man:
+ * NEWS: Document it.
+
+2021-10-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am (tmac/groff_man.7.man)
+ (tmac/groff_man_style.7.man): Be quieter by default; use
+ $(AM_V_GEN) more consistently with the rest of the build.
+
+2021-10-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_error): Format diagnostic
+ messages in closer alignment with GNU Coding Standards: don't
+ introduce a space between the program name and the input file
+ name.
+
+ * src/roff/groff/tests/string_case_xform_errors.sh: Update
+ expected output.
+
+2021-10-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (distribute_space): Revert an
+ `assert()` I added in commit b93eacd8d7 (5 September); we can
+ indeed reach this code with a negative amount of desired space,
+ and in fact the "show hyphenation points" trick
+ <https://froude.eu/groff/examples/hyphenation-points.html>
+ relies upon it. Add explanatory comment.
+
+ Fixes <https://savannah.gnu.org/bugs/?61348>.
+
+2021-10-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * test-groff.in: Add support for sboxes.tmac.
+
+2021-10-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ Include <config.h> before any standard headers.
+
+ Gnulib requires that files that might use Gnulib features (which
+ pretty much means every C or C++ source file) must include
+ <config.h> first. Arrange for that. This will be needed once
+ Groff updates to the latest Gnulib; see Bjarni Ingi Gislason's
+ problem report in:
+ <https://lists.gnu.org/r/bug-gnulib/2021-10/msg00008.html>
+
+ The only exception I can see is src/utils/addftinfo/guess.cpp,
+ which does not include any standard include file either directly
+ or indirectly, and so need not include <config.h>.
+
+ * src/devices/xditview/Dvi.c:
+ * src/devices/xditview/font.c:
+ * src/devices/xditview/lex.c:
+ * src/devices/xditview/page.c:
+ * src/devices/xditview/parse.c:
+ * src/libs/libbib/map.c:
+ * src/libs/libgroff/change_lf.cpp:
+ * src/libs/libgroff/cmap.cpp:
+ * src/libs/libgroff/cset.cpp:
+ * src/libs/libgroff/fmod.c:
+ * src/libs/libgroff/getcwd.c:
+ * src/libs/libgroff/lf.cpp:
+ * src/libs/libgroff/ptable.cpp:
+ * src/libs/libgroff/quotearg.c:
+ * src/libs/libxutil/DviChar.c:
+ * src/libs/libxutil/XFontName.c:
+ * src/libs/libxutil/xmalloc.c:
+ * src/utils/indxbib/signal.c: Do it.
+
+ [Fixes <https://savannah.gnu.org/bugs/?61315>. --GBR]
+
+2021-10-10 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Handle pdfs > v1.4 loaded by \X'pdf: pdfpic'.
+
+ * src/devices/gropdf/gropdf.pl: Improve loading of pdfs above
+ version 1.4, i.e. handle compressed nodes in /ObjStm. Also
+ improve code in \X'pdf: import'.
+
+2021-10-10 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Add new background boxes to gropdf.
+
+ * src/devices/gropdf/gropdf.pl: New \X'pdf: background' command.
+ * tmac/pdf.tmac: Covenience command .pdfbackground added.
+ * contrib/sboxes/: Files which demonstrate use of background
+ boxes using -ms macros.
+
+2021-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Fix portability problems in 2 tests.
+
+ * src/roff/groff/tests/break_zero-length_output_line_sanely.sh:
+ * tmac/tests/s_PN-works.sh: Migrate from `echo` to `printf` for
+ test inputs containing backslashes to be interpreted literally.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?61302>. Thanks to
+ Deri James for identifying the problem.
+
+2021-10-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grotty]: Slightly refactor.
+
+ * src/devices/grotty/tty.cpp: Boolify. Demote numerous
+ variables (and one return type) from `int` to `bool`, use
+ Boolean instead of integer literals with them, and give the
+ variables names resembling logical predicates.
+ - horizontal_tab_flag -> want_horizontal_tabs
+ - form_feed_flag -> want_form_feeds
+ - bold_flag_option -> want_emboldening_by_overstriking
+ - bold_flag -> do_bold
+ - underline_flag_option -> want_italics_by_underlining
+ - underline_flag -> do_underline
+ - overstrike_flag -> want_glyph_composition_by_overstriking
+ - draw_flag -> allow_drawing_commands
+ - italic_flag_option -> want_sgr_italics
+ - italic_flag -> do_sgr_italics
+ - reverse_flag_option -> want_reverse_video_for_italics
+ - reverse_flag -> do_reverse_video
+ - old_drawing_scheme -> use_overstriking_drawing_scheme
+ (class tty_printer:printer): Similarly.
+ - is_underline -> is_underlining
+ - is_bold -> is_boldfacing
+ - cu_flag -> is_continuously_underlining
+ (tty_printer::tty_color): Demote return type as above. Invert
+ its sense; rename `unknown_color` to `is_known_color`.
+ (tty_printer::color_to_idx): Invert sense of test at
+ `tty_color()` call site.
+
+2021-10-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Finish documenting new `TC-MARGIN` register and
+ `TC-LEADER` special character.
+
+ Fixes <https://savannah.gnu.org/bugs/?61157>.
+
+2021-10-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grotty]: Slightly refactor.
+
+ * src/devices/grotty/tty.cpp (tty_printer::special_link): Use
+ consistent loop styles and drop unnecessary arithmetic.
+
+2021-10-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Fix oversight and improve `MR` test.
+
+ * tmac/an-ext.tmac (initialization): Enable `mY` register to
+ indicate use of grotty(1) (and therefore OSC 8 support) if the
+ "ascii", "cp1047", or "latin1" output devices are used, not just
+ "utf8".
+
+ * tmac/tests/an_MR-works.sh: Drop copy-and-paste cruft from a
+ different test. Update expected output and check for the
+ presence of "link" device control subcommands, not just correct
+ font selections.
+
+2021-10-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add `MR` macro for man page cross references.
+
+ * tmac/an.tmac (an-prepare-page-title): After a possibly
+ abbreviated man page title is determined, redefine `an-pageref`
+ to set the title portion in the font stored in the `MF` string
+ and bracket it with italic corrections if that font is thought
+ to be oblique.
+ (MR): Add macro to format the text of a man page cross
+ reference, and hyperlink it on HTML and terminal output devices
+ if permitted by the `U` register.
+ (initialization): Define `MF` string as `I` if not already set.
+ Define `an-lic` and `an-ic` strings as either empty or as
+ containing italic corrections.
+
+ * tmac/an-ext.tmac (MR): If the formatter is not GNU troff,
+ define macro to format the text of a man page cross reference.
+
+ * tmac/groff_man.7.man.in: Document it.
+ (Description): Add macro to summary table.
+ (Description/Hyperlink macros): Document new feature. Note
+ origin in Plan 9 troff. [style] Add examples of use.
+ (Description/Font style macros): Drop man page cross references
+ from list of items whose typeface conventions are disputed,
+ since we have a semantic macro now and a configurable means of
+ resolving the problem.
+ (History): Add `MR` item.
+ (Options) <MF>: Document new string.
+ (Files) <an-ext.tmac>: Revise discussion to accommodate `MR`.
+ (Authors): Add myself an author of extension macros.
+
+ * tmac/tests/an_MR-works.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ * NEWS: Add item.
+
+2021-10-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (SH, SS): Invoke `ne` request _before_ performing
+ font remapping: any page-breaking decision will be taken before
+ the remapping happens, and so won't be in effect across a page
+ boundary, undesirably impacting header and footer text.
+
+ Fixes <https://savannah.gnu.org/bugs/?61279>.
+
+2021-10-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Regression-test Savannah #61279.
+
+ * tmac/tests/an_font-remapping-does-not-affect-titles.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-10-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (an-abbreviate-title): Rename to...
+ (an-prepare-page-title): ...this.
+
+2021-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Correct erroneous claim: the ".NH S" extension to ms(7)
+ comes from 4.2BSD, not GNU.
+
+2021-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/ms.ms (Creating a table of contents): Sync with recent
+ additions to groff_ms(7), expand, and heavily revise.
+
+2021-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [andoc,man,mdoc]: Fix Savannah #61266. Resolve problems in
+ batch rendering of man pages to PDF arising from entanglement
+ of end-of-input traps, page location traps, continuous rendering
+ mode, and andoc's reloading of the (m)an and (m)doc packages.
+
+ * tmac/andoc.tmac (reload-doc, reload-man): Remove end-of-input
+ traps alongside others.
+
+ * tmac/an.tmac (an-end): Only perform flush and "manual" page
+ footer placement if in continuous rendering mode, since this
+ macro is not only called by a trap placed only in continuous
+ rendering mode, but also by andoc when changing macro packages.
+ Unconditionally remove the `an-header` trap since the next
+ document might be using a different macro package.
+
+ * tmac/mdoc/doc-common: In initialization, set flag indicating
+ that manual header placement will be required.
+ (Dt): Call `doc-setup-header` (which sets up several types of
+ trap) unconditionally, and break the page if the vertical
+ drawing position is anywhere but at the top.
+ (Os): If the package has just been initialized, call
+ `doc-header` to force the page header to be written.
+ (doc-end-macro): Remove `doc-header` trap since the next
+ document might be using a different macro package. Break the
+ page. Set flag indicating that manual header placement will be
+ required for the next document.
+
+ * tmac/mdoc/doc-ditroff (doc-setup-header): Only set page
+ location traps for the header and footer if not continuously
+ rendering.
+ * tmac/mdoc/doc-nroff (doc-setup-header): Stop calling
+ `doc-header` here if continuously rendering. Emit an
+ unconditional break. Except for the location of the footer
+ trap, the `doc-setup-header` implementations are now identical.
+
+ Refactoring is needed: some macros and registers have misleading
+ names, there is some code duplication in mdoc, and some of the
+ trap management problems are solved in slightly different ways
+ in man(7) and mdoc(7), perhaps unnecessarily. We also need some
+ test scripts to protect us from regressions. But this fixes the
+ rendering problems.
+
+ Fixes <https://savannah.gnu.org/bugs/?61266>.
+
+2021-10-02 Keith Marshall <keith.d.marshall@ntlworld.com>
+
+ Correct manpage typo/inconsistency.
+
+ * tmac/groff_ms.7.man (TC_LEADER, TC_MARGIN): Correct; should
+ be...
+ (TC\-LEADER, TC\-MARGIN): ...respectively, for consistency
+ with...
+ * tmac/s.tmac (TC-LEADER, TC-MARGIN): ...these.
+
+2021-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (encode_char): Update diagnostic
+ messages to not presume the identity of the escape character;
+ continues 9be3f8e3 (4 June).
+
+2021-10-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grotty/tty.cpp (tty_printer:special_link): Tighten
+ code slightly by taking advantage of preprocessor string literal
+ concatenation.
+
+2021-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Fix `U` enablement override so it actually works the way
+ I had in mind.
+ - The package proper enables it by default, but
+ - the sample site configuration file switches it off, on the
+ assumption that distributors and users will know better than
+ we do when they get a capable pager in place, and
+ - a register setting at the command line (or otherwise prior to
+ the loading of the macro package) is dispositive.
+
+ * tmac/an-ext.tmac: Rename URI output device capability register
+ from `U` to `mU`.
+ (UR, UE, MT, ME): Test both `U` and `mU` before handling
+ hyperlinks specially.
+ * tmac/an.tmac: If `man.local` did not initialize `U`, switch it
+ on. The hope is that we can drop the stuff in `man.local`
+ completely at some point.
+ * tman/man.local: Only initialize `U` if it is not already
+ defined.
+
+2021-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Use OSC 8 hyperlinks.
+
+ * tmac/an-ext.tmac: Add registers `mY` (output driver is
+ "grotty") and `U` (generate hyperlinks). `U` is intended to
+ apply to hyperlinking support in general, not just grotty's OSC
+ 8 feature. If the output driver is either grohtml or grotty,
+ make `U` true (`man.local` is read subsequently and can override
+ it).
+ (UR, MT): Conditionalize diversion production on hyperlink
+ support, not grohtml use per se.
+ (UE, ME): Generate device control commands for `tty` device to
+ emit hyperlinks.
+
+ * tmac/groff_man.7.man.in (Options): Document -rU.
+ (Files) [style]: Add example of `U` register enablement.
+
+ * tmac/man.local: Disable `U` register by default, except on the
+ `html` device.
+
+ * NEWS: Add item.
+
+2021-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grotty]: Add OSC 8 hyperlink support.
+
+ * src/devices/grotty/tty.cpp: Do it. Define `OSC` (Operating
+ System Command) and `ST` (String Terminator) preprocessor
+ symbols for these ECMA-48 (ISO 6429) character sequences.
+ (tty_printer::simple_add_char): Add stripped-down alternative to
+ `add_char()` member function for cases where we want to use many
+ defaults because we're writing a terminal escape sequence, not
+ rendering a glyph. (A function like `add_char()` that takes 8
+ arguments of varying types is a code smell--phew!)
+ (tty_printer::special): Call `special_link()` member function if
+ the device control command is `link`.
+ (tty_printer::special_link): Add new member function to generate
+ OSC 8 hyperlinks.
+
+ * src/devices/grotty/grotty.1.man: Document it. Observe in
+ multiple places that disablement of SGR escape sequences
+ disables OSC 8 too.
+
+ * src/devices/grotty/tests/osc8_works.sh: Test it.
+ * src/devices/grotty/grotty.am (TESTS, grotty_TESTS): Run test.
+ (EXTRA_DIST): Ship test.
+
+ * NEWS: Add item.
+
+ Fixes <https://savannah.gnu.org/bugs/?60666>. Thanks to Steffen
+ Nurpmeso for supplying a proof-of-concept. (I went with my own
+ implementation, though, so blame me if it breaks.)
+
+2021-10-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Convert special character glyphs corresponding to
+ Unicode Basic Latin ("ASCII") code points to those code points
+ when they occur in device escapes. (They should be correct for
+ IBM code page 1047 as well, but this is untested.) This is
+ necessary for encoding URLs in device control commands. Special
+ character identifiers are presumed to be the defaults documented
+ in groff_char(7); this is a design gap that we should consider
+ addressing. (We don't have a way to ask "is this the special
+ character corresponding to Unicode basic Latin code point X?")
+
+ * src/roff/troff/input.cpp (encode_char): Do it.
+
+2021-09-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man, mdoc]: Draw line after each page more consistently in
+ continuous rendering mode.
+
+ * tmac/an.tmac (an-bp): Move responsibility for line-drawing
+ after each document from here...
+ (an-end): ...to here. Refactor; drop
+ `an-do-draw-line-after-document` register in favor of testing
+ `\n[.F]` for nullity; if it is not null, then another document
+ is due to be processed (in fact, `.F` already contains its file
+ name), and we need to draw a separating line. If it is null, we
+ have reached the end of input and none is necessary.
+
+ * tmac/mdoc/doc-ditroff.tmac (doc-setup-page-layout):
+ * tmac/mdoc/doc-nroff.tmac (doc-setup-page-layout): Save
+ configured line length in new register `doc-line-length`.
+ * tmac/mdoc/doc-common.tmac (doc-end-macro): Port the above
+ man(7) feature to mdoc(7); draw a line of this length after each
+ document if continuously rendering.
+
+2021-10-01 Keith Marshall <keith.d.marshall@ntlworld.com>
+
+ [ms]: Update footnote handling documentation.
+
+ * tmac/groff_ms.7.man: Make some linguistic style adjustments.
+ (FP): Document it; see <https://savannah.gnu.org/bugs/?61022>.
+ (FS-MARK): Likewise, document this recently added feature.
+
+2021-10-01 Keith Marshall <keith.d.marshall@ntlworld.com>
+
+ [ms]: Support user-defined TOC leader style.
+
+ * tmac/s.tmac (toc*leader-char): Rename it as...
+ (TC-LEADER): ...this; within PX, leave it unchanged, if
+ predefined.
+ (TC-MARGIN): New numeric register; if predefined, leave it
+ unchanged, otherwise define as \w'000'; use it instead of
+ hard-wired definition, within PX; see
+ <https://savannah.gnu.org/bugs/?61157>.
+
+ * tmac/groff_ms.7.man (TC-LEADER, TC-MARGIN): Document them.
+
+2021-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [pic]: Update input file name correctly.
+
+ * src/preproc/pic/troff.cpp (troff_output::set_location): Copy
+ the inbound file name argument with `strdup()` and store pointer
+ to this copy in `last_filename` instead of aliasing argument.
+ (troff_output::~troff_output): `free()` the memory allocated by
+ `strdup()` in destructor.
+
+ Fixes <https://savannah.gnu.org/bugs/?61206>. Pointer
+ assignment instead of a string copy was being performed, which
+ means that after its initial assignment, `last_filename` always
+ shared its value ultimately with the `current_filename` pointer
+ {a libgroff symbol}, so `strcmp()` was always being performed on
+ identical pointers. Problem appears to date back 30+ years, to
+ the dawn of our repo history.
+
+2021-09-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devlj4/S: Make font name consistent with file name.
+
+2021-09-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/font.cpp (font::load): Throw error if a font
+ description file is missing a `spacewidth` directive, since it
+ is now re-documented as mandatory. Atypically, we don't return
+ false in this scenario; instead we proceed with the existing
+ logic to compute a space width for the font based on typical
+ practices for Western alphabetic fonts (see, e.g.,
+ <https://type.today/en/journal/spaces>.
+
+ * font/devdvi/EX:
+ * font/devdvi/MI:
+ * font/devdvi/S:
+ * font/devdvi/SA:
+ * font/devps/EURO: Add `spacewidth` directive to font
+ description files we ship that were missing it. We use the same
+ values that libgroff would have computed, so there should be no
+ visible difference.
+
+2021-09-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am: Mark `$(TEST_SUITE_LOG)` as `.PRECIOUS`. This
+ prevents the test suite log from being deleted if there are any
+ failures.
+
+ Fixes <https://savannah.gnu.org/bugs/?61213>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl (do_line): Move first-macro-call test
+ for `TH` to a more appropriate location.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Refactor to make it easier to generalize a per-package
+ scoring mechanism.
+
+ * src/utils/grog/grog.pl: Convert `inferred_main_package` from
+ scalar to list. Add scalar `selected_main_package` to store a
+ "winner" from the list of main packages inferred.
+ (push_main_package): Add subroutine to populate
+ `inferred_main_package`.
+ (do_line, infer_man_or_ms_package): Update to use
+ `push_main_package`.
+ (construct_command): Rewrite to select a main package from the
+ list `inferred_main_package`, taking user-supplied arguments
+ into account as an overriding factor. Drop now-unused `msupp`
+ list.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp (main): If the `-I` option is given,
+ run the grn preprocessor and pass it an `-M` option with `-I`'s
+ argument.
+
+ * NEWS:
+ * src/roff/groff/groff.1.man (Options): Document it. Also
+ document that `-I` options are passed to the output driver.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl (do_line): Don't strip groff-style
+ comments \# if AT&T compatibility mode is enabled.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Perform more font description file validation. Our
+ documentation said that the `name` directive was mandatory but
+ we didn't actually enforce this. Also be more specific in our
+ complaints of ill-formedness.
+
+ * src/libs/libgroff/font.cpp (font::load): Add local Boolean
+ variable `saw_name_directive`. Rename `had_charset` to
+ `saw_charset_directive` for symmetry. Emit distinct diagnostics
+ for `spacewidth` and `slant` directives having a missing,
+ non-numeric, or out-of-range argument. Emit diagnostic if the
+ file lacks a `name` directive.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Slightly refactor.
+
+ * src/libs/libgroff/font.cpp (struct text_file): Rename member
+ variable `size` to `linebufsize` for clarity (it's certainly not
+ the size of the text file).
+ (text_file::text_file): Initialize `linebufsize` in constructor.
+ (text_file::next_line): Allocate new `buf` using `linebufsize`
+ instead of magic number (which was also stored to `size`, making
+ it only semi-magic, I guess). Rename local variable `i` to
+ `length` since it is in fact the length (in `char`s) of the
+ string stored in `buf`.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Revisit fix for Savannah #61173.
+
+ * src/libs/libgroff/font.cpp (text_file::text_file): Restore
+ setting of `lineno` member variable to `0` in constructor
+ initializer list, but...
+ (text_file::next_line): ...unconditionally increment it every
+ time through this member function's outer loop.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Align diagnostic message format with libgroff.
+
+ * src/roff/troff/input.cpp (fatal_with_file_and_line): Report
+ the program name if one is defined.
+ (fatal_with_file_and_line, error_with_file_and_line,
+ debug_with_file_and_line): Report the line number of the input
+ file only if it is positive, so that other values can be used
+ for "whole file" complaints. See commit cd0457b6, 17 September.
+
+2021-09-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Drop redundant diagnostic.
+
+ * src/libs/libgroff/font.cpp (font::load): Drop redundant
+ diagnostic; a missing `charset` directive is already checked for
+ later, circa line 998.
+
+2021-09-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Fix code style nits.
+
+ * src/libs/libgroff/font.cpp (font::font): Use initializer list
+ as much as possible in constructor.
+ (font::unit_scale, font::get_width, font::get_height,
+ font::get_depth, font::get_italic_correction,
+ font::get_left_italic_correction,
+ font::get_subscript_correction, font::get_character_type,
+ font::get_code, font::get_special_device_encoding): These member
+ functions rely on the font being either indexed or associated
+ with an output device that uses the `unicode` directive in its
+ `DESC` file. The compiler doesn't know this, so annotate the
+ `abort()` calls that conclude them. Add an `assert()` before
+ each one to more usefully describe the violated invariant in the
+ event this unreachable code is somehow reached.
+ (font::get_width): Annotate special meaning of zero zoom factor.
+
+2021-09-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/include/font.h (UNDEFINED_GLYPH): Use idiomatic C++98 null
+ pointer constant.
+
+2021-09-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Fix compiler warning and dead store.
+
+ * src/devices/grohtml/post-html.cpp (html_printer::special):
+ Update call of `font::load_font()` to stop passing obsolete
+ parameter (deleted by me in 2dff87d3, 17 September). The value
+ stored to the parameter by that function was never read anyway,
+ so also get rid of the variable that contained it.
+
+ Fixes <https://savannah.gnu.org/bugs/?61187>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2021-09-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Slightly refactor.
+
+ * src/include/font.h (font::scan_papersize): Demote return type
+ from `int` to `bool`.
+ * src/libs/libgroff/font.cpp (font::scan_papersize): As above.
+ Use Boolean instead of integer literals. Also rename `FILE`
+ stream pointer from `f` to `fp` and perform an explicit
+ comparison against the idiomatic C++98 null pointer constant.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff, troff]: Slightly refactor device and font description
+ file loading. Remove dead code.
+
+ * src/include/font.h (font::load_font): Drop second parameter.
+ It was never used for its intended purpose.
+ (load): Drop first parameter; likewise.
+ * src/libs/libgroff/font.cpp (font::load, load): As above.
+
+ * src/libs/libgroff/font.cpp (struct text_file): Rename
+ `skip_comments` to `recognize_comments`. Demote that and
+ `silent` from `int` to `bool`.
+ (text_file::text_file): Use Boolean rather than integer literals
+ in constructor.
+ (text_file::next_line, font::load): Apply above renaming.
+
+ * src/libs/libgroff/font.cpp (font::load): Rename parameter from
+ `head_only` to `load_header_only` to be more communicative.
+ Drop test of font description file name being `DESC`; this code
+ was not being reached. Stop throwing errors from this function
+ on failure to open the file; the caller will handle this when it
+ sees our false return value. Rename local variable `command` to
+ `directive` for alignment with our documentation. Replace "I
+ dont think this should happen" test and comment with `assert()`.
+ (struct table): Rename member from `command` to
+ `numeric_directive` to indicate its specificity, tracking only a
+ subset of valid `DESC` file directives.
+
+ * src/libs/libgroff/font.cpp (font::load, font::load_desc):
+ Remove redundant assignments to the member variable formerly
+ known as `skip_comments`.
+
+ * src/libs/libgroff/font.cpp (font::load_desc): Rename local
+ variable `directive_found` to `numeric_directive_found` to
+ clarify logic.
+
+ * src/roff/troff/node.cpp (mount_font_no_translate): Simplify
+ call of `font::load_font`. The `not_found` in-out parameter
+ which was so agonizingly passed up through layers of library
+ calls was never actually read. Drop code that has been `#if
+ 0`-ed out since 1993.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/font.cpp (font::load_desc): Clear line
+ number before emitting whole-file validity diagnostics.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/font.cpp (font::load_desc): Emit correct
+ line numbers when complaining of invalid `sizescale`, `hor`, or
+ `vert` values in device description files.
+
+ Fixes <https://savannah.gnu.org/bugs/?61174>.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Increase validation of device and font description
+ files.
+
+ * src/libs/libgroff/font.cpp (font::load): Validate the syntax
+ and value of the `name` directive.
+ (font::load_desc): Issue distinct diagnostics for a `fonts`
+ directive that is missing arguments and for a first argument
+ that can't be interpreted as a valid number.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Make error reporting more flexible.
+
+ * src/libs/libgroff/error.cpp (do_error_with_file_and_line):
+ Interpret a nonpositive line number specially: treat the
+ diagnostic as applying to the entire file, and omit the line
+ number.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Add information to diagnostics.
+
+ * src/libs/libgroff/font.cpp (font::load): Drop unused argument
+ from `error()` call.
+ (font::load_desc): In another, add name of numeric directive
+ that is given an unparsable number.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Tweak code style.
+
+ * src/libs/libgroff/font.cpp (trim_args, font::load)
+ (font::load_desc): Compare pointer explicitly to null pointer
+ literal `0` instead of using logical complementation.
+ (font::load, font::load_desc): Swap order of null pointer
+ equality comparisons when a typo or thinko could lead to lvalue
+ assignment.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Use idiomatic C++98 null pointer constant.
+
+ * src/libs/libgroff/font.cpp (text_file::error)
+ (glyph_to_unicode, font::get_special_device_encoding)
+ (font::load):
+ * src/libs/libgroff/fontfile.cpp (font::image_generator):
+ * src/libs/libgroff/nametoindex.cpp (class charinfo)
+ (character_indexer::named_char_glyph)
+ (character_indexer::numbered_char_glyph):
+ * src/libs/libgroff/string.cpp (string::clear):
+ * src/libs/libgroff/tmpfile.cpp (temp_init::temp_init):
+ * src/libs/libgroff/tmpname.cpp (gen_tempname): Use `0` literal
+ instead of `NULL` to represent a null pointer; this was
+ idiomatic in C++98 and is mostly the practice elsewhere in
+ groff. Also swap order of null pointer equality comparisons
+ when a typo or thinko could lead to lvalue assignment.
+
+ * src/roff/troff/input.cpp (input_stack::diversion_state)
+ (input_stack::get_diversion_state, charinfo::contains)
+ (glyph_to_name): Similar.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Slightly refactor.
+
+ * src/libs/libgroff/font.cpp (font::load): Use same loop style
+ as `font::load_desc()`.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Fix off-by-one error in font and device description
+ file reader diagnostics.
+
+ * src/libs/libgroff/font.cpp (text_file::text_file): All text
+ files begin with line 1, not line 0.
+
+ Fixes <https://savannah.gnu.org/bugs/?61173>.
+
+2021-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Boolify more interfaces.
+
+ * src/include/font.h (font::unit_scale):
+ * src/libs/libgroff/font.cpp (font::unit_scale): Demote return
+ type from `int` to `bool`. Use Boolean literals instead of
+ integers.
+
+ * src/libs/libgroff/font.cpp (struct text_file): Rename `next`
+ member function to `next_line`. Demote its return type from
+ `int` to `bool`. Use Boolean literals instead of integers.
+
+2021-09-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Boolify local variables.
+
+ * src/libs/libgroff/font.cpp (font::load, font::load_desc):
+ Demote local variables used as Booleans from `int` to `bool` and
+ update literals used with them from integer to Boolean.
+
+2021-09-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grn, groff, troff]: Communicate better when device DESC file
+ can't be loaded.
+
+ * src/libs/libgroff/font.cpp (font::load_desc): Stop writing
+ diagnostic to standard error.
+ * src/preproc/grn/main.cpp (getres):
+ * src/roff/troff/troff.cpp (main): Replace "sorry, I can't
+ continue" fatal diagnostic with a more informative message.
+ Instead say which device's DESC file the program was trying to
+ open, which might reveal a user's logic error or typo.
+ * src/roff/groff/groff.cpp (main): Replace "invalid device" text
+ of fatal diagnostic similarly. I think it is more helpful to
+ indicate the operation that failed rather than saying the device
+ was invalid, particularly since there are other ways for a
+ device description to be invalid even if a DESC file is found
+ and loaded.
+
+2021-09-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Throw warning diagnostic if device DESC file attempts
+ to load unavailable fonts.
+
+ * src/roff/troff/input.cpp (main): Take advantage of new Boolean
+ return values of `mount_style()` and `mount_font()` to produce
+ warning diagnostics if mounting a style or font as directed by
+ the DESC file fails. Explain in a comment why, at present, this
+ style mount warning will never actually trip.
+
+2021-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Lift font mounting diagnostic messages to be closer to
+ their user-controlled contexts to provide more information. In
+ many cases no diagnostic was being thrown at all when an
+ unavailable font was requested by name, which is the method most
+ users prefer, and which meant that failures resulting from typos
+ in font names for many requests (`uf`, `fschar`, `rfschar`,
+ `special`, `fspecial`, `fzoom`, `bd`, `tkf`, `cs`) were going
+ unreported. Further, promote these font warnings to errors
+ because the request will utterly fail to do what was requested
+ with no reasonable fallback. Possibly, they were formerly
+ warnings because at the low level they were being emitted, they
+ could also have originated from unavailable fonts encountered in
+ device description files, and while that's bad news, it results
+ in no formatting problems if it doesn't affect fonts that an
+ input document actually uses.
+
+ * src/roff/troff/node.cpp (struct font_lookup_info): New struct
+ keeps the font name or position requested, and the position of
+ successful font lookup.
+ (font_lookup_info::font_lookup_info): Add constructor.
+ (font_lookup_error): New function builds error message using a
+ `font_lookup_info` struct and a message argument.
+ (get_fontno): Rename to...
+ (has_font): ...this. Add argument to take a pointer to a
+ `font_lookup_info` struct. Return a `bool` indicating whether
+ the lookup succeeded. Place former `int` return value into the
+ struct instead. Populate the other struct members with the
+ requested font name or position, as appropriate.
+ (mount_font_no_translate): Stop throwing warning diagnostic here
+ if a font cannot be loaded. Instead, throw them...
+ (font_position): ...here, and...
+ (underline_font, define_font_special_character,
+ remove_font_special_character, read_special_fonts,
+ font_special_request, font_zoom_request, bold_font, track_kern,
+ constant_space): ...here, using `font_lookup_info` structs and
+ `has_font()`.
+ (remove_font_special_character): Stop returning early if font
+ lookup fails; it's gratuitously inconsistent with other similar
+ functions (save one, which has a reason to be different).
+ (define_font_special_character): Return early if font lookup
+ fails and say why in a comment (we can't `skip_line()`).
+
+ Fixes <https://savannah.gnu.org/bugs/?59522>.
+
+2021-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * [libgroff, troff]: Further boolify.
+
+ * src/include/font.h (load_font, font): Demote parameters from
+ {pointer to} `int` to `bool` and update default literal from
+ integer to Boolean (except for the pointer). Update comment.
+ * src/libs/libgroff/font.cpp (load_font, load): Similarly.
+
+ * src/roff/troff/node.h (mount_font):
+ * src/roff/troff/node.cpp (mount_font): Demote return type from
+ `int` to `bool`.
+
+ * src/roff/troff/node.h (mount_style):
+ * src/roff/troff/node.cpp (mount_style): Promote return type
+ from `void` to `bool`.
+
+ * src/roff/troff/node.cpp (mount_font_no_translate): Demote
+ return type and `check_only` parameter from `int` to `bool` and
+ use Boolean rather than integer literals with them.
+ (check_font): Update call site of `mount_font_no_translate` to
+ use Boolean literal.
+ (font_position): Indicate that "error" is ignored by casting
+ return value of `mount_font` to void instead of using a comment.
+ (style): Cast return value of `mount_style` to `void`.
+
+2021-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * Makefile.am: Add `.DELETE_ON_ERROR` special target; both GNU
+ and FreeBSD make(1)s support it so maybe it will be portable
+ enough. This avoids, among other problems, a target appearing
+ falsely up-to-date (often as an empty file) when the troff
+ process generating it experiences an assertion failure.
+
+2021-09-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Since June 1991 if not earlier, groff (technically, the refer,
+ lookbib, and lkbib programs) has trusted the header contents of
+ binary bibliographic index files (canonically generated with
+ indxbib(1)) regarding the sizes of the data structures that
+ follow in the file, a notorious class of security problem. In
+ July 2013, the Mayhem Team at Carnegie Mellon University
+ reported to the Debian Bug Tracking System a problem with
+ groff's refer(1) implementation dumping core when reading an
+ index file prepared by a fuzzer.
+
+ * src/libs/libbib/index.cpp (index_search_item::check_header):
+ Add new member function to validate the header of an indexed
+ bibliography file, returning a string describing in detail the
+ first validity problem encountered.
+ (index_search_item::load): Perform the foregoing check before
+ using any of the size values taken from the header; they are
+ relied upon for pointer arithmetic. If in verification mode
+ {using the undocumented `-V` flag to refer(1), lkbib(1), or
+ lookbib(1)}, report the details of the problem encountered.
+ Regardless of that mode, if there is a validity problem, report
+ corruption of the index file and abandon it, forcing fallback to
+ the text version of the corresponding bibliography file.
+
+ Fixes <https://bugs.debian.org/716109>.
+
+2021-09-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libbib/index.cpp
+ (index_search_item::get_invalidity_reason): Don't complain about
+ a last list element being nonnegative if the list size was zero
+ in the first place, as can happen with an empty index. More
+ seriously from a language standpoint, avoid reading through a
+ negative array index (this can escape a compiler's attention
+ because we're reading from the midst of a heap-allocated or
+ `mmap()`ed region, but it's still a code smell).
+
+ Fixes <https://savannah.gnu.org/bugs/?61144>.
+
+2021-09-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libbib/index.cpp (index_search_item::load)
+ (index_search_item::get_invalidity_reason)
+ (index_search_item::add_out_of_date_file): Clarify diagnostic
+ messages. Make it more obvious when we're complaining of a
+ problem in an indexed bibliographic database file (rather than a
+ plain text one). Dial down the amount of Unix jargon a little.
+
+2021-09-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libbib]: Partially boolify.
+
+ * src/include/search.h:
+ * src/libs/libbib/index.cpp:
+ * src/preproc/refer/refer.cpp:
+ * src/utils/lkbib/lkbib.cpp:
+ * src/utils/lookbib/lookbib.cpp: Demote `verify_flag` from an
+ `int` to a `bool`, rename it to `do_verify`, use Boolean
+ instead of integer literals with it, and update call sites.
+
+ * src/libs/libbib/index.cpp: Rename `do_verify()` member
+ function to `get_invalidity_reason()` (it returns a string).
+ Demote `load()` from `int` to `bool`; do the same for `verify()`
+ and rename it to `is_valid()` as well. Use Boolean instead of
+ integer literals with them.
+ (index_search_item::is_valid, make_index_search_item): Update
+ call sites of renamed member functions.
+
+2021-09-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libbib/map.c (mapread): Compare return value of
+ `mmap()` to `MAP_FAILED` instead of `(char *)-1`. `MAP_FAILED`
+ is documented in POSIX Issue 5 a.k.a. SUSv2
+ <https://pubs.opengroup.org/onlinepubs/007908799/xsh/mmap.html>
+ {1997} and should be portable enough by now.
+
+2021-09-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Clamp negative tab stop positions to zero instead of
+ throwing an assertion failure.
+
+ * src/roff/troff/env.cpp (tab_stops::distance_to_next_tab):
+ Replace `assert` with clamping logic, ensuring that `lastpos`
+ can never be negative. While negative tab stop positions don't
+ make much sense (they result in zero horizontal motion), user
+ input like `.ta T -5` should never provoke an assertion failure.
+
+ (set_tabs): Throw range warning in additional scenario, viz., if
+ a repeating tab offset is negative.
+
+ Fixes <https://bugs.debian.org/990406>. Thanks to наб for the
+ report.
+
+2021-09-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Boolify `set_tabs` function.
+
+ * src/roff/troff/env.cpp (set_tabs): Demote local variables from
+ `int` to `bool` and give them predicate-like names.
+ - `first` -> `is_first_stop`
+ - `repeated` -> `is_repeating_stop`
+ Use Boolean instead of integer literals in assignments to them.
+
+2021-09-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Deprecate `OP` macro.
+
+ * tmac/an-ext.tmac (OP): Move implementation from here...
+ * tmac/an.tmac (OP): ...to here. Throw deprecation warning.
+ Throw style warning if wrong number of arguments given.
+
+ * tmac/groff_man.7.man.in (Description): Drop from introductory
+ macro summary.
+ (Description/Command synopsis macros): Move discussion from
+ here...
+ (Description/Deprecated features): ...to here. Explain why it's
+ deprecated.
+
+2021-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Make `ab` request quiet if given no arguments. The
+ `tm`, `tm1`, and `tmc` requests provide ample flexibility for
+ constructing diagnostic messages prior to an error exit, and
+ it's convenient to make `ab` itself quiet instead of saying
+ "User Abort." as Unix Version 7 troff did. Further, there is no
+ standardization across troffs regarding what `ab` should emit if
+ arguments are absent.
+
+ * src/roff/troff/input.cpp (abort_request): Do it.
+
+ * src/roff/groff/tests/ab_works.sh:
+ * src/roff/groff/groff.am (groff_TESTS): Test it.
+
+ * doc/groff.texi (Debugging, Implementation Differences):
+ * man/groff.7.man (Requests/Request short reference):
+ * man/groff_diff.7.man (Implementation differences): Document
+ it.
+
+ Fixes <https://savannah.gnu.org/bugs/?61070>. Thanks to Dave
+ Kemper for the discussion.
+
+2021-09-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Update exit status literals.
+
+ * src/roff/troff/div.cpp (top_level_diversion::begin_page):
+ * src/roff/troff/input.cpp (exit_troff, abort_request, do_error)
+ (fatal_with_file_and_line): Use standard C library preprocessor
+ symbols `EXIT_SUCCESS` and `EXIT_FAILURE` instead of 0 and 1
+ literals, respectively.
+
+2021-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Drop unused member function.
+
+ * src/roff/troff/token.h (class token): Drop unused `title`
+ member function. Its implementation was apparently removed in
+ the prehistory of our Git repository: see James Clark's
+ ChangeLog entry of 1990-09-06.
+
+2021-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Remove workaround for Cfront 1.2 bug.
+
+ * src/roff/troff/input.cpp (do_define_macro): Move `dot_symbol`
+ from to file to function local scope as originally intended.
+
+2021-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Rename parameter.
+
+ * src/roff/troff/input.cpp (token::usable_as_delimiter): Rename
+ parameter from `err` to `report_error` to be more communicative.
+
+2021-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Boolify members of `token` class.
+
+ * src/roff/troff/token.h (class token): Demote return type of
+ several member functions from `int` to `bool` and rename them.
+ - `backspace` -> `is_backspace`
+ - `delimiter` -> `usable_as_delimiter`
+ - `dummy` -> `is_dummy`
+ - `eof` -> `is_eof`
+ - `horizontal_space` -> `is_horizontal_space`
+ - `hyphen_indicator` -> `is_hyphen_indicator`
+ - `leader` -> `is_leader`
+ - `left_brace` -> `is_left_brace`
+ - `newline` -> `is_newline`
+ - `page_ejector` -> `is_page_ejector`
+ - `right_brace` -> `is_right_brace`
+ - `space` -> `is_space`
+ - `special` -> `is_special`
+ - `stretchable_space` -> `is_stretchable_space`
+ - `tab` -> `is_tab`
+ - `transparent_dummy` -> `is_transparent_dummy`
+ - `transparent` -> `is_transparent`
+ - `unstretchable_space` -> `is_unstretchable_space`
+ - `white_space` -> `is_white_space`
+ - `zero_width_break` -> `is_zero_width_break`
+ (class token): Drop 1991 comment anticipating that member
+ function `nspaces` could return "2" for a "double space"; this
+ was apparently never implemented.
+ (class token): Drop parameter names from declarations; the
+ prevailing style (familiar from Stroustrup) is not to use them.
+ (token::is_special): Simplify implementation.
+
+ * src/roff/troff/input.cpp (has_arg)
+ (token::usable_as_delimiter): Update definitions of above member
+ functions not defined in token.h.
+
+ * src/roff/troff/div.cpp (begin_page, space_request, need_space)
+ (output_saved_vertical_space, flush_output):
+ * src/roff/troff/env.cpp (fill, no_fill, center)
+ (right_justify, indent, temporary_indent, margin_character)
+ (number_lines, do_break_request, hyphen_word):
+ * src/roff/troff/input.cpp (next_file, do_overstrike)
+ (do_bracket, do_name_test, do_expr_test, do_zero_width)
+ (token::skip, has_arg, skip_line, empty_name_warning)
+ (non_empty_name_warning, do_get_long_name, process_input_stack)
+ (flush_pending_lines, decode_args, read_request)
+ (do_define_string, do_define_character, remove_character)
+ (do_define_macro, length_request, get_delim_number)
+ (get_line_arg, read_size, get_delim_name, do_register, do_width)
+ (read_title_parts, encode_char, do_special, device_request)
+ (output_request, skip_alternative, begin_alternative)
+ (nop_request, do_if_request, do_source, pipe_source)
+ (ps_bbox_request, tag, taga, do_terminal, do_translate)
+ (hyphenation_code, hyphenation_patterns_file_code, define_class)
+ (get_optional_char, check_missing_character, abort_request)
+ (copy_file, transparent_file, do_macro_source)
+ (charinfo_to_node_list, read_draw_node, read_color_draw_node):
+ * src/roff/troff/node.cpp (get_fontno)
+ (remove_font_special_character, bold_font):
+ * src/roff/troff/number.cpp (start_number, parse_term):
+ * src/roff/troff/reg.cpp (define_number_reg, alter_format):
+ Update call sites to use new names.
+
+ * src/roff/troff/input.cpp (token::usable_as_delimiter)
+ (read_draw_node): Return Boolean, not integer, literals.
+
+2021-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Clamp line and title lengths to device horizontal
+ resolution.
+
+ * src/roff/troff/env.cpp (line_length, title_length): Do it.
+
+ Fixes <https://savannah.gnu.org/bugs/?61116>.
+
+2021-09-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (do_hyphenation_patterns_file):
+ Refactor slightly. Demote `append` from `int` to `bool`.
+ (hyphenation_patterns_file, hyphenation_patterns_file_append):
+ Update call sites to use Boolean, not integer, literals.
+
+2021-09-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/hvunits.h:
+ * src/roff/groff/number.cpp: Mark `H0`, `V0` objects as `const`.
+
+2021-09-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (do_underline_special): Refactor
+ slightly.
+ - Rename `underline_spaces` -> `do_underline_spaces`.
+ - Demote it from an `int` to a `bool`.
+ - Use ternary operator and explicit character literals when
+ writing device control command instead of doing arithmetic
+ on a character literal.
+ - Update call sites to use Boolean literals.
+ - Relocate function to avoid forward reference.
+ - Mark function as static to eliminate external linkage.
+ Remove now-unnecessary prototype.
+
+2021-09-04 Keith Marshall <keith.d.marshall@ntlworld.com>
+
+ Add "ms" footnote marker placement hook.
+
+ * tmac/s.tmac (FS-MARK): New macro; define as no-op, by default.
+ (@FS): Invoke FS-MARK as first action, allowing caller to "hook" it.
+
+2021-09-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (distribute_space): Refactor slightly.
+ - Rename `force_reverse` to `force_reverse_node_list`.
+ - Rename `reverse` to `do_reverse`.
+ - Demote both of the above from `int` to `bool`.
+ - Use Boolean literals with them.
+ - Add assertions to enforce positive values of `nspaces` and
+ `desired_space`.
+ - Remove now-redundant test for `nspaces` being positive.
+ - Add explanatory comments.
+ (environment::wrap_up_field): Update call sites of
+ `distribute_space` when non-default value of
+ `force_reverse_node_list` is supplied.
+
+2021-09-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Don't adjust nonadjustable lines. This means that the
+ direction from which an output line in adjustment mode "b" (or
+ its "n" synonym) is filled with supplemental space is not
+ changed if that output line does not require adjustment. This
+ will result in whitespace changes to documents using that
+ adjustment mode, and these changes will be plainly visible on
+ low-resolution output devices like terminals.
+
+ To illustrate, in the following "A" means an output line
+ requiring adjustment; "F" a line that is "full" and does not;
+ and "L" and "R" indicate distribution of adjustment spaces from
+ the left and right, respectively.
+
+ groff 1.22.4 groff 1.23.0
+ ------------ ------------
+ A L A L
+ A R A R
+ F L F R
+ A R A L
+
+ * src/roff/troff/env.cpp (distribute_space): Return early if
+ either the amount of desired space to be distributed or the
+ count of space nodes in the output line to distribute it among
+ is zero.
+
+ * tmac/tests/an_TH-repairs-ad-damage.sh: Update test to expect
+ space to be distributed differently.
+
+ Fixes <https://savannah.gnu.org/bugs/?61089> and
+ <https://savannah.gnu.org/bugs/?60673>.
+
+2021-09-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Skip core-dump-checking test if a core file already exists.
+
+ * src/roff/groff/tests/regression_savannah_59202.sh: Skip test
+ if a core dump is already present.
+
+2021-09-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #60189.
+
+ * src/roff/groff/tests/break_zero-length_output_line_sanely.sh:
+ Do it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2021-08-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Tweak diagnostic message.
+
+ * src/roff/troff/env.cpp (environment::environment): Use
+ terminology more rigorously in diagnostic.
+
+2021-08-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Fix code style nit.
+
+ * src/libs/libgroff/errarg.cpp (errprint): Replace `assert(0)`
+ with a meaningful predicate.
+
+2021-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Demote `need_space` to Boolean.
+
+ * src/libs/libgroff/error.cpp (do_error_with_file_and_line):
+ Demote local integer `need_space` and its assignments to `bool`.
+
+2021-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Boolify `font::load()` and `font::load_desc()`
+ return values.
+
+ * src/include/font.h (font::load, font::load_desc):
+ * src/libs/libgroff/font.cpp (font::load, font::load_desc): Do
+ it.
+
+2021-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (TRADITIONAL_CPP): Update `AC_MSG_CHECKING`
+ argument to refer to "pre-ISO C90 syntax" instead of a
+ "traditional" preprocessor. Call `AC_MSG_ERROR` (aborting
+ configuration) if the check (for pre-C90 transformation)
+ succeeds. We thus withdraw support for such superannuated
+ {"Reiser"} C preprocessors.
+
+2021-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Un-indirect token concatenation through macro.
+
+ * src/include/itable.h:
+ * src/include/ptable.h: Do it.
+
+2021-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Drop support for `TRADITIONAL_CPP`. This means a C
+ preprocessor that does not support the ANSI C89/ISO C90
+ token concatenation operator "##".
+
+ * src/include/itable.h:
+ * src/include/ptable.h: Do it.
+
+ * Makefile.am: Undocument preprocessor symbol.
+
+2021-08-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Drop `a_delete` preprocessor wrapper for the
+ `delete` operator. It has been rendered unnecessary by the
+ removal of support for ancient C++ compilers.
+
+ * src/include/lib.h (a_delete): Drop symbol definition.
+
+ * src/devices/grohtml/output.cpp (word::~word):
+ * src/devices/grohtml/post-html.cpp (char_block::char_block)
+ (assert_state::~assert_state, assert_state::add)
+ (assert_state::close, replace_negate_str):
+ * src/devices/grops/ps.cpp (ps_font::ps_font)
+ (subencoding::subencoding, ps_printer::define_encoding)
+ (ps_printer::encode_fonts):
+ * src/devices/grops/psrm.cpp (resource_manager::document_setup)
+ (resource_manager::supply_resource):
+ * src/devices/grotty/tty.cpp (tty_printer::tty_color)
+ (tty_printer::tty_printer, tty_printer::color_to_idx)
+ (tty_printer::add_char):
+ * src/include/itable.h (ITABLE(T)::~ITABLE(T))
+ (ITABLE(T)::define):
+ * src/include/ptable.h (PTABLE(T)::~PTABLE(T))
+ (PTABLE(T)::define):
+ * src/libs/libbib/index.cpp
+ (index_search_item::~index_search_item, make_index_search_item,
+ index_search_item_iterator::index_search_item_iterator,
+ index_search_item::get_tag, index_search_item::munge_filename,
+ index_search_item::search):
+ * src/libs/libbib/linear.cpp (bmpattern::~bmpattern)
+ (file_buffer::file_buffer, file_buffer::load)
+ (linear_searcher::linear_searcher)
+ (linear_searcher::~linear_searcher):
+ * src/libs/libbib/search.cpp
+ (search_list_iterator::search_list_iterator)
+ (search_item::search_item):
+ * src/libs/libdriver/input.cpp (IntArray::~IntArray)
+ (IntArray::append, StringBuf::~StringBuf, StringBuf::append)
+ (get_integer_arg, parse_x_command, do_file):
+ * src/libs/libdriver/printer.cpp (printer::printer)
+ (printer::load_font, text_file::~text_file, text_file::next)
+ (font::~font, font_widths_cache::~font_widths_cache)
+ (font:alloc_ch_index, font::extend_ch, font::compact)
+ (font::load_desc):
+ * src/libs/libgroff/fontfile.cpp (font::open_file):
+ * src/libs/libgroff/relocate.cpp (searchpath, searchpathext)
+ (set_current_prefix):
+ * src/libs/libgroff/searchpath.cpp (search_path::search_path)
+ (search_path::command_line_dir, search_path::open_file)
+ (search_path::open_file_cautious):
+ * src/libs/libgroff/string.cpp (sfree, srealloc)
+ (string::remove_spaces):
+ * src/libs/libgroff/symbol.cpp (symbol::symbol, concat):
+ * src/libs/libgroff/tmpfile.cpp (temp_init::temp_init)
+ (xtmpfile_list_init::~xtmpfile_list_init, xtmpfile):
+ * src/preproc/eqn/box.cpp (set_gfont, set_grfont, set_gbfont)
+ (box_list::append, box_list::~box_list):
+ * src/preproc/eqn/delim.cpp (make_delim_box)
+ (delim_box::~delim_box):
+ * src/preproc/eqn/eqn.ypp (number):
+ * src/preproc/eqn/lex.ypp (file_input::~file_input)
+ (argument_macro_input::~argument_macro_input):
+ * src/preproc/eqn/pile.ypp (matrix_box::~matrix_box)
+ (matrix_box::append):
+ * src/preproc/eqn/special.cpp (special_box::~special_box):
+ * src/preproc/eqn/text.ypp (set_char_type):
+ * src/preproc/html/pre-html.cpp (get_line, scanArguments):
+ * src/preproc/pic/object.cpp (output::~output)
+ (output::set_args, text_item::~text_item)
+ (object_spec::~object_spec, command_object::~command_object)
+ (line_object::~line_object):
+ * src/preproc/pic/pic.ypp (placeless_element, reset_variables)
+ (print_args, text_expr, object_spec, text, sprintf_args, path):
+ * src/preproc/refer/command.cpp (input_item::~input_item)
+ (input_item::peek_char):
+ * src/preproc/refer/label.ypp (lookup_label):
+ * src/preproc/refer/refer.cpp (store_citation, store_reference):
+ * src/preproc/tbl/main.cpp (format::add_rows, format::~format):
+ * src/preproc/tbl/table.cpp (block_entry::~block_entry)
+ (table::~table, table::allocate):
+ * src/roff/groff/groff.cpp (possible_command::~possible_command)
+ (possible_command::clear_name):
+ * src/roff/troff/column.cpp
+ ((justification_spec::~justification_spec)
+ (justification_spec::append):
+ * src/roff/troff/dictionary.cpp (dictionary::lookup):
+ * src/roff/troff/env.cpp (override_sizes, tab_stops::to_string)
+ (hyphen_word, hyphen_trie::insert_hyphenation):
+ * src/roff/troff/input.cpp (read_long_escape_name, token::next)
+ (do_get_long_name, temp_iterator::~temp_iterator)
+ (get_delim_name, pipe_source, read_string, pipe_output)
+ (system_request, open_mac_file, do_macro_source)
+ (do_register_assignment, do_string_assignment, read_draw_node)
+ (copy_mode_error):
+ * src/roff/troff/node.cpp (troff_output_file::set_font)
+ (troff_output_file::~troff_output_file, draw_node::is_tag)
+ (grow_font_table, font_family::~font_family)
+ (font_family::make_definite):
+ * src/utils/hpftodit/hpftodit.cpp (name_list::~name_list)
+ (read_map):
+ * src/utils/indxbib/indxbib.cpp (main, get_cwd):
+ * src/utils/tfmtodit/tfmtodit.cpp (tfm::~tfm, tfm::load): Port
+ uses of `a_delete` to `delete[]`.
+
+2021-08-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Drop `ad_delete` preprocessor wrapper for the
+ `delete` operator. It has been rendered unnecessary by the
+ removal of support for ancient C++ compilers.
+
+ * src/include/lib.h (ad_delete): Drop symbol definition.
+
+ * src/preproc/pic/object.cpp (graphic_object::print_text):
+ * src/preproc/refer/ref.cpp (reference::reference)
+ (reference::merge, reference::insert_field)
+ (reference::delete_field):
+ * src/preproc/tbl/main.cpp (format::add_rows): Port uses of
+ `ad_delete` to `delete[]`.
+
+2021-08-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_ARRAY_DELETE): Update `AC_MSG_CHECKING`
+ argument to refer to "ISO C++98" instead of "ANSI". Call
+ `AC_MSG_ERROR` (aborting configuration) if the check fails.
+
+2021-08-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Drop support for `ARRAY_DELETE_NEEDS_SIZE`.
+
+ * src/include/lib.h [ARRAY_DELETE_NEEDS_SIZE]: Drop preprocessor
+ conditional branch. This abandons support for certain pre-ISO
+ C++98 compilers. (According to a now-removed comment, unsized
+ array deletion was documented in "ARM", meaning _The C++
+ Annotated Reference Manual_, published in 1989.)
+
+ * Makefile.am: Undocument preprocessor symbol.
+
+2021-08-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Drop redefinition of `INT_MIN`.
+
+ * src/include/lib.h: Drop redefinition of `INT_MIN`. It was
+ motivated by a bug in the AT&T C++ compiler (cfront), version
+ 2.0, released in June 1989. Implementations have had 30 years
+ to get this right; assume that they have.
+
+ * PROBLEMS: Drop corresponding item.
+
+2021-08-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Drop long-dead `COOKIE_BUG` logic.
+
+ * src/libs/libgroff/new.cpp (operator new, operator delete):
+ Drop preprocessor conditional branches on the `COOKIE_BUG`
+ symbol. This was de-documented, and an autoconf check for its
+ necessity removed, way back in groff 1.10 (November 1995). It
+ was relevant only to GCC from versions 2.0 to 2.2.2 (all 1992).
+
+2021-08-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Refactor `font::scan_papersize()`.
+
+ * src/libs/libgroff/font.cpp (font::scan_papersize): Ensure
+ successful return value of `fgets()` before attempting to parse
+ string for paper format. Convert `test_file` to Boolean and
+ rename to `attempt_file_open`. Quiets GCC `-Wunused-result`
+ warning.
+
+2021-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Apply naming convention.
+
+ * tmac/tests/e_footnotes_work_with_columns.sh: Rename from...
+ * tmac/tests/e_footnotes-work-with-columns.sh: ...to this.
+ * tmac/tmac.am (tmac_TESTS): Update.
+
+2021-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an.tmac (IP): Make code more accessible by using a
+ Boolean operator rather than an arithmetic one (assembly
+ language programmers are comfortable with the interchangeability
+ of subtraction and comparison, but not everyone is).
+
+2021-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ groff(7): Document more escapes.
+
+ * man/groff.7.man (Escape short reference): Document
+ `\[charNNN]`, `\[uNNNN]`, `\[uNNNN_NNNN...]` escape sequences.
+ Revise descriptions of `\O0` and `\O1` escape sequences.
+ Document `\O2`, `\O3`, `\O4`, and `\O5` escape sequences.
+
+2021-08-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ groff(7): Fix bug in `\?` escape rendering.
+
+ * man/groff.7.man (ESC?): Fix bug in page-private macro: the
+ question mark that ends this uniquely-syntaxed escape sequence
+ was not shown with the mandatory escape character before it.
+ Problem dates back at least to commit 41b0e794, 19 February
+ 2007, but possiby to f790bc7a9, 6 January 2002.
+
+2021-08-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [docs]: Elaborate macro definition discussion.
+
+ Fixes <https://savannah.gnu.org/bugs/?57944>. Thanks to Dave
+ Kemper for the report.
+
+2021-08-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tests]: Make robust against $GROFF_TYPESETTER settings.
+
+ * src/roff/groff/tests/\
+ use_point_size_escape_with_single_digit_arg.sh:
+ * src/roff/nroff/tests/verbose_option_works.sh:
+ * tmac/tests/s_IP-indents-using-paragraph-type-size.sh: Export
+ an empty $GROFF_TYPESETTER to the environment.
+
+ Fixes <https://savannah.gnu.org/bugs/?60140>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2021-08-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Treat an empty $GROFF_TYPESETTER as unset.
+
+ * src/libs/libgroff/device.cpp (device_init::device_init): Test
+ both returned pointer from `getenv()` and, if that's not null,
+ the first character of the string for nullity before assigning
+ it to `device`.
+
+ Fixes <https://savannah.gnu.org/bugs/?61068>.
+
+2021-08-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff]: Rename font class member variable.
+
+ * src/include/font.h (font class): Rename `unscaled_charwidths`
+ member variable to `use_unscaled_charwidths`: since it is a
+ Boolean, make it read more like a logical predicate.
+
+ * src/libs/libgroff/font.cpp (font::get_width, font::load_desc):
+ * src/libs/libgroff/fontfile.cpp (font class): Update
+ initialization and assignments.
+
+2021-08-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (get_copy): Demote integer arguments
+ to Booleans and use Boolean literals for default values. Rename
+ `defining` to `is_defining`.
+ (get_char_for_escape_name, do_define_macro): Update call sites
+ that use non-default arguments to use Boolean literals and
+ comments to document what's being requested.
+
+2021-08-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (DOC_GROFF_ONLY): Stop running groff in unsafe
+ mode; no documents (in _this_ directory) appear to require it.
+
+2021-08-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grn]: Fix code style issues.
+
+ * src/preproc/grn/hgraph.cpp:
+ * src/preproc/grn/hpoint.cpp:
+ * src/preproc/grn/main.cpp:
+ * src/preproc/grn/hdb.cpp: Drop use of `register` storage class.
+
+ Fixes <https://savannah.gnu.org/bugs/?57733>. Thanks to Bjarni
+ Ingi Gislason for the report and a suggested patch.
+
+ * src/preproc/grn/hgraph.cpp (len, HGPrintElt, picurve):
+ * src/preproc/grn/hdb.cpp (DBRead): Wrap long lines.
+
+ * src/preproc/grn/hgraph.cpp: Rename function from
+ `Paramaterize` to `Parameterize`.
+ (HGCurve): Update call site.
+
+ * src/preproc/grn/main.cpp (add_file): Drop redundant cast in
+ `realloc()` call.
+ (conv, interpret): Use standard English in diagnostic messages.
+
+2021-08-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/grn/hdb.cpp: Perform more input validation.
+ Improve diagnostics by taking advantage of libgroff
+ infrastructure and tracking the line number of the input file.
+ Add global `lineno`.
+ (DBRead): Increment `lineno` after reading newlines from input.
+ Call `error_with_file_and_line()` instead of `error()`. If
+ input reports a negative length for the text (string) to follow
+ in the file, exit with a fatal diagnostic. Check for EOF while
+ reading text string.
+ (DBGetType): Convert `fprintf()` call for warning diagnostic to
+ `warning_with_file_and_line()`.
+ (DBRead, DBGetType): Add contextual information to diagnostic
+ messages.
+
+ Fixes <https://savannah.gnu.org/bugs/?61043>. Thanks to
+ Savannah user eqkws for the report.
+
+2021-08-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/grn/main.cpp (usage): Update usage message.
+
+2021-08-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grn]: Add and use `malloc()` wrapper.
+
+ * /src/preproc/grn/main.cpp (grnmalloc): New function takes
+ argument of `size_t` type and constant string argument to
+ describe what is being allocated. Return non-null pointer from
+ `malloc()`, otherwise call `fatal()`, describing what was being
+ allocated and the problem reported by the system.
+
+ * src/preproc/grn/hdb.cpp (DBCreateElt):
+ * src/preproc/grn/hpoint.cpp (PTMakePoint):
+ * /src/preproc/grn/main.cpp (main, interpret): Migrate
+ `malloc()` callers to `grnmalloc()`.
+
+2021-08-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/grn/hdb.cpp (DBRead): Check return value of
+ `sscanf()` and call `fatal()` if no conversions succeeded. The
+ blithe discard of a useful return value is bad enough, but this
+ one took place inside a do-while such that it could loop
+ forever trying fruitlessly to parse two doubles out of strings
+ that didn't contain them (the loop never checked the EOF status
+ of the file stream from which it was reading, and relied on
+ `fgets()` to keep advancing the stream pointer). Discovered
+ while root-causing Savannah #61043.
+
+2021-08-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Resolve compiler warnings relating to format string security and
+ ISO C++98 conformance.
+
+ * src/preproc/eqn/delim.cpp (define_extensible_string):
+ * src/preproc/pic/pic.ypp (do_sprintf): Use #pragma to silence
+ GCC "format-nonliteral" warning and explain why our usage is
+ safe in a comment.
+
+ * src/preproc/preconv/preconv.cpp (detect_file_encoding): Use
+ `l` modifier to `%u` `fprintf()` conversion instead of `z`, and
+ cast return values of `size_t` to unsigned long; "ISO C++98
+ does not support the ‘z’ gnu_printf length modifier" (it doesn't
+ support `ll` either). N.B. this is debugging output only.
+
+ * src/roff/groff/groff.cpp (synopsis):
+ * src/roff/troff/input.cpp (usage): Repeat variadic argument for
+ `%s` conversion in `fprintf()` call because "ISO C++98 does not
+ support %n$ operand number formats".
+
+ * src/roff/troff/env.cpp: Initialize adjustment and hyphenation
+ mode enums without commas at the end of the enumeration lists.
+
+2021-08-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Clean up the interface between `an-footer` and `BT`, and
+ HTML header and footer suppression generally. Move
+ responsibility for checking the `ps4html` register from the
+ latter to the former. This is not something a `BT` redefiner
+ {see groff_man(7)} should have to worry about.
+
+ * tmac/an.tmac (BT): Drop test of `ps4html` register and early
+ return.
+ (an-header, an-footer): Return immediately if
+ `an-suppress-header-and-footer` is true. Remove conditional on
+ `an-is-output-html`.
+ (initialization): Define `an-suppress-header-and-footer`
+ register; true if `an-is-output-html` is true, or if `ps4html`
+ is defined.
+
+2021-08-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (get_resolution): Unbrace a
+ single-statement `while` loop per prevailing coding style. Add
+ comments noting how we aren't parsing DESC files _precisely_ as
+ our documentation specifies.
+
+2021-08-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Convert font class `int` members to `bool` where appropriate.
+
+ * src/include/font.h (font class): Demote integers to Booleans
+ and use Boolean literals where possible. Rename some member
+ variables to look like logical predicates.
+ - contains()
+ - is_special()
+ - has_ligature()
+ - tcommand -> has_tcommand
+ - unscaled_charwidths
+ - pass_filenames
+ - use_charnames_in_special
+ - is_unicode
+ - special (private)
+ * src/libs/libgroff/font.cpp (font::font): Construct object
+ using Boolean literal.
+ (font::contains):
+ (font::is_special):
+ (font::has_ligature): Convert return type to `bool`.
+ (font::load):
+ (font::load_desc): Assign to member variables using Boolean
+ literals.
+ * src/libs/libgroff/fontfile.cpp: Initialize appropriate globals
+ using `bool` type and Boolean literals.
+ * src/roff/troff/troff.h:
+ * src/roff/troff/input.cpp (main):
+ * src/roff/troff/node.cpp (troff_output_file::put_char_width):
+ Rename `tcommand_flag` to `device_has_tcommand` to suggest a
+ logical predicate, and to emphasize the formatter's concern with
+ what the output device can accept in the intermediate output
+ language.
+ * src/roff/troff/input.cpp: Initialize `device_has_tcommand`
+ global using `bool` type and Boolean literal.
+
+2021-08-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Clarify breadth of application of `ll` macro.
+
+ * doc/meref.me: Document application of .ll macro only to the 3
+ environments that me(7) uses, not any the user might create.
+ * tmac/e.tmac (@C, xl, ll): Update comments.
+
+ Fixes <https://savannah.gnu.org/bugs/?55060>.
+
+2021-08-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #58736.
+
+ * tmac/tests/e_footnotes_work_with_columns.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-08-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (bc): Fix problem with multiple columns on long
+ pages. Space to the next page location trap, not 24 inches.
+ Thanks to Dave Kemper and Bjarni Ingi Gislason for help tracking
+ this bug down.
+
+ Fixes <https://savannah.gnu.org/bugs/?55081>.
+
+2021-08-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #55081.
+
+ * tmac/tests/e_columns-work-on-long-pages.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-08-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Localization): Add section.
+
+2021-08-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/cs.tmac:
+ * tmac/de.tmac:
+ * tmac/fr.tmac:
+ * tmac/it.tmac:
+ * tmac/sv.tmac: Update ms package localization to use an
+ appropriate hyphenation mode for the `HY` register (the
+ mode for the pattern files, plus 2 as is traditional in ms).
+
+2021-08-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac (1c): Place comment escape sequence immediately
+ after macro argument. (When redefining a request, one needs to
+ remember that request arguments are not parsed exactly as macro
+ arguments are.) Quiets "-w tab" warning.
+
+2021-08-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Fix misleading documentation claim; gremlin(1) pictures
+ cannot be included directly; they must be preprocessed with
+ grn(1).
+
+ * doc/meref.me:
+ * tmac/groff_me.7.man: Replace "gremlin" with "grn".
+
+2021-08-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_me.7.man: Document `n1` and `n2` macros.
+
+2021-08-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [me]: Fix PS/n1 combination diagnostic spew and apparent logic
+ error.
+
+ * tmac/e.tmac (@h): Place comment escape sequence immediately
+ after macro argument. (When redefining a request, one needs to
+ remember that request arguments are not parsed exactly as macro
+ arguments are.)
+ (n2): Prefix with `do` requests using long register names.
+ (n2): Add macro-local register `|l` to store length of first
+ argument. Don't attempt to extract a substring beyond the
+ bounds of its source, which produces a warning diagnostic.
+ (&&): Define no-op macro for use as end macro in nested macro
+ definition.
+ (PS): Fix unbalanced-else diagnostic by changing `if` to `ie`.
+ (PS): Initialize `PS_nm_cnt` register to 0 instead of relying on
+ implicit definition.
+ (PS): Prefix with `do` definition of long macro name.
+ (PS): Indent call of end macro.
+ (PS): Add comment after escaped space.
+ (PS, PF): Prefix with `do` call of long macro name.
+
+ Fixes <https://savannah.gnu.org/bugs/?61019>.
+
+2021-08-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl (do_line): Recognize `n1` and `n2` as
+ characteristic me(7) macros.
+
+2021-08-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_me.7.man: Document GF, IE, IF, IS, and PF macros.
+
+2021-08-08 Dave Kemper <saint.snit@gmail.com>
+
+ * tmac/e.tmac: Rename `PE` to `PF` but remove vertical spacing.
+ (PE): New `PE` calls `PF` and then spaces as old `PE` did.
+
+ Fixes <https://savannah.gnu.org/bugs/?60479>.
+
+2021-08-06 Dave Kemper <saint.snit@gmail.com>
+
+ * doc/meref.me: Improve documentation of image-inclusion macros.
+
+ Fixes <https://savannah.gnu.org/bugs/?60478>.
+
+2021-08-06 Dave Kemper <saint.snit@gmail.com>
+
+ GNU pic recognizes two possible endings of a pic block: .PE or
+ .PF. This fact was documented in doc/pic.ms but not in the pic
+ man page. The minimal pic implementation provided by pic.tmac
+ also did not include a .PF definition.
+
+ * src/preproc/pic/main.cpp (main): Add dummy definition of `PF`
+ macro.
+ * tmac/pic.tmac (PF): Add macro that performs indentation only.
+ (PE): Call PF for indentation.
+
+ * doc/pic.ms (Interface to [gt]roff/How Scaling is Handled):
+ * src/preproc/pic/pic.1.man (Description, Options): Mention `PF`
+ in addition to `PS` and `PE`.
+
+ Fixes <https://savannah.gnu.org/bugs/?60504>.
+
+2021-08-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/refer-ms.tmac:
+ * tmac/s.tmac (fn@init, @PP): Rename strings
+ `fn@sup-{start,end}` to `fn@mark-{start,end}`. This makes it
+ more clear that the strings are brackets for the footnote
+ marker, and not so much to do with the note text. Further, in
+ nroff mode, they aren't superscripts at all, but bracket glyphs.
+
+2021-08-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/refer.1.man (Examples): Add section.
+
+ Addresses part of <https://savannah.gnu.org/bugs/?57667>.
+
+2021-08-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/refer-ms.tmac: Use `fn@sup-{start,end}` instead of
+ `par@sup-{start,end}` when setting refer(1) citation labels.
+ This improves the appearance of the default labels on nroff
+ devices. Continues commit caeede07, 1 May.
+
+2021-08-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tman/an-ext.tmac (EX, EE): Stop manipulating hyphenation.
+ It's redundant since disabling fill mode already prevents
+ automatic breaking, and therefore automatic hyphenation.
+ * tmac/groff_man.7.man.in (Description/Document structure
+ macros) <EX, EE>: Update documentation.
+
+2021-08-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Update authorship credits. I appear
+ to have removed or refactored all of the "device" (recte: macro
+ package) inference logic adapted from Ralph Corderoy's grog.sh;
+ see commit 3617f42048f54cc3f0adc282ee3b9e481c75ebd5, 13 June
+ 2014.
+
+2021-07-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Refactor through relocation and
+ renaming. Move several global objects into subroutines.
+ - `@request` -> `&do_line`
+ - `@macro_ms`, `@macro_man`, `@macro_man_or_ms` ->
+ `&infer_man_or_ms_package`
+ - `@main_package` -> `&construct_command`
+ Rename some objects for clarity.
+ - `%Groff` -> `%score`
+ - `@filespec` -> `$input_file`
+ Delete unused object.
+ - `@standard_macro`
+ Add comments.
+
+2021-07-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl (do_line): When matching macro/request
+ names, accept any non-whitespace character (Perl: \S) instead of
+ just a word-constituent character (Perl: \w), since roff
+ identifiers can contain unusual characters (refer(1) and
+ groff_me(7) illustrate some real-world cases).
+
+2021-07-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Refactor macro package inference.
+ - Stop manually populating `Groff` hash. (It's itching for a
+ rename.)
+ - Stop calling now-dead subroutine `infer_macro_packages`.
+ (do_line): Always store the names of all macros called to the
+ `Groff` hash, incrementing it. Now it's a proper scoreboard.
+ Populate `inferred_main_package` from here upon encountering
+ characteristic (i.e., uniquely named) macros of each package.
+ Bug fix: drop "SP" from list of characteristic mom(7) macros;
+ it's shared with mm(7).
+ (infer_man_or_ms_package): Update comment. Return 0 (false) if
+ document appears to be "raw", using no full-service macro
+ package.
+ (infer_macro_packages): Delete; do_line() does this work.
+
+2021-07-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Refactor preprocessor inference.
+ - Add new list, `inferred_preprocessor`.
+ - Drop preprocessor-related keys from `Groff` hash.
+ - Drop scalar `inside_tbl_table`.
+ (do_line): Set up hash `preprocessor_for_macro`. Detect
+ preprocessor macros the way the preprocessors do, explained in a
+ comment. Respect AT&T compatibility mode when doing so. Build
+ list of inferred preprocessors. This replaces the extensive and
+ gaseous series of `if` statements that manipulated the `Groff`
+ hash.
+ (infer_preprocessors): Completely replace. Set up a hash
+ `option_for_preprocessor` mapping preprocessor names to groff
+ options (where applicable). Append to `command` and
+ `preprocessor` lists as appropriate. Sort the preprocessor
+ options so they don't move around in the argument list depending
+ on the order of their macros' appearance in the input.
+
+ * src/utils/grog/tests/smoke-test.sh: Update test cases to
+ expect preprocessor options to show up in sorted order.
+
+2021-07-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Drop dead code. Delete global
+ hash `preprocs_tmacs`, unused since commit b0de53c9, 30 June.
+
+2021-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Fix code nit.
+
+ * src/preproc/html/pre-html.cpp (get_image_generator):
+ Type-qualify `keyword_len` as `const` to encourage the compiler
+ to compute this value (the length of a string literal) at build
+ time.
+
+2021-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Slightly refactor.
+
+ * src/roff/troff/node.cpp: Add static `image_filename_len` to
+ store length of cached image file name, so we don't wastefully
+ recompute its length every time one is re-used.
+ (suppress_node::tprint): Compute image file name length only
+ when saving a new image file name. Use saved length in later
+ expressions.
+ (min): Drop unused inline function.
+
+2021-07-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Fix regression (breaking important pdfmark/pdfroff
+ features) caused by my commit
+ e876d4bfd193abb9a7d1fb6e76519349bded482a, 27 July. An empty
+ image file name is in fact semantically valid when writing a
+ bounding box; pdfmark uses such boxes to frame hyperlinks.
+ Avoid null pointer dereference by initializing `image_filename`
+ to an empty string literal. Thanks to Tadziu Hoffman and Keith
+ Marshall for their patient explanations.
+
+2021-07-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Refactor some internal functions.
+
+ * src/roff/troff/node.cpp: Rename two functions that have only
+ one caller.
+ - get_reg_int -> get_register
+ - get_reg_str -> get_string
+ We now have:
+ (get_register, get_string): Use `assert()` aggressively because
+ these are deeply internal and validation is imperative. Get rid
+ of diagnostic messages (one of which perpetuated the dubious
+ "number register" nomenclature) accordingly.
+ (fetch_register): Also rename `prev_value`, misleadingly
+ specific and seemingly copy-and-pasted out of a context where an
+ auto-increment or -decrement might have been applied. It's just
+ the `value`.
+ (suppress_node::tprint): Update call site.
+
+2021-07-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Refactor `get_value` member functions. Given their
+ names and popular "getter/setter" paradigms from many OO
+ languages, the return type is misleading. Change it from `int`
+ to `bool` since it returns only a success/failure status and
+ modifies an argument (passed by reference) to deliver the
+ requested data.
+
+ * src/roff/troff/reg.h (reg, variable_reg):
+ * src/roff/troff/div.cpp (page_offset_reg, page_length_reg)
+ (vertical_position_reg, high_water_mark_reg)
+ (distance_to_next_trap_reg, page_number_reg, no_space_mode_reg):
+ * src/roff/troff/env.cpp (int_env_reg, vunits_env_reg)
+ (hunits_env_reg, horizontal_place_reg):
+ * src/roff/troff/input.cpp (writable_lineno_reg):
+ * src/roff/troff/reg.cpp (reg, number_reg, variable_reg): Update
+ class and member function definitions to reflect the new type.
+ Update member function definitions to return appropriate Boolean
+ literals instead of 0 and 1.
+
+2021-07-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Fix Savannah #60981. Refactor device description
+ file handling and make it more robust. Make pre-grohtml's
+ -F option work as documented and honor device description file
+ semantics documented in groff_font(5).
+
+ * src/preproc/html/pre-html.cpp: Store partial filespecs of HTML
+ and PostScript device files in constant strings.
+ (get_resolution): Initialize `res` to zero. Only `free()` the
+ pointer `pathp` if `open_file()` succeeded (populating it).
+ Stop checking for valid `sscanf()` conversions of an integer to
+ store in `res`, and don't return early. Instead process the
+ whole DESC file; per our Texinfo manual and groff_font(5),
+ "Later entries in the file ... override previous values."
+ (get_image_generator): Add new function, paralleling
+ `get_resolution()`, replacing open-coded logic in `main()`.
+ Only the body of the `while` loop significantly differs.
+ Instead of using `sscanf`, process the input character by
+ character matching the keyword and {1,} spaces or tabs
+ after it. Whatever follows in `linebuf` must be the program
+ name.
+ (imageList::createPage): Add `assert()` to cause failure if an
+ empty image generator program gets this far, because it creates
+ repeated messes if it does. (Something isn't checking exit
+ statuses.)
+ (main): Condense `image_gen` collection to a function call, a
+ null pointer check, and a fatal diagnostic. Add a sanity check
+ and a fatal diagnostic if the PostScript resolution is garbage.
+ {It's initialized to -1 and `get_resolution()` will return 0 if
+ it doesn't find one.}
+
+ Fixes <https://savannah.gnu.org/bugs/?60981>.
+
+2021-07-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Delete or rename `debug` symbols to avoid clash with
+ new `debug` function in libgroff.
+
+ * src/preproc/html/pre-html.cpp: Update a comment to refer to
+ "debugging" mode. Rename static global from `debug` to
+ `debugging`.
+ (html_system, imageList::createPage, imageList::createImage,
+ print_args, char_buffer::do_html, char_buffer::do_image,
+ scanArguments): Update uses of static global.
+
+ * src/preproc/html/pushback.cpp:
+ * src/preproc/html/pushback.h: Delete unused `debug` member
+ variable.
+
+2021-07-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/nroff/nroff.sh: Fix straggling use of `$1`, which
+ might not have a clear meaning in some shells after being
+ shifted (what if we just shifted the last argument?). Also
+ `continue` after processing a (groff) option argument, as we
+ should make no attempt to parse it.
+
+2021-07-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_suppress): Recast diagnostic
+ messages for clarity, to communicate in terms of what the
+ escape sequence _is_, and to quote literals expected as input.
+ * src/roff/troff/node.cpp (suppress_node::tprint): Recast
+ diagnostic to prevent misinterpretation of image "description"
+ as being HTML IMG tag alt text or something like that.
+ Unfortunately, the new language speaks in terms of internal
+ implementation details ("grohtml-info"), but at least that way
+ it's easier for a user to decide if they care about it.
+
+2021-07-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Avoid using sprintf() with user-controlled format
+ string.
+
+ * src/preproc/html/pre-html.cpp (makeFileName): Add comment
+ noting need for implementation synchrony between this function,
+ which generates \O5 escape sequences, and troff's
+ suppress_node::tprint member function, which interprets them.
+ * src/roff/troff/node.cpp: Rename 2 static globals for clarity.
+ - `last_image_filename` -> `image_filename`
+ - `last_image_id` -> `subimage_counter`
+ (suppress_node::tprint): Set up the buffer for image file name
+ to be written using a constant rather than an embedded literal.
+ Unconditionally initialize the buffer with a string terminator,
+ so there is no chance of a read from uninitialized storage.
+ Drop unused code involving `tem`. Drop stale comments. Clarify
+ comment: an `image_filename` doesn't _always_ contain a format
+ string, only sometimes. Replace use of `sprintf` with manual
+ construction of a new image filename string. There are two
+ cases, one where a format string {presently "%d"} is present,
+ and one where it is not. If it is present, locate it
+ {`percent`}. This means a limited/bounded image ("subimage") is
+ being processed; increment the subimage counter. Write a new
+ image file name preserving the parts before and after "%d" (the
+ "prefix" and "suffix", and replacing only the middle, using
+ `sprintf` with the subimage counter and the (string literal)
+ format. Be mindful of string bounds and memory allocation,
+ issuing diagnostics or aborting as necessary. If the image file
+ name does _not_ contain a format string, but needs only to be
+ copied, do that (`strcpy`), again instead of using `sprintf`.
+
+ Fixes <https://savannah.gnu.org/bugs/?60977>.
+
+2021-07-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Fix Savannah #60971.
+
+ * src/preproc/html/pre-html.cpp (makeFileName): Consistently put
+ a dash at the end of `macroset_template` whether the image file
+ name stem is user-supplied or the default. Stop adding the dash
+ before the image number in `image_template` instead. This makes
+ the image file name format reliable whether the image needs to
+ be subdivided (eqn) or not (tbl).
+
+ Fixes <https://savannah.gnu.org/bugs/?60971>.
+
+2021-07-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Reduce noise to standard error stream.
+
+ * src/preproc/html/pre-html.cpp (imageList::createImage): Fix
+ apparent oversight: `EXE_EXT` was not being applied to the
+ second of three commands being run in a pipeline (did Windows
+ users notice?). Also issue (undocumented!) `-quiet` option to
+ `pnmtopng` to shut up its commentary about counting colors.
+
+2021-07-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Stop discarding standard error output.
+
+ * src/preproc/html/pre-html.cpp (html_system): Stop sending the
+ standard error stream to /dev/null; this just makes debugging
+ harder, and doesn't produce much more output for well-formed
+ input documents. Rename `save_stdout` to `saved_stdout`.
+
+2021-07-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Fix misspelled variable.
+
+ * src/preproc/html/pre-html.cpp: Rename `IMAGE_BOARDER_PIXELS`
+ to `IMAGE_BORDER_PIXELS`.
+
+2021-07-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [libgroff, troff]: Add debug diagnostic level.
+
+ * src/include/error.h: Declare functions
+ `debug_with_file_and_line` and `debug`.
+ * src/libs/libgroff/error.cpp: Add `DEBUG` to enum `error_type`.
+ (do_error_with_file_and_line): Add case for `DEBUG` in switch.
+ (debug, debug_with_file_and_line): Add new functions.
+
+ Do the same for troff since it has a private implementation of
+ the diagnostic functions (thanks to `output_warning()`).
+
+ * src/roff/troff/input.cpp: Add `DEBUG` to enum `error_type`.
+ (do_error_with_file_and_line): Add case for `DEBUG` in switch.
+ (debug, debug_with_file_and_line): Add new functions.
+
+2021-07-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/hpftodit/hpftodit.cpp (hp_msl_to_ucode_name)
+ (unicode_to_ucode_name): Hush "format nonliteral" compiler
+ warnings by using a preprocessor-defined string literal as an
+ sprintf() format string instead of a C++ variable that just
+ compared identically to the same thing.
+
+2021-07-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/hpftodit/hpftodit.cpp (show_symset): Prevent
+ sprintf() from overunning a static buffer. Thanks to Bjarni
+ Ingi Gislason for the report. Resize buffer to be large enough
+ to accommodate a 64-bit unsigned int type formatted as decimal.
+ Also add assert() before the sprintf() to abort if the int type
+ is even larger than that. Use "%u" conversion instead of "%d"
+ since the quantity is unsigned.
+ (hp_msl_to_ucode_name): Similar, but for a signed int.
+ (unicode_to_ucode_name): Similar, but for a signed int formatted
+ as (unsigned) hexadecimal.
+
+ Fixes <https://savannah.gnu.org/bugs/?60964>.
+
+2021-07-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/nroff/nroff.sh: Refactor, mostly by relocation. Move
+ locale character set inference logic so that we only run it if
+ we have to (`-T` option was invalid or not given and
+ `GROFF_TYPESETTER` was not set in the environment or invalid).
+ Initialize `T` variable as empty.
+
+2021-07-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/nroff/nroff.sh: Use Version 7 Unix sh-compatible form
+ of parameter expansion; per the GNU Autoconf manual[1], "[o]ld
+ BSD shells, including the Ultrix sh, don't accept the colon for
+ any shell substitution, and complain and die." This is also the
+ form of such substitutions used elsewhere in the script, so they
+ should be mutually consistent.
+
+ [1] https://www.gnu.org/software/autoconf/manual/autoconf-2.60/\
+ html_node/Shell-Substitutions.html
+
+2021-07-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/nroff/nroff.sh: Slightly refactor. Rename formerly
+ unused loop index variable from `i` to `arg` to leverage it in a
+ later diagnostic message without a separate definition. Inside
+ the loop, expand `arg` instead of positional parameter 1, the
+ meaning of which is less obvious after the parameter list is
+ shifted by the new `is_option_argument_pending` logic (commit
+ 2b955c57, 20 July).
+
+2021-07-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.1.man (Options) <-S>: Fix error: `-S`
+ sets safer mode (redundantly) but is not passed to pic and troff
+ as was claimed.
+
+2021-07-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/number.cpp (parse_term): Tweak diagnostic
+ messages. When a left operand to a binary operator is empty,
+ report the operator in question (helpful for string
+ interpolations in complex expressions). When handling input
+ scaling indicators, drop word "this" from "this context", since
+ the parser's context might not be clear from a file name and
+ line number. Say "scaling indicator" instead of "scale
+ indicator".
+ (parse_expr, parse_term): Rename function parameter from
+ `scale_indicator` to `scaling_indicator`.
+
+2021-07-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (define_color): Tweak warning
+ diagnostics for clarity. Only one value is expected when
+ defining a color in the `gray` color space. Quote recognized
+ color space names when complaining of an unknown one.
+
+2021-07-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [nroff]: Pass a supplied `-c` option to groff. While at present
+ this does little more than `-P-c` already achieves, that might
+ not be true forever. Further, there is a distinction between
+ ignoring color-related requests in groff input documents and
+ ignoring color-related commands in device-independent output.
+ This distinction would make it unwise to adapt `-c` to any other
+ purpose in nroff in the future.
+
+ * NEWS: Update item from commit dd725dce, 10 February 2020.
+ * src/roff/nroff/nroff.sh: Pass `-c` option to groff in addition
+ to synthesizing a `-P-c` option (for grotty) when it is seen.
+ * src/roff/nroff/nroff.1.man (Options): Document `-c` as an
+ option recognized by troff(1).
+
+2021-07-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [nroff]: Support space between option flags and their arguments.
+
+ * src/roff/nroff/nroff.sh: Add new `is_option_argument_pending`
+ flag to add an additional state to the option parser. Set it if
+ an argument-requiring option is encountered with no abutting
+ argument. If it is set when a new argument is encountered,
+ absorb the argument into the groff option list and clear the
+ flag. Modernize script in a couple of other ways.
+ - Exit with status 2 upon usage errors so that this condition
+ is easily distinguished from a groff abort (which exits with
+ status 1).
+ - Test shell variables for non-nullity with test(1) -n
+ operator instead of a string comparison.
+ * src/roff/nroff/tests/verbose_option_works.sh: Test correct
+ construction of groff command using this input form.
+ * src/roff/nroff/nroff.1.man (Options): Add spaces between
+ option flags and option arguments. Sync metasyntactic variable
+ names with groff(1) while we're at it.
+ (Description): Drop sentence warning of whitespace prohibition.
+ (Exit status): Add new section.
+
+ Fixes <https://savannah.gnu.org/bugs/?60943>.
+
+2021-07-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (main): Emit error diagnostic if `-d`
+ or `-r` option is given a malformed argument. This prevents a
+ string or register with an empty name from being created.
+
+ Fixes <https://savannah.gnu.org/bugs/?60935>.
+
+2021-07-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/nroff/nroff.sh:
+ * src/roff/troff/input.cpp (usage): Use "dev" as metasyntactic
+ variable name for -T option argument to achieve consistency with
+ our other documentation.
+
+2021-07-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [groff]: Comment out vestiges of gideal support. It would be
+ lovely to have, but no free (and GPL-compatible) implementation
+ has showed up after decades of waiting. Production of the
+ original was a Ph.D. thesis. Excited by de Moivre's theorem?
+ Take a stab at it.
+
+ * src/roff/groff/groff.cpp (main): Comment out effect of `-J`
+ option. It remains recognized, but silently ignored (instead of
+ attempting to execute a nonexistent preprocessor).
+ (synopsis): Add comment reminding us to document the option if
+ we ever get the support.
+ (help): Comment out documentation of option.
+
+2021-07-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [[gnt]roff]: Make usage messages more accurate.
+
+ * src/roff/groff/groff.cpp (synopsis): Drop `-h` and `-v` from
+ normal operation synopsis. Sort options in en_US lexicographic
+ order. Tighten presentation of alternate usage forms.
+ (help): Document longer forms of `-d` and `-r`.
+ * src/roff/nroff/nroff.sh: Report `$prog` instead of "nroff"
+ literal. Refer to `-P` option argument as "arg" instead of
+ "opt", for consistency with groff usage message. Use opposite
+ case from option letter for option argument.
+ * src/roff/troff/input.cpp (usage): Put brackets around options.
+ Sort options in en_US lexicographic order. Drop `-v` from
+ normal operation synopsis. Use opposite case from option letter
+ for option argument. Put operand name in capitals. Set valid
+ usage forms on one physical line each (see 89648fb4, 5 June).
+ Add synopsis line for alternate usage forms.
+
+2021-07-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Refactor environment initialization, switching, and
+ copying.
+
+ * src/roff/troff/env.cpp: Rename struct `env_list` to
+ `env_list_node` since it describes a node of a singly-linked
+ list. Remove constant `NENVIRONMENTS` and array `env_table`.
+ Add static symbol `default_environment_name` to replace string
+ literal.
+ (init_environments): Stop initializing `curenv` through
+ `env_table`. Use `default_environment_name` for that
+ initialization and add the default environment to
+ `env_dictionary`.
+ (environment_switch): Simplify. Shorten "dummy environment"
+ diagnostic message. Stop creating an integer-named
+ environment inside the `env_table` array, only falling through
+ to use the `env_dictionary` if the named environment is not a
+ valid integer or if the array is full. Instead use
+ `env_dictionary` always. Drop no longer needed `pop`
+ quasi-Boolean integer with extra state to suppress environment
+ stack underflow errors. Instead report the error if underflow
+ occurs, regardless of any other circumstance.
+ (environment_copy): Simplify. Stop searching the `env_table`
+ array for an environment to copy from, only falling through to
+ use the `env_dictionary` if the named environment is not a valid
+ integer or if the array is full. Instead search
+ `env_dictionary` always. Emit "no environment specified to copy
+ from" diagnostic only if the `evc` request is given no argument.
+ If the source environment to copy from is given but not found,
+ emit a new diagnostic naming the nonexistent environment. Fix
+ bug: stop returning early if no copying could be done; instead
+ fall through to the end of the function, which calls
+ `skip_line()` and prevents anything on the remainder of the
+ {invalid} control line from being interpreted. Problem dates
+ back to commit da3b7137, 6 March 2000 (groff 1.16).
+
+ Fixes <https://savannah.gnu.org/bugs/?60913>.
+
+2021-07-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/evc_produces_no_output_if_invalid.sh:
+ Regression-test Savannah #60913.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2021-07-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Update English hyphenation patterns.
+
+ * NEWS: Add item.
+ * tmac/hyphen.en: Update file using `hyph-en-us.tex` patterns
+ file from the TeX hyph-utf8 project.
+ * tmac/hyphenex.en: Remove explicit hyphenations for words that
+ no longer require them when using the new patterns. Add one
+ item scraped from an erratum comment in hyphen.en
+ {"dem-o-crat"}.
+
+ The new patterns likely _will_ change the automatic hyphenation
+ break points of your English documents. Here is a sample of
+ affected words found within groff's own documentary corpus.
+
+ OLD NEW
+ === ===
+ ar‐range‐ment arrange‐ment
+ col‐umns columns
+ con‐struc‐ted con‐structed
+ cus‐tom‐ized cus‐tomized
+ def‐i‐ni‐tions de‐f‐i‐n‐i‐tions
+ der‐i‐va‐tions de‐riva‐tions
+ hy‐phen‐a‐tion hy‐phen‐ation
+ ma‐te‐rial ma‐te‐r‐ial
+ Mi‐cro‐soft Mi‐crosoft
+ pipe‐lines pipelines
+ post‐pro‐ces‐sors post‐proces‐sors
+ pro‐cessed processed
+ pro‐cesses processes
+ spa‐ces spaces
+ Wer‐ner Werner
+
+2021-07-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Add unit test for `substring` request.
+
+ * src/roff/groff/tests/substring_works.sh: Do it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2021-07-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Remove compatibility mode save registers after using
+ them.
+
+ * tmac/an.tmac:
+ * tmac/andoc.tmac:
+ * tmac/cp1047.tmac:
+ * tmac/devtag.tmac:
+ * tmac/ec.tmac:
+ * tmac/fallbacks.tmac:
+ * tmac/latin1.tmac:
+ * tmac/latin2.tmac:
+ * tmac/latin5.tmac:
+ * tmac/latin9.tmac:
+ * tmac/papersize.tmac:
+ * tmac/pdfpic.tmac:
+ * tmac/psold.tmac:
+ * tmac/pspic.tmac:
+ * tmac/trace.tmac:
+ * tmac/unicode.tmac: Do it.
+
+ * doc/groff.texi (Implementation Differences):
+ * man/groff_diff.7.man (Implementation Differences): Illustrate
+ doing so in relevant examples.
+
+2021-07-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/troffrc: Load the English localization file `en.tmac` by
+ default, instead of dealing with hyphenation language and
+ patterns directly in this file. (This also replaces a
+ localization-determination mechanism that was never part of a
+ groff release.)
+
+ * src/roff/groff/tests/initialization_is_quiet.sh:
+ * src/roff/groff/tests/localization_works.sh: Rewrite to use
+ explicit macro file loading localization mechanism.
+
+2021-07-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Move core man(7) implementation to an.tmac.
+
+ * tmac/an.tmac: Delete andoc-sourcing wrapper.
+
+ * tmac/an-old.tmac: Rename...
+ * tmac/an.tmac: ...to this.
+
+ * tmac/tests/an-old_AT-and-UC-footer-saved-and-restored.sh:
+ * tmac/tests/an-old_CS-register-off.sh:
+ * tmac/tests/an-old_CS-register-on.sh:
+ * tmac/tests/an-old_CS-register-unspecified.sh:
+ * tmac/tests/an-old_CT-register-off.sh:
+ * tmac/tests/an-old_CT-register-on.sh:
+ * tmac/tests/an-old_CT-register-unspecified.sh:
+ * tmac/tests/an-old_FT-bad-value-should-not-trash-titles.sh:
+ * tmac/tests/an-old_LL-init-sanely.sh:
+ * tmac/tests/an-old_TH-repairs-ad-damage.sh:
+ * tmac/tests/an-old_TH-repairs-hy-damage.sh:
+ * tmac/tests/an-old_TS-do-not-keep-tables-when-cR-set.sh:
+ * tmac/tests/an-old_X-register-works.sh:
+ * tmac/tests/an-old_avoid-two-font-denial-of-service.sh:
+ * tmac/tests/an-old_no-break-after-short-paragraph-tags.sh:
+ * tmac/tests/an-old_page-footers-present.sh:
+ * tmac/tests/an-old_page-header-has-current-data.sh:
+ * tmac/tests/an-old_title-abbreviation-works.sh: Rename...
+
+ * tmac/tests/an_AT-and-UC-footer-saved-and-restored.sh:
+ * tmac/tests/an_CS-register-off.sh:
+ * tmac/tests/an_CS-register-on.sh:
+ * tmac/tests/an_CS-register-unspecified.sh:
+ * tmac/tests/an_CT-register-off.sh:
+ * tmac/tests/an_CT-register-on.sh:
+ * tmac/tests/an_CT-register-unspecified.sh:
+ * tmac/tests/an_FT-bad-value-should-not-trash-titles.sh:
+ * tmac/tests/an_LL-init-sanely.sh:
+ * tmac/tests/an_TH-repairs-ad-damage.sh:
+ * tmac/tests/an_TH-repairs-hy-damage.sh:
+ * tmac/tests/an_TS-do-not-keep-tables-when-cR-set.sh:
+ * tmac/tests/an_X-register-works.sh:
+ * tmac/tests/an_avoid-two-font-denial-of-service.sh:
+ * tmac/tests/an_no-break-after-short-paragraph-tags.sh:
+ * tmac/tests/an_page-footers-present.sh:
+ * tmac/tests/an_page-header-has-current-data.sh:
+ * tmac/tests/an_title-abbreviation-works.sh: ...to these.
+
+ * tmac/tmac.am (TMACNORMALFILES): Remove an-old.tmac.
+ (tmac_TESTS): Reflect renames of test files above.
+ (tmac/stamp-wrap): Macro-source `an.tmac` in the man wrapper.
+
+ * tmac/andoc.tmac: Refer to (and macro-source) an.tmac.
+ * tmac/man.tmac: Macro-source `an.tmac`, not `andoc.tmac`.
+ * tmac/tests/andoc_flush-between-packages.sh: Call groff with
+ `-mandoc` option instead of `-man`. Henceforth, if you want the
+ andoc wrapper, you have to ask for it.
+
+ * tmac/an.tmac: Drop "-old" nomenclature.
+
+ * PROBLEMS:
+ * doc/groff.texi (man):
+ * tmac/man.local: Update documentation appropriately.
+
+ * NEWS: Add item.
+
+ * man/groff_tmac.5.man (Macro packages/man pages):
+ * src/roff/groff/groff.1.man (Usage/Macro packages): Update
+ discussion of an, doc, and andoc.
+ * tmac/groff_man.7.man.in (Files): Update descriptions of
+ an.tmac, andoc.tmac, man.tmac, and mandoc.tmac.
+
+ Fixes <https://savannah.gnu.org/bugs/?60789>.
+
+2021-07-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Slightly refactor. Make the source code slightly more
+ accessible by using a `bool` type for a function's default
+ parameter used as a Boolean, and comment it at call sites where
+ the default is overridden.
+
+ * src/roff/troff/token.h (get_name, get_long_name): Change type
+ of parameter from `int` to `bool` and default from 0 to `false`.
+ * src/roff/troff/input.cpp (do_get_long_name)
+ (empty_name_warning, get_name, get_long_name): Change type of
+ parameter from `int` to `bool` in declarations and definitions.
+ * src/roff/troff/column.cpp (column_justify):
+ * src/roff/troff/div.cpp (diversion_trap):
+ * src/roff/troff/env.cpp (environment_switch, environment_copy)
+ (do_input_trap, set_hyphenation_language)
+ (do_hyphenation_patterns_file):
+ * src/roff/troff/input.cpp (define_color, composite_request)
+ (do_define_string, do_define_macro, rename_macro, alias_macro)
+ (chop_macro, do_string_case_transform, substring_request)
+ (length_request, asciify_macro, unformat_macro, do_register)
+ (device_macro_request, do_if_request, do_source)
+ (ps_bbox_request, do_open, close_request, do_write_request)
+ (write_macro_request, define_class, copy_file, vjustify)
+ (transparent_file, do_macro_source):
+ * src/roff/troff/node.cpp (font_translate, font_position, style)
+ (get_fontno):
+ * src/roff/troff/reg.cpp (define_number_reg, inline_define_reg)
+ (alter_format, alias_reg, rename_reg): Update call sites. Add
+ (comment indicating meaning of parameter.
+
+ Do similarly for token::delimiter() member function.
+
+ * src/roff/troff/token.h (token::delimiter): Change type of
+ parameter from `int` to `bool`, name from `warn` to `err` (to
+ match definition and behavior in input.cpp) and default from 0
+ to `false`.
+ * src/roff/troff/input.cpp (token::delimiter): Change type of
+ parameter from `int` to `bool` in definition.
+ * src/roff/troff/input.cpp (do_expr_test, get_delim_number)
+ (get_line_arg, read_size, do_register, read_draw_node):
+ * src/roff/troff/reg.cpp (inline_define_reg): Update call sites.
+ Add comment indicating meaning of parameter.
+
+2021-07-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-footer): Remove string
+ `an-outer-footer-text` after we're done with it.
+
+2021-07-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Remove the stripper script and its vestiges.
+
+ * contrib/hdtbl/hdmisc.tmac:
+ * contrib/hdtbl/hdtbl.tmac:
+ * contrib/mom/om.tmac:
+ * tmac/doc.tmac:
+ * tmac/e.tmac:
+ * tmac/mdoc/doc-common:
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff:
+ * tmac/mdoc/doc-syms: Remove `%beginstrip` comment.
+
+ * tmac/strip.sed: Delete.
+
+ * tmac/tmac.am (EXTRA_DIST): Stop shipping `strip.sed`.
+
+ Fixes <https://savannah.gnu.org/bugs/?55091>.
+
+2021-07-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Skip the stripper, part 3/3 (mdoc).
+
+ * tmac/doc-old.tmac-u:
+ * tmac/doc.tmac-u:
+ * tmac/mdoc/doc-common-u:
+ * tmac/mdoc/doc-ditroff-u:
+ * tmac/mdoc/doc-nroff-u:
+ * tmac/mdoc/doc-syms-u: Rename these...
+
+ * tmac/doc-old.tmac:
+ * tmac/doc.tmac:
+ * tmac/mdoc/doc-common:
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff:
+ * tmac/mdoc/doc-syms: ...to these.
+
+ * tmac/tmac.am (TMACNORMALFILES): Add `doc-old.tmac` and
+ `doc.tmac`.
+ (TMACUNSTRIPFILES, TMACSTRIPFILES): Delete variables.
+ (dist_tmac_DATA): Drop `$(TMACUNSTRIPFILES)`.
+ (nodist_tmac_DATA): Drop `$(TMACSTRIPFILES)`.
+ (TMACMDOCSTRIPFILES): Rename...
+ (TMACMDOCFILES): ...to this.
+ (nodist_mdoc_DATA, MOSTLYCLEANFILES): Reflect above rename.
+ (nodist_mdoc_DATA): Rename...
+ (dist_mdoc_DATA): ...to this.
+ (TMACMDOCUNSTRIPFILES): Delete variable.
+ (EXTRA_DIST): Drop `$(TMACMDOCUNSTRIPFILES)`.
+ ($(TMACSTRIPFILES), $(TMACMDOCSTRIPFILES)): Drop targets.
+
+ The portions above are based on a patch by Ingo Schwarze.
+
+ * tmac/doc.tmac:
+ * tmac/mdoc/doc-common:
+ * tmac/mdoc/doc-ditroff:
+ * tmac/mdoc/doc-nroff:
+ * tmac/mdoc/doc-syms: Bracket macro definitions tightly with
+ `eo` and `ec` requests since they were written under this
+ assumption. The files in general were also drafted under the
+ assumption that they'd be stripped, so `eo` was in effect for
+ broad swaths of the file including portions outside of any macro
+ definition where comments were used. But comments are expressed
+ using the escape character! So we got warnings about an
+ undefined '\"' macro, and that was just the beginning of a
+ wrecking ball of trouble that smashed through the
+ implementation. Some--but not all--string definitions (and
+ appendments) needed to be bracketed with `eo` and `ec` as well,
+ to delay interpolation of embedded string names that are not
+ defined until macros interpolate them later. I did what
+ appeared necessary to pass our tests and keep -Tutf8 and -Tps
+ renderings of tmac/groff_mdoc.7 from changing from their
+ strip-influenced output. Subtle bugs might linger, but some
+ won't be the fault of the unstripping process. (For instance,
+ try provoking a usage message on the `Hf` macro.)
+
+2021-07-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man pages]: Remove compatibility save register.
+
+ * **/*.man*: Remove page-local compatibility save register after
+ using it.
+
+2021-07-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Simplify `mso` requests.
+
+ * tmac/X.tmac:
+ * tmac/Xps.tmac:
+ * tmac/dvi.tmac:
+ * tmac/html.tmac:
+ * tmac/lbp.tmac:
+ * tmac/lj4.tmac:
+ * tmac/ps.tmac:
+ * tmac/tty-char.tmac:
+ * tmac/tty.tmac:
+ * tmac/www.tmac.in: Move `mso` requests to be inside regions
+ where compatibility mode is turned off. I believe they were
+ placed where they were because things didn't work when the
+ compatibility mode register being saved was .C, rather than the
+ .cp register introduced in commit 6a37bb5f, 17 April 2020. Now
+ the logic is less mysterious. Also, remove the register used to
+ save compatibility mode after we're done with it, to reduce name
+ space clutter.
+
+2021-07-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/it.tmac: Drop sourcing of `latin1.tmac` and set up of
+ hyphenation codes; since the `hyphen.it` file is pure ASCII, we
+ don't need to expect Latin-1-encoded code points in it.
+
+2021-07-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Make localization files work in compatibility mode.
+
+ * tmac/cs.tmac:
+ * tmac/de.tmac:
+ * tmac/en.tmac:
+ * tmac/fr.tmac:
+ * tmac/it.tmac:
+ * tmac/ja.tmac:
+ * tmac/sv.tmac:
+ * tmac/zh.tmac: Save and restore compatibility mode.
+
+ * tmac/den.tmac: Invoke requests with `do`.
+
+ Fixes <https://savannah.gnu.org/bugs/?60874>. Thanks to Bjarni
+ Ingi Gislason for the report.
+
+2021-07-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #60874.
+
+ * src/roff/groff/tests/initialization_is_quiet.sh: Test it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2021-07-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Integrate Italian localization.
+
+ * NEWS: Add item. Update an existing list of localization macro
+ files.
+ * doc/groff.texi (Manipulating Hyphenation): Update table of
+ hyphenation pattern left and right minimums and list of
+ available localization files to include Italian.
+ * man/groff_tmac.5.man: Update list of available localization
+ files to include Italian.
+ * src/roff/groff/tests/localization_works.sh: Test it.
+ * tmac/tmac.am (TMACNORMALFILES): Add `it.tmac` and `hyphen.it`.
+
+ Fixes <https://savannah.gnu.org/bugs/?60828>.
+
+2021-07-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Flesh out Italian localization.
+
+ * tmac/hyphen.it: Add hyphenation patterns from TeX hyph-utf8
+ project.
+ * tmac/it.tmac:
+ - Revise copyright date to just this year (it had been copied
+ from fr.tmac).
+ - Use grave accents instead of acute ones to indicate stress
+ on word-final vowels. Per the University of Wikipedia and a
+ sampling of apparently well-typeset Italian language
+ documents online, this appears to be correct. Yell at me if
+ I'm wrong.
+ - Source latin1.tmac instead of latin9.tmac; Italian doesn't
+ require any letter code points from Latin-9, unlike the
+ French file upon which this one was based, and Latin-1 is
+ less of a pain to work with.
+ - Set the hyphenation mode to 1 instead of 4 for congruence
+ with the requirements of the hyphenation patterns.
+ - Set up hyphenation codes. This (and sourcing latin1.tmac)
+ might not be necessary as the hyphenation pattern file, of a
+ more recent vintage than the others we're using, is pure
+ ASCII. However I don't understand these issues perfectly so
+ I am making the conservative choice. Again per the
+ University of Wikipedia, Italian requires only acute and
+ grave accents, in contrast to the rich French diacritical
+ bouillabaisse.
+ - Set the hyphenation language and load the pattern file.
+ - Add comments in parallel with other localization files and
+ to supply text editors with hints.
+
+2021-07-02 Edmond Orignac <edmond.orignac@wanadoo.fr>
+
+ * tmac/it.tmac: Add Italian localization.
+
+2021-07-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Skip the stripper, part 1/3 ("me").
+
+ * tmac/e.tmac-u: Rename to...
+ * tmac/e.tmac: ...this.
+
+ * tmac/tmac.am (TMACNORMALFILES): Add tmac/e.tmac.
+ (TMACUNSTRIPFILES): Remove tmac/e.tmac-u.
+ (TMACSTRIPFILES): Remove tmac/e.tmac.
+
+ Fixes one third of <https://savannah.gnu.org/bugs/?55091>.
+
+2021-07-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl: Simplify parsing. Dave Kemper pointed
+ out that preprocessors like pic(1) use pretty unsophisticated
+ *roff parsing to determine where to perform their textual
+ replacements. My enhancements to support input line
+ continuation and cope with brace escapes were thus
+ overengineered. Remove them.
+ - Drop scalars `is_continued_line` and `logical_line`.
+ (do_line): Stop performing logical line concatenation and
+ detecting input line continuation. Perform operations on
+ `line` instead of `logical_line`. Stop removing brace
+ escapes.
+ * src/utils/grog/grog.1.man (Limitations): Update discussion.
+
+ Fixes <https://savannah.gnu.org/bugs/?60862>. Thanks, Dave!
+
+2021-06-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/reg.cpp (lookup_number_reg, alias_reg): In
+ diagnostic messages, say simply "register" instead of "number
+ register" (there is no other kind).
+
+2021-06-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Refactor input parsing.
+
+ * src/utils/grog/grog.pl:
+ - Add scalar `use_compatibility_mode` (see below).
+ - Add list `request` to store the names of all requests
+ recognized by groff so that they aren't confused with macro
+ names.
+ - Add scalars `have_seen_first_macro_call` (replaces
+ `before_first_command`, but at global scope),
+ `is_continued_line` and `logical_line`. The latter two
+ enable us to handle *roff input line continuation correctly.
+ (process_arguments): Set `use_compatibility_mode` if `-C`
+ option specified.
+ (process_input): Refactor to greatly simplify, to not attempt
+ to read the first line of an input file as a special case, and
+ to avoid sending `do_line` an undefined argument (when EOF is
+ reached).
+ (do_first_line): Delete.
+ (do_line): Rewrite the early stages of input parsing.
+ - Concatenate continued input lines, setting
+ `is_continued_line` and returning early as each one is seen,
+ storing the accumulating input in `logical_line`.
+ - Check the input line for the form of comment deposited by
+ Perl's Pod::Man, which uses a highly accented dialect of
+ man(7); if it's present, inflate `man_score` to compensate
+ for the page-private `IX` macro it defines but which
+ duplicates the name and function of a 4.2BSD-era ms(7)
+ extension that would otherwise deceive our scoring
+ mechanism, because Pod::Man produces `IX` calls to
+ metastatic excess. (An alternative to this kludge is
+ documented in comments: if a "standard" macro is redefined,
+ we could delete it from the relevant lists and hashes.)
+ - Strip *roff comments from input.
+ - Normalize control lines; convert the no-break control
+ character to the regular one and remove unnecessary
+ white space.
+ - Remove brace escapes.
+ - Recognize two-character macro calls when not followed by
+ white space in compatibility mode.
+ - Drop logic that erroneously attempted to infer soelim(1) use
+ from macro calls and request invocations. The grog(1) and
+ soelim(1) man pages now both explain why such an effort was
+ misguided.
+ - Recognize macro definitions created by .am and .am1 requests
+ {not just .de and .de1}.
+ - Ignore all other *roff requests.
+ - What remains must be a ("standard") macro call, so set
+ `have_seen_first_macro_call`.
+
+ * src/utils/grog/grog.1.man (Limitations): Document a further
+ restriction: don't change the escape character, either.
+
+ * src/utils/grog/tests/smoke-test.sh: Comment out pic-detection
+ test on soelim(1). The pic macro calls are guarded by roff
+ control structures and only worked previously by accident
+ because grog did not recognize *roff input line continuation,
+ now it does and the illusion is dispelled. (A reliable way to
+ fool grog before and after my refactoring is now documented in
+ its man page.)
+
+ Fixes <https://savannah.gnu.org/bugs/?59622>.
+
+2021-06-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #59622.
+
+ * src/utils/grog/tests/recognize-perl-pod.sh: Test it.
+ * src/utils/grog/grog.am (grog_TESTS): Run test.
+
+2021-06-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.1.man (Limitations): Document further
+ restrictions (no changing of control characters, control
+ structures not interpreted).
+
+2021-06-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Refactor command-line argument handling.
+
+ * src/utils/grog/grog.pl:
+ - Drop scalars `groff_opts`, `device`, and `with_warnings`.
+ - Move scalar `pdf_with_ligatures`...
+ (process_arguments): ...here. Recognize all groff options
+ that take an optionally whitespace-separated option argument
+ and apply the existing "delayed option" handling to them.
+ Push any groff option except `-m` as-is onto the constructed
+ groff command's argument list (`-m` handling is unchanged).
+ Match long option names exactly, not sloppily. Stop
+ recognizing `--warnings` option. Emit error diagnostic if
+ unrecognized long option encountered.
+ (infer_device): Delete subroutine and its top-level call site.
+ (help): Undocument `--warnings`.
+
+ * src/utils/grog/grog.1.man:
+ (Synopsis): Use font style macros instead of .OP. Undocument
+ `--warnings`.
+ (Options): Note that the groff arguments produced by the grog
+ `--ligatures` option are supported only by the `pdf` device.
+ Undocument `--warnings`. Undocument groff-incompatible
+ restriction on whitespace before option arguments; grog is
+ compatible now. Simplify discussion in light of simplified
+ grog logic.
+ (Details): Undocument scenario where grog infers multiple
+ main/major/full-service macro packages; this no longer
+ happens.
+ (Examples): Update to no longer illustrate inclusion of `-T
+ ps` option; this no longer happens by default.
+
+ * NEWS: Document removal of grog's `--warnings` option.
+
+ Fixes <https://savannah.gnu.org/bugs/?57873>; groff options are
+ no longer "mangled".
+
+2021-06-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #57873.
+
+ * src/utils/grog/tests/preserve-groff-options.sh: Test it.
+ * src/utils/grog/grog.am (grog_TESTS): Run test.
+
+2021-06-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Refactor device (`-T` option) handling.
+
+ * src/utils/grog/grog.pl: Redeclare `device` as a scalar instead
+ of a list.
+ (process_arguments): Generalize handling of `-T` and `-m`
+ options to permit optional whitespace. Rename scalar `was_T` to
+ `delayed_option`.
+ (infer_device): Stop unconditionally adding a `-T ps` argument
+ to the generated groff command. Remove logic that validates any
+ given `-T` option argument; instead, let groff fail if a bad one
+ is supplied (its own diagnostics in this scenario were improved
+ in commit 5a721a30, 27 May). This makes grog agnostic about any
+ differently configured default device in groff itself, and about
+ the GROFF_TYPESETTER environment variable.
+
+ Fixes <https://savannah.gnu.org/bugs/?55301> by getting out of
+ the way.
+
+ * src/utils/grog/tests/PF-does-not-start-pic-region.sh:
+ * src/utils/grog/tests/smoke-test.sh: Update expected output.
+
+2021-06-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.am (grog): Drop sed replacement of unused
+ configuration variables @g@, @BINDIR@, @libdir@, and @EGREP@.
+ * src/utils/grog/grog.pl (process_arguments, construct_command):
+ Tweak warning diagnostics to use a style where an empty argument
+ will be easy to spot.
+ (do_first_line): Stop emitting pseudo-diagnostic (to standard
+ output!) if we see a "groff options line" [it's not] of
+ incorrect form. The preprocessor encoding hint convention of
+ concern here is particular to man pages, disregarded by at least
+ one major implementation thereof (man-db man), and not used by
+ other types of roff documents; at this point, we don't yet know
+ if the document we're processing is a man page.
+ (construct_command): Correct comment and related logic error.
+ Clear the inferred main macro package if _any_ `-m` argument
+ matching any main macro package is given. Warn only if what is
+ specified doesn't match the inference.
+
+2021-06-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Heavily refactor.
+
+ * src/utils/grog/grog.pl:
+ - Drop import of unused module `Data::Dumper`.
+ - Drop unused scalars `Sp` and `correct_tmac`.
+ - Simplify determination of version number. Drop hash `at_at`
+ which only stored one key, `GROFF_VERSION`. Initialize
+ scalar `groff_version` to "DEVELOPMENT". Rename scalar
+ `before_make` to `in_source_tree` and initialize to zero.
+ Update `groff_version` with Automake-determined version
+ variable if it is defined (i.e., grog is not running outside
+ of, or in an unbuilt, groff source or binary distribution).
+ - Drop unused `Mparams` list. Replace it with new list
+ `requested_package`, which stores the arguments to any grog
+ `-m` options specified by the user.
+ - Rename many objects so that I, and others, can better
+ comprehend their purpose, and for consistent letter casing.
+ . @Command -> @command
+ . @devices -> @device
+ . $Prog -> $program_name
+ . %macros -> %user_macro
+ . $have_any_valid_args -> $have_any_valid_arguments
+ . &handle_args -> &process_arguments
+ . &handle_whole_files -> &process_input
+ . @preprograms -> @preprocessor
+ . &make_groff_device -> &infer_device
+ . &make_groff_preproc -> &infer_preprocessors
+ . &make_groff_tmac_others -> &infer_macro_packages
+ . &make_groff_tmac_man_ms -> &infer_man_or_ms_package
+ . &make_groff_line_rest -> &construct_command
+ - Drop many unused keys in `Groff` hash.
+ - Add new lists, `macro_ms`, `macro_man`, and
+ `macro_man_or_ms` to support new scoring technique to
+ disambiguate input documents between these two packages.
+ - Append the foregoing 3 lists to new list `standard_macro`,
+ and add these as keys to the `Groff` hash.
+ - Add new list `main_package` to keep track of full-service
+ package names.
+ - Add new scalars `man_score`, `ms_score`, and
+ `inside_tbl_table` to aid disambiguation of .TH macro calls
+ and the many macro names shared between man(7) and ms(7).
+ (process_arguments): Strip '-m' off of argument before storing
+ the remainder in `@requested_package`.
+ (do_line): Detect .TH macro call even if white space occurs
+ between the control character and the macro name.
+ (do_line): Inflate `$man_score` by 100 if .TH is the first
+ macro call seen in a document.
+ (do_line): Fix bug; clear `$before_first_command` in correct
+ scope--after any macro call, not just if we saw a .TH as the
+ first macro call.
+ (do_line): Set `$inside_tbl_table` when we see a .TS call.
+ (do_line): Clear `$inside_tbl_table` when we see a .TE call.
+ Also increment `$Groff{'tbl')' again, increasing the "score"
+ of tbl(1) usage evidence.
+ (do_line): Drop a lot of code that manually increments %Groff
+ keys corresponding to man and ms macros. This is now done
+ differently and elsewhere.
+ (do_line): Drop "P" from list of characteristic mm(7) macros.
+ (do_line): Simplify matching of mom(7) macros (match $command,
+ not $line). Extend list of characteristic mom(7) macros.
+ (do_line): Increment $Groff{$key} if $key is in
+ @standard_macro.
+ (infer_man_or_ms_package): Rewrite. Compute a score for each
+ package by counting occurrences of their characteristic
+ macros. If both have a score of zero, assume that the input
+ is a raw roff document. If the scores are equal
+ {doc/webpage.ms, startlingly, comes within 1 point of a tied
+ score}, infer ms(7) if 'TH' was never called, and if it was,
+ issue a diagnostic advising user to supply a disambiguating
+ `-m` option. Otherwise, the scores are unequal: infer the
+ package of the winner. Set scalar `inferred_main_package`
+ instead of pushing `-m` options onto `@m`.
+ (infer_macro_packages): Set scalar `inferred_main_package`
+ instead of pushing `-m` options onto `@m`. Explicitly return
+ 0 if we fall off the end of the function.
+ (construct_command): Rewrite handling of -m options. Add new
+ list `msupp` to store supplementary (non-main) macro package
+ arguments. If a full-service package was explicitly
+ requested, it had better not clash with what we inferred. If
+ it does, explicitly unset `inferred_main_package` so that the
+ -m arguments are placed in the same order that the user gave
+ them; caveat dictator. If `--run` option was given, just
+ print the command; don't preface it with __FILE__ and __LINE__
+ noise.
+ - Remove comments documenting shared variables used by
+ subroutines. These are far from useless but too tedious to
+ keep up to date while the code is in flux.
+ - Note several places for further code review or refactoring
+ with "XXX" comments.
+ - Add Vim modeline.
+
+ grog now passes all its tests and correctly infers arguments for
+ all in-tree groff documents (except for a known, and already
+ documented in grog(1), false positive detection of soelim in
+ soelim(1)). This refactor also obviates or resolves several
+ outstanding Savannah tickets.
+
+ Fixes <https://savannah.gnu.org/bugs/?44707> by obviating it;
+ grog no longer cares about file name extensions on man pages (or
+ any other input).
+
+ Fixes <https://savannah.gnu.org/bugs/?55302>; same. The quality
+ of diagnostic messages has been improved as well.
+
+ Fixes <https://savannah.gnu.org/bugs/?59753>; same.
+
+ Fixes <https://savannah.gnu.org/bugs/?59664>. The attached
+ patch was a less aggressive refactor of &do_line and %Groff.
+ Its author made the following claim for it: "With this patch,
+ all 'man', 'me', 'mom, and 'ms' files in the repository are
+ correctly identified. The only example of a 'mm'-file is
+ "letter.mm", which is not recognized correctly." As noted
+ above, the present refactor achieves correct recognition of all
+ of the files, including letter.mm.
+
+2021-06-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/tests/smoke-test.sh: Perform whole-line
+ matches. Apply DRY principle to expected output. In
+ anticipation of pending changes to grog.pl, uncomment and add
+ tests for several in-tree documents.
+ doc/meref.me
+ contrib/mom/examples/copyright-chapter.mom
+ contrib/mom/examples/copyright-default.mom
+ contrib/mom/examples/letter.mom
+ contrib/mom/examples/mom-pdf.mom
+ contrib/mom/examples/mon_premier_doc.mom
+ contrib/mom/examples/sample_docs.mom
+ contrib/mom/examples/slide-demo.mom
+ contrib/mom/examples/typesetting.mom
+ doc/webpage.ms
+
+2021-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Refactor. Discard filename extension-based inference.
+
+ * src/utils/grog/grog.pl (do_line): Stop saving the control
+ character in the matched scalar `command` (the request or macro
+ name). We don't need it, and it simplifies much later matching.
+ (handle_file_ext): Delete.
+ (top level): Drop call site.
+
+ * src/utils/grog/grog.pl: Rename `tmac_ext` scalar to
+ `inferred_main_package`.
+
+2021-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.pl (handle_args): Complain less noisily
+ and more comprehensibly when given unrecognized groff options.
+
+2021-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Handle "--" argument as documented.
+
+ * src/utils/grog/grog.pl (handle_args): Rename scalar
+ `double_minus` to `no_more_options` so it actually communicates
+ something. Drop openability check of operand encountered after
+ "--"; since it's on the operand list, it will be checked later
+ {in `handle_whole_files`}. Stop pushing "--" itself onto the
+ `filespec` list.
+
+ Fixes <https://savannah.gnu.org/bugs/?60834>.
+
+2021-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Revise operand handling, diagnostics, and exit status.
+
+ * src/utils/grog/grog.pl: Track more state so that we can
+ process the argument list more intelligently and exit with a
+ meaningful status. Add `had_inference_problem`,
+ `had_processing_problem`, and `have_any_valid_args` Boolean
+ scalars.
+ (fail): Add diagnostic subroutine for serious problems; sets
+ `had_processing_problem`.
+ (handle_args, handle_file_ext): Stop complaining here about
+ unopenable file operands.
+ (handle_whole_files): Complain only here, with `fail` if a file
+ operand cannot be opened.
+ (make_groff_line_rest): Don't exit immediately if there is a
+ macro package inference clash, because there might be more
+ operands to process. Instead, set `had_inference_problem`.
+ Stop exiting from this subroutine.
+ (top level): Only call the inference subroutines if we had a
+ valid operand to work with (including an implicit read from
+ stdin). Exit with a status corresponding to the Booleans
+ declared above.
+
+ * src/utils/grog/grog.1.man (Exit status): Add section; describe
+ semantics of exit status values.
+
+ Fixes <https://savannah.gnu.org/bugs/?60833>.
+
+2021-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Revise diagnostic messages.
+
+ * src/utils/grog/grog.1.man (err): Rename from this...
+ (warn): ...to this. Prefix diagnostic with command name and
+ diagnostic severity level. The subroutine didn't change the
+ exit status and was not used to report serious trouble, so
+ "warning" seems appropriate.
+ (make_groff_tmac_man_ms): Update call sites. Modify diagnostic
+ wording to stop calling macros "requests".
+
+2021-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/grog.1.man (Limitations): Add subsection
+ covering the problem grog has with soelim inference. Undocument
+ groff's -s option as one that can be inferred, because at
+ present it cannot be.
+
+ Prompted by Savannah #60421.
+
+2021-06-26 Dave Kemper <saint.snit@gmail.com>
+
+ [grog]: Fix erroneous detection of pic(1) usage.
+
+ Fixes <https://savannah.gnu.org/bugs/?60772>.
+
+2021-06-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/grog/tests/PF-does-not-start-pic-region.sh:
+ Regression-test Savannah #60772.
+ * src/utils/grog/grog.am (grog_TESTS): Run test.
+
+2021-06-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Add smoke test.
+
+ * src/utils/grog/tests/smoke-test.sh: Add test.
+ * src/utils/grog/grog.am (grog_TESTS): Run it.
+ (TESTS): Add `grog_TESTS`.
+ (EXTRA_DIST): Ship test.
+
+2021-06-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grog]: Relocate in source tree.
+
+ * src/roff/grog: Move from here...
+ * src/utils/grog: ...to here.
+
+ * MANIFEST:
+ * Makefile.am:
+ * src/utils/grog/grog.am: Reflect move.
+
+ Fixes <https://savannah.gnu.org/bugs/?60788>.
+
+2021-06-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Assigning Formats): Revise discussion.
+ Clarify that a format never causes truncation of an interpolated
+ magnitude. Note that non-Arabic number formats cannot be used
+ as operands to arithmetic expressions. Add example of how to
+ work around this.
+
+2021-06-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Clarify diagnostics.
+
+ * src/roff/troff/reg.cpp (reg::set_increment): Update diagnostic
+ to unabbreviate "auto".
+ (reg::alter_format): Update diagnostic to say "assign" instead
+ of "alter", since the documentation consistently uses the former
+ term.
+
+2021-06-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [troff]: Slightly refactor. Make the source code slightly more
+ accessible by using a `bool` type for a member function's
+ default parameter used as a Boolean, and comment it at call
+ sites where the default is overridden.
+
+ * src/roff/troff/token.h (token::get_char): Change type of
+ parameter from `int` to `bool` and default from 0 to `false`.
+ * src/roff/troff/input.cpp (token::get_char): Update definition.
+ * src/roff/troff/env.cpp (hyphen_word):
+ * src/roff/troff/node.cpp (remove_font_special_character):
+ * src/roff/troff/input.cpp (do_overstrike, do_bracket, next)
+ (do_define_character, remove_character, get_line_arg)
+ (encode_char, do_if_request, do_translate, char_flags)
+ (hyphenation_code, define_class): Update call sites. Add
+ comment indicating meaning of parameter.
+
+2021-06-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): When outputting HTML, write the
+ possibly case-transformed (but not yet abbreviated) page title
+ as the `title` element instead of the unaltered first argument
+ to `TH`.
+
+2021-06-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-abbreviate-title): Define with `de`, not
+ `de1`, since it is not intended for call by traps or users.
+
+2021-06-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Tab Stops): Fix erroneous claim; tab stops are
+ not set "every half inch across the page". This is only true in
+ "line tabs mode", which is not enabled by default. The default
+ behavior, to keep compatibility with AT&T troff, measures tab
+ stops relative to the current position on the input line.
+
+2021-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-nroff-u: Set the usekeeps register used by tbl
+ to the logical complement of the cR (continuous rendering)
+ register. This prevents blank lines from creeping into tables
+ in that mode.
+
+2021-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-blank-line-trap, an-leading-space-trap):
+ We say in a comment, "Macros ... that are called by traps of any
+ kind must be defined with `de1` because they might be called
+ from a context where compatibility mode is enabled." So do it.
+
+2021-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-header): Lightly refactor; tighten.
+
+2021-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-write-paragraph-tag): Lightly refactor
+ for clarity and to reduce code duplicated in both branches of an
+ `ie`/`el` structure.
+
+2021-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Rename `an-HF-remap-I-style` register to
+ `an-remap-I-style-in-headings` for greater clarity.
+
+2021-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common-u (doc-header, doc-end-macro): Partially
+ revert bf4b3dde (from 20 May); per Ingo Schwarze, continuous
+ rendering in mdoc(7) documents has always used only one vee
+ between headers, footers, and man page body text.
+
+2021-06-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/en.tmac: Stop using `do` request; it's unnecessary since
+ the file is already loaded with compatibility mode off.
+
+2021-06-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Fix doc omission; .ID can take an argument.
+
+ * doc/groff.texi (ms Document Control Settings) <DI>:
+ Characterize register setting as a _default_.
+ (ms Displays and Keeps): Add optional variable "indent" argument
+ to syntax summary of ".DS I" and ".ID". Note that the given
+ indentation is used if present, and \n[DI] otherwise.
+ * doc/ms.ms (Displays and keeps): Add optional variable "indent"
+ argument to syntax summary of ".ID". Switch fonts more
+ carefully and apply italic corrections.
+ * tmac/groff_ms.7.man (Displays and keeps): Sync with doc/ms.ms.
+
+2021-06-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Properly situate devtag flag-related register
+ names in the package name space. Rename `need_eo_h` to
+ `s@devtag-needs-end-of-heading'. Rename `need_eo_tl` to
+ `s@devtag-needs-end-of-title`.
+ ((initialization), par@reset, @SH, par@finish, @NH): Do it.
+ (par@reset): Test their values more idiomatically.
+
+ Fixes last third of <https://savannah.gnu.org/bugs/?42515>.
+
+2021-06-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac-u (@h): Migrate SCCS revision 2.37 to be idiomatic
+ for groff (and not throw warnings of type 'mac').
+
+2021-06-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Improve diagnostics during documentation
+ generation; none should occur normally, but when they do, seeing
+ troff complain about "<standard input>" is disheartening.
+ (DOC_GROFF_ONLY): Add -b option so we get backtraces (also kill
+ off trailing whitespace).
+ (DOC_GROFF):
+ (doc/pic.html):
+ (doc/webpage.html): Add sed expression to inject `lf` request
+ into the stream to identify the file being processed.
+
+2021-06-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/me-revisions: Supplement history with subsequent BSD work
+ from versions 2.29 (1988-04-22) to 8.1 (1993-06-05).
+
+2021-06-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/me-revisions: Add 'me' macro package revision log, scraped
+ from <https://svnweb.freebsd.org/csrg/share/me/revisions>.
+ * doc/doc.am (DOCFILES): Ship it.
+
+2021-06-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac-u: Rename registers for clarity. Unlike other
+ macro packages supplied by groff, "me" mostly remains within the
+ AT&T 2-character name space, accessing extended names
+ selectively through `do` and `de1` requests. The package
+ therefore has no characteristic name prefix.
+ need_eo_h -> devtag-needs-end-of-heading
+ need_eo_tl -> devtag-needs-end-of-title
+ need_tl -> devtag-needs-title
+ (@html_check_need_title, sh, EQ): The foregoing registers are
+ effectively Booleans, so perform Boolean-style tests on their
+ interpolations.
+
+ Fixes a second third of <https://savannah.gnu.org/bugs/?42515>.
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/e.tmac-u: Work in compatibility mode. It seems this was
+ the intention (reasonable, since "me" originates in pre-groff
+ BSD Unix), but there were several problems.
+ (@R): Prefix register existence test with `do`.
+ (@html_check_need_title): Define with `do` since the macro name
+ is long, and also with `de1` so that we can freely use groff
+ extensions within. Drop many `do` requests from macro
+ definition.
+ (@check_need_title): Define with `do`, as above. Add comment
+ explaining why `de1` is not needed for this macro definition.
+ (@S): Prefix macro/string existence test with `do`. Remove
+ spurious space so that the argument string name is truly defined
+ as empty.
+ (nm, n1, n2): Prefix handling of long register names `_#p` and
+ `_#f` with `do` request.
+ (top level): Prefix `mso` request with `do`.
+ ((x-html): Define with `do` and `de1` instead of `de`. Drop
+ now-unnecessary `do` requests from macro body.
+ ()x-html): Define with `do` and `de1` instead of `de` for
+ symmetry.
+ (xp-html): Define with `do` and `de1` instead of `de`. Drop
+ now-unnecessary `do` requests from macro body.
+
+ Fixes <https://savannah.gnu.org/bugs/?60785>.
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/devtag.tmac: Work in compatibility mode; define macros
+ with the `de1` instead of the `de` request.
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/refer-me.tmac:
+ * tmac/refer.tmac: Add include guards.
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/refer-me.tmac: Handle being loaded in compatibility mode.
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Properly situate devtag flag-related
+ register names in the package name space. Rename `need_eo_h` to
+ `an-devtag-needs-end-of-heading'. Rename `need_col2` to
+ `an-devtag-needs-second-column`.
+ (an-input-trap, SH, SS, HP, (initialization)): Do it.
+ (an-input-trap): Test their values more idiomatically.
+
+ Fixes one third of <https://savannah.gnu.org/bugs/?42515>.
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_if_request): Improve diagnostic
+ message; say "conditional operator", not just "conditional".
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-end, an-header): In continuous rendering
+ mode, use same spacing amount after header and before footer as
+ mdoc in its own continuous rendering mode. Thanks to Ingo
+ Schwarze for the suggestion.
+
+ Fixes <https://savannah.gnu.org/bugs/?60653>.
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (P): Define this as the "canonical"
+ paragraphing macro.
+ (LP, PP): Make these aliases of P.
+
+2021-06-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (spring_trap): Tighten lexical
+ discipline; describe macro as "trap-called" rather than
+ "trap-invoked".
+
+2021-06-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Don't spuriously break a page after a paragraph tag when
+ the tag is short enough to fit within the paragraph's
+ indentation.
+
+ * tmac/an-old.tmac (an-write-paragraph-tag): Reserve ("need") 2
+ vees plus 1 basic unit of vertical space regardless of the width
+ of the tag. In the short tag case, we reverse space by one vee
+ after outputting the diversion in which the tag is stored, but
+ it will always contain a break, and by the time we reverse, we
+ might have already hit a page location trap
+ {an-break-body-text}, and by then it's too late to back up.
+
+ * tmac/tests/an-old_no-break-after-short-paragraph-tags.sh: Test
+ it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?60624>.
+
+2021-06-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Rename environments to be more descriptive.
+ an-env -> an-env-header-or-footer
+ an-2 -> an-env-paragraph-tag
+ (an-header, an-footer, an-write-paragraph-tag): Do it.
+
+2021-06-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Add diagnostic error if .EQ used within .TS/.TE.
+ Introduce register `tbl@within-table` to track whether we're
+ inside a table.
+ (@EQ): Check register and issue error if it is true.
+ (@TS): Set register.
+ (@TE): Clear register.
+
+ Prompted by Savannah #55754.
+
+2021-06-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Permit document to start with .PS.
+ (cov*ab-init): Alias PS to @PS.
+ (PS): Call LP, then re-execute (aliased) self as TS does.
+ (TS): Update comment to parallel the one in PS.
+
+2021-06-11 Tadziu Hoffmann <hoffmann@usm.uni-muenchen.de>
+
+ Indent an IP paragraph based on the type size of the paragraph
+ text, not a preceding heading. We have to delay evaluating IP's
+ argument until the font size has been reset, which I've
+ attempted to do by simply passing the argument unevaluated down
+ the call hierarchy, instead of saving it in a number register
+ right away, as appears customary in this ms implementation.
+
+ However, par@reset is called from a great number of places, and
+ these usually set the indent registers beforehand. I've left
+ this as it is, so now two ways of setting the indents exist: via
+ register and optionally via argument.
+
+ * tmac/s.tmac (par@reset): Move font-size setting stuff before
+ indent-setting stuff; set registers from optional arguments with
+ default "n" scaling indicator before setting indents.
+ (par*start, par@finish): Don't set registers, but instead pass
+ arguments to par@reset.
+ (@IP): Pass argument unevaluated to par*start.
+
+ Fixes <https://savannah.gnu.org/bugs/?59604>.
+
+2021-06-11 Tadziu Hoffmann <hoffmann@usm.uni-muenchen.de>
+
+ * tmac/s.tmac (@QP, @XP): Be more scrupulous about using "u"
+ scaling indicator.
+
+2021-06-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #59604.
+
+ * tmac/tests/s_IP-indents-using-paragraph-type-size.sh: Add it.
+ * tmac/tmac.am (tmac_TEST): Run it.
+
+2021-06-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Refactor grog even more aggressively. Make the tedious search
+ for subs.pl unnecessary by inlining it into grog.pl directly.
+ This makes the script stand alone and much more convenient to
+ work with, and doesn't contribute to bloat, in my
+ opinion--subs.pl was 10 times the size of grog.pl, and most of
+ the code in the latter was dedicated to trying to locate
+ subs.pl.
+
+ * Makefile.am: Delete references to $(grog_dir).
+ * configure.ac: Delete call of `GROFF_GROGDIR_DEFAULT` macro.
+ * m4/groff.m4: Delete definition of same.
+ * src/roff/grog/grog.am (GROG, dist_grog_DATA, grogdir): Drop
+ variables.
+ (grog): Remove target's dependency on `$(GROG)`. Remove sed
+ expression replacing `@grog_dir@` with `$(grog_dir)` in grog.pl.
+ * src/roff/grog/grog.pl: Inline most of subs.pl (except for
+ author/license comment banner). Delete sub-hunting logic.
+ * src/roff/grog/subs.pl: Delete.
+
+2021-06-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/pic.ms (Basic PIC Concepts, Decorating Objects/Filled
+ Objects, PIC Reference/Semi-Formal Grammar): Fix error: the
+ keyword "solid" sets a line style, not a fill for a closed
+ figure. Thanks to Dave Kemper and Wim Stockman for reporting
+ and researching this issue.
+
+ Fixes <https://savannah.gnu.org/bugs/?60470>.
+
+2021-06-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * NEWS:
+ * doc/webpage.ms:
+ * man/groff.7.man (Registers/Read-only registers) <.U>:
+ * man/groff_diff.7.man (Language/New number registers) <.U>: Fix
+ error; the sense of this Boolean variable was backwardly
+ documented {perhaps due to an implementation detail from 2004
+ that was reversed in commit 7a0e2f15, 26 February 2008}.
+
+2021-06-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.cpp: Revise usage message.
+ (synopsis): Set primary synopsis on a single output line, for
+ convenience of parsing and also because we have no control over
+ the width of the program name in character cells; it comes from
+ argv[0] and is under user control. There is thus no point in
+ trying to get pretty formatting. Also include separate synopsis
+ lines for short and long help options. Use opposite case from
+ option flags for option arguments.
+ (help): Collate option flags in English lexicographic order.
+ Include space after flag letters for options that take
+ arguments. Consistently use capitals for option arguments
+ because they are space-separated here. Illustrate longer forms
+ of -d and -r options. Update language (some, like "tmac.name",
+ was very old). Add reference to groff(1) man page at end.
+ (usage): Drop appendnment of notice regarding -h option; this is
+ now covered in `synopsis()` unconditionally.
+
+2021-06-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Eliminate "groff_opts_no_arg.txt" and "groff_opts_with_arg.txt"
+ files from distribution. They are not needed by any live code
+ in the tree; possibly only groffer ever used them.
+
+ * src/roff/groff/groff.am (GROFF_OPTS_OUTPUT, groffoptsdir)
+ (groffopts_DATA): Delete variables.
+ (MOSTLYCLEANFILES): Stop adding to target.
+ (groff_opts.tmp, groff_opts_no_arg.txt,
+ groff_opts_with_arg.txt): Delete targets.
+
+2021-06-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/grog/subs.pl (version): Report version information in
+ a format consistent with our other programs.
+
+2021-06-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/grog/grog.pl: Refactor initialization so that the
+ program can be run from a build tree--and tested. Drop much
+ cruft from before Bertrand Garrigues's 2018 work to adopt
+ `git-version-gen`.
+
+2021-06-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_title-abbreviation-works.sh: Log more
+ accurate messages in test failures.
+
+2021-06-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-abbreviate-title): Add new internal macro
+ to reduce the length of a man page title (i.e., the "ls" in
+ "ls(1)", if it is too wide to fit in the page header (and would
+ overwrite the center header material, usually the title of the
+ manual section). Since the beginning and end of the title might
+ be important for disambiguation, truncation at either end would
+ be unwise; replace the middle of the title with an ellipsis.
+ Define new an-pageref and an-title-abbv strings for use by other
+ macros and user-defined PT and BT traps.
+ (PT, an-footer): Use new an-pageref string for economy.
+ (an-header): Call an-abbreviate-title after setting the title
+ length.
+
+ * tmac/tests/an-old_title-abbreviation-works.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?43532>.
+
+2021-06-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Copy mode): Add new section.
+
+2021-06-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (else_request, while_request)
+ (pipe_source, open_request, opena_request, pipe_output)
+ (system_request): Update diagnostic messages to not presume the
+ identities of the control or escape characters.
+
+2021-06-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Conventions Used in This Manual): Add node.
+
+2021-05-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.1.man: Expand to aid beginners.
+ (initialization): Define `TeX` string.
+ (Usage): Rewrite.
+ (Usage/Getting started): Add "Hello, world!" example using
+ multiple output devices (formats).
+ (Usage/Using groff as a REPL): Add example of likely interest to
+ programmers. Or so I hope. It illustrates the Turing
+ fundamentals; we read, store, test, and branch.
+
+2021-05-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/papersize.tmac: Improve diagnostic message; when
+ complaining about unrecognized input, report back the input we
+ actually received, not what it looks like after we transform it.
+ Also add name of macro package to diagnostic so the user knows
+ who is speaking, continuing the long process of fixing Savannah
+ #52463.
+
+2021-05-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_ms.7.man (Usage/Paragraphs) <QP>: Fix error: .QP
+ paragraphs are indented by \n[QI], not \n[PI].
+
+2021-05-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libdriver/input.cpp (do_file): Make fatal diagnostic
+ from output driver when the device description file "DESC" can't
+ be found more informative by including the name of the device
+ for which the input was prepared. Also makes malformed input of
+ intermediate format more obvious.
+
+2021-05-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/tbl.1.man (Miscellaneous): Add paragraph
+ cautioning users against making tbl(1) tables conditional
+ document content.
+
+2021-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add style warnings for documents with input lines that
+ are blank or have leading spaces, since they can cause
+ surprising rendering; enabled if the CHECKSTYLE register is
+ greater than 2.
+
+ * tmac/an-old.tmac (an-blank-line-trap, an-leading-space-trap):
+ Issue style warning if enabled (and only if fill mode enabled in
+ leading space trap); in any event, recreate the default *roff
+ behavior.
+ (TH): Install traps.
+
+ * doc/andoc.tmac (reload-doc): Remove man(7) traps before
+ loading doc.tmac.
+
+2021-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/andoc.tmac (reload-doc): Fix spurious blank line.
+
+2021-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Operators in Conditionals):
+ * man/groff.7.man (Control structures/Conditional expressions):
+ Fix omission; the conditional operators "F", "m", and "S" also
+ accept optional spaces and/or tabs between themselves and their
+ arguments.
+
+2021-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Requests/Request short reference) <.ta>:
+ Describe the request as tersely as possible without omitting its
+ essential syntax and semantics. (The AT&T troff "+" relative
+ prefix for normally absolute positions ".ta 1i +1i +1i" and
+ alignment-specifying suffixes "L", "R", and "C" had both been
+ omitted.)
+
+2021-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Registers/Writable registers): Fix error:
+ \n[nl] interpolates the current vertical position, not the
+ vertical position of the "last printed text baseline"; the
+ latter is \n[.h].
+
+2021-05-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Manipulating Filling and Adjustment): Update
+ inter-sentence space example to be more illustrative. Thanks to
+ Dave Kemper and Doug McIlroy for the discussion.
+
+ Fixes <https://savannah.gnu.org/bugs/?60404>.
+
+2021-05-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common-u: Add comment warning source divers that
+ \n[doc-header-space] is re-used for a purpose for which it is
+ not documented.
+ * tmac/mdoc/doc-nroff-u: Initialize doc-{header,footer}-space
+ registers, which define the vertical spacing between body text
+ and the relevant titles (not between the titles and the page
+ margins) to 1v instead of 0.5i. This is what mdoc(7) has always
+ done in practice, per Ingo Schwarze.
+
+2021-05-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grohtml/post-html.cpp (assert_state::add): Avoid
+ potential deallocation of statically-allocated strings. Use
+ strsave() to duplicate them so that they can be safely handed to
+ a_delete(). Also update diagnostic message to report name of
+ complaining program (continuing the long process of fixing
+ Savannah #52463).
+
+ Fixes <https://savannah.gnu.org/bugs/?55693>. Thanks to
+ Petru-Florin Mihancea for the report.
+
+2021-05-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/troffrc-end: Fix transposition error (in commit a248aa33
+ on 15 January) that broke most table image generation in HTML
+ output.
+
+ Fixes <https://savannah.gnu.org/bugs/?60656>.
+
+2021-05-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac (UE, ME): Replace calls to HTML-NS macro for
+ emissions of HTML 'A' tags with direct usage of \X device
+ control escapes. Replace .nop requests with text lines since
+ this file is supposed to be maximally portable to other *roffs.
+
+2021-05-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (main): Call `scanArguments()`
+ earlier, before trying to load a font description, so that -v,
+ --version, and --help work.
+
+2021-05-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [grohtml]: Add -C and -G options to postprocessor, to suppress
+ output of CreationDate and Creator HTML comments, respectively.
+ These can inject unwanted noise into build artifacts.
+
+ * src/devices/grohtml/post-html.cpp: Add static globals
+ `do_write_creator_comment` and `do_write_date_comment`.
+ (html_printer::{do_file_components,~html_printer}): Write
+ comments per corresponding global variables.
+ (main): Add to `getopt_long()` call parameter and set as needed.
+ (usage): Document them.
+
+ * src/preproc/html/pre-html.cpp (scanArguments): Add to
+ `getopt_long()` parameter, but ignore.
+
+ * src/devices/grohtml/grohtml.1.man (Synopsis, Options):
+ Document them.
+
+ * src/roff/groff/tests/output_driver_C_and_G_options_work.sh:
+ Test them.
+ * tmac/tmac.am (groff_TESTS): Run test.
+
+ Fixes 1/3rd of <https://savannah.gnu.org/bugs/?60655>.
+
+2021-05-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (usage):
+ * src/devices/grohtml/post-html.cpp (usage): Fix inaccuracies in
+ supported option summary.
+
+2021-05-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/html/pre-html.cpp (scanArguments):
+ * src/devices/grohtml/post-html.cpp (main): Use libgroff's
+ warning() instead of printf() to emit diagnostic about
+ unrecognized parameter to `-x` option. This sends the
+ diagnostic to the standard error stream and continues the long
+ process of fixing Savannah #52463.
+
+2021-05-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_www.7.man: Stop using the "www" macro package. The
+ macros it exposes are not part of the quasi-standardized man(7)
+ language, and thus should not be used in man(7) documents. See
+ groff_man_style(7) for portability advice. Besides, the
+ extension macros in the permissively-licensed an-ext.tmac are
+ sufficient to support URL and email hyperlinks, and our SH and
+ SS macro implementations already support anchor placement
+ without requiring explicit effort from page authors.
+ (initialization): Stop sourcing www.tmac. Stop calling .LK and
+ .HR; the page-internal navigation links were being placed after
+ the apropos line instead of at the beginning of the page,
+ contradicting the comment that was there (possibly a bug).
+ (Requests) <URL, LK>: Stop calling .TAG.
+ <LK>: Drop paragraph advising reader to format page for groff's
+ HTML output device to observe the navigation links at that point
+ in the test.
+
+2021-05-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Comments): Fix error in description of parser
+ operation; '.\"' is an effective whole-line comment not because
+ it is a call of an undefined macro named '\"' (no 'mac' warning
+ is emitted when that warning type is enabled), but because the
+ comment escape is recognized normally and what remains is
+ handled as the empty request. Clarify that the optional
+ argument to the .ig request is the name of a macro (which will
+ be called normally _and_ end the ignored region; this is
+ analogous to ".de foo bar").
+
+2021-05-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac (UR, UE, MT, ME): Rename environment and
+ diversion for clarity; they apply to the link text, not the URL
+ {or email address}. The latter might not visibly appear,
+ depending on the output driver.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): Remove extraneous right-brace escape.
+
+ Fixes <https://savannah.gnu.org/bugs/?60651>. Thanks to Bjarni
+ Ingi Gislason for catching it.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Copy Mode): Fix omissions from list of escape
+ sequences interpreted even in copy mode. Add \g, \V, "\.",
+ '\"', \#, \a, \e and \E (with caveat), and \t. Parallels
+ groff(7) now. Add cross reference to "Character Translations"
+ node.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Escape Sequences): Fix omission; the escape
+ character in an unrecognized escape sequence is not merely
+ ignored; the sequence produces a warning diagnostic, albeit of a
+ type that is disabled by default.
+ (Escape Sequences/Escape short reference): Fix omissions; \# and
+ \V are interpreted even in copy mode.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-header): Fix missing brace escape.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Slightly refactor footer spacing management when
+ continuously rendering.
+
+ * tmac/an-old.tmac (an-end): Increase the page length _after_
+ flushing a pending output line. Do so only by the amount of
+ spacing we actually perform next. Make the scaling indicator on
+ the .sp request explicit. The amount seemed magical because it
+ was accounting for the one line to be consumed by output of the
+ footer title line. Instead, move that further increase of the
+ page length from here...
+ (an-footer): ...to here (~250 lines away), before calling BT.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common-u (doc-end-macro): When continuously
+ rendering and after flushing the last line of the body text of a
+ page, vertically space by 3 vees instead of 1, for consistency
+ with our man(7) implementation. Also increase page length by
+ same amount _after_ flushing a pending output line, for symmetry
+ with other spacing requests (and to prevent nasty surprises
+ analogous to those in Savannah #60611).
+ (doc-header): Put 3 vees of space after the header in continuous
+ rendering mode, not 1 (and increase page length accordingly).
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Add warnings for macros deprecated in groff_man(7),
+ emitted if the CHECKSTYLE register is greater than 1.
+
+ * tmac/an-old.tmac (an-deprecation-warn): New macro emits
+ diagnostic.
+ (DT, PD): Call the foregoing, re-using arguments.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Refactor to move bodies of DT and PD into
+ private macros.
+ (an-reset-tab-stops, an-reset-paragraph-spacing): New names for
+ the former DT and PT.
+ (TH): Call these new macro names.
+ (DT, PD): Wrap the corresponding private macros.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-bp): In continuous rendering mode, draw
+ a horizontal line between a page footer of one man page document
+ and the header of the next, but only if multiple documents are
+ being rendered.
+ (initialization): Use variable to ensure we don't draw this line
+ after finishing the only document we render.
+
+ Fixes other half of <https://savannah.gnu.org/bugs/?60611>.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Fix stochastic vertical space loss problems in continuous
+ rendering mode by being more scrupulous about extending the page
+ length. As noted in Savannah #60611, sometimes the vertical
+ space between a header line and the first section heading
+ {"Name"} would be reduced or removed altogether, in a way that
+ was highly sensitive to circumstances. As far as I can tell,
+ the problem is that this vertical space disappeared only when we
+ were in double-secret probation no-space mode; this is the
+ special non-spacing mode {not apparent with inspection of
+ \n[.ns]} that happens when the stealth internal page location
+ trap is sprung. This trap does not appear in .ptr output but
+ can be disabled with ".vpt 0", which is an alternative fix for
+ this problem {because continuous rendering mode does not use
+ vertical position traps at all}. Another fix might have been to
+ simply call the moral equivalent of ".pl MAXINT" as soon as
+ continuous rendering mode was decided upon.
+
+ * tmac/an-old.tmac (an-header): In continuous rendering mode,
+ extend the page length by one line before calling PT to output
+ the page header, and afterwards, extend the page length by 3
+ vees and space by that amount (instead of half an inch).
+
+ Fixes half of <https://savannah.gnu.org/bugs/?60611>.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-header, an-footer): Drop no-op .tl
+ requests.
+
+2021-05-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-footer): Improve symmetry with an-header.
+ If rendering to HTML, don't bother setting the
+ an-outer-footer-text, an-extra1, and an-extra2 strings to empty
+ values; instead don't call BT, just as we don't call PT in
+ an-header.
+
+2021-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-end): Drop needless .nr % assignment.
+ Call our (wrapped) bp instead of the .pl request directly.
+ (an-bp): Drop needless .br and (aliased) real .bp request.
+
+2021-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-footer): Refactor complex conditional.
+
+2021-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_X-register-works.sh: Add test for footer
+ creeping into page content.
+
+2021-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (initialization): Ignore P and X rendering
+ parameter registers if specified with continuous rendering
+ enabled (the default in the nroff mode used for terminals), and
+ emit diagnostic.
+
+2021-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_X-register-works.sh: Rewrite. Increase test
+ coverage and stop assuming that -rcR=1 and -rX=anything is a
+ supported combination. (Continuous rendering is supposed to
+ suppress the printing of page numbers anyway.)
+
+2021-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (initialization): Refactor handling of P and
+ X rendering parameter register validation in preparation for
+ disabling them in continuous rendering mode, where they don't
+ make any sense.
+
+2021-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_TH-repairs-ad-damage.sh: Tweak test
+ internals to make troubleshooting easier.
+
+2021-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): Relocate some initialization logic to
+ be adjacent to (most of) the rest of it.
+
+2021-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): Remove useless .if. Its condition is
+ always true now in the wake of the fix for Savannah #60609.
+
+2021-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Rename many package macros, strings, and
+ registers (and the lone named environment) to be more expressive
+ of their function. "an-footer" is now the proper complement of
+ "an-header" (setting up an environment and calling a
+ user-redefinable trap macro).
+ an-first -> an-is-first-page-of-document
+ an-html -> an-is-output-html
+ an-footer -> an-break-body-text
+ an-p-footer -> an-footer
+ an-set-margin -> an-reset-margin-and-inset-level
+ an-level -> an-inset-level
+ an-tag-sep -> an-tag-separation
+ an-no-space-flag -> an-need-no-space-mode
+ an-break-flag -> an-need-break
+ an-div? -> an-is-in-diversion
+ an-page-string -> an-outer-footer-text
+ an-trap -> an-input-trap
+ an-do-tag -> an-write-paragraph-tag
+ an-1 -> an-env
+
+ * tmac/andoc.tmac (reload-doc): ...as above for the exposed
+ parts of the interface.
+ an-footer -> an-break-body-text
+ an-p-footer -> an-footer
+
+2021-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Rearrange alternating font macros to be in
+ alphabetical order (and the order documented in groff_man(7).
+
+2021-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Refactor alternating font macros. These
+ macros are hard enough to understand without adding gratuitous
+ structural differences to the reader's burden. Make their
+ implementations rigidly parallel. Update comments.
+ (RI, IR, IB, BI, RB, BR): Always define the `an-result` string
+ as empty except for a dummy character '\&' for the sake of
+ compatibility mode.
+ (RI, IR, IB, BI): Defer interpolation of the first argument to
+ the while loop if there are at least two (like the existing RB,
+ BR). This way the style name arguments to the font selection
+ escape sequences in the appendment to `an-result` match the
+ order of the letters in the macro name (useful to make sense of
+ diffs).
+ (RI, IR, IB, BI, RB, BR): Always remove the `an-result` string
+ after interpolating it.
+ (RB, BR): Only do work if there are any arguments.
+
+2021-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Apply italic corrections more consistently.
+
+ * tmac/an-old.tmac (BI, IB, IR, RI): Apply italic corrections
+ more consistently. Add lengthy comment rationalizing approach.
+ (RI, BI): An italic correction is now applied after the last
+ argument if it is of even parity (i.e., the 2nd, 4th, 6th, ...).
+
+ * tmac/groff_man.7.man.in (Description/Font style macros): Note
+ that italic corrections are applied.
+
+ Fixes <https://savannah.gnu.org/bugs/?53541>.
+
+ Thanks to Bjarni Ingi Gislason for the report and a suggested
+ patch.
+
+2021-05-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Ignore FT register when appropriate.
+
+ * tmac/an-old.tmac (initialization): Validate user-specified
+ value of \n[FT]. Continuous rendering ignores FT (page location
+ traps are not used for footers in that mode). Measuring a
+ footer distance from the page top isn't done. A footer distance
+ of over half the page length is unlikely. A footer distance of
+ less than one line height is too. Issue diagnostics in all of
+ these cases.
+
+ * tmac/tests/tmac/tests/\
+ an-old_FT-bad-value-should-not-trash-titles.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?60612>.
+
+2021-05-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): Plant the an-footer trap (where we
+ schedule a break in the page text prior to spacing down to the
+ footer) at twice the value of \n[FT], not a hard-coded -1i.
+ This way, the user can't make the an-p-footer trap (planted at
+ \n[FT]) spring before the an-footer trap that should precede it.
+
+ * tmac/groff_man.7.man.in (Options) <-rFT>: Document this.
+
+2021-05-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_GHOSTSCRIPT_VERSION_CHECK): Add new
+ autoconf macro to check Ghostscript version. Versions 9.00 <= x
+ < 9.54 suffer from a rendering glitch that affects the AT&T
+ troff (and groff) special character \(lh; see
+ <https://bugs.ghostscript.com/show_bug.cgi?id=703187>. Store
+ the result of the check.
+ (GROFF_GHOSTSCRIPT_VERSION_NOTICE): Add new macro to report the
+ problem detected by GROFF_GHOSTSCRIPT_VERSION_CHECK to the user.
+
+ * configure.ac: Call the macros in appropriate places.
+
+ Fixes <https://savannah.gnu.org/bugs/?59531>.
+
+2021-05-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/andoc.tmac (reload-man): Remove removal of RI macro, made
+ unnecessary by commit 551f138 (15 May).
+
+2021-05-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_HTML_PROGRAMS, GROFF_PDFDOC_PROGRAMS):
+ Tweak autoconf warning messages when Ghostscript (gs) command
+ missing to be more mutually congruent.
+ (GROFF_URW_FONTS_CHECK): Tweak to note that gs is only run to
+ locate the URW fonts if gs is available.
+
+2021-05-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_AT-and-UC-footer-saved-and-restored.sh:
+ Tweak to be more helpful when troubleshooting exasperating
+ header/footer problems as in Savannah #60609.
+
+2021-05-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Fix missing page footers when continuously rendering
+ multiple documents. Resolving this uncovered entangled header
+ and footer management bugs with batch processing even when _not_
+ continuously rendering.
+
+ * tmac/an-old.tmac (an-start-new-document): New macro clears
+ header trap so it doesn't get called with stale information.
+ {The TH macro already replants a header trap with every man
+ page if not continuously rendering.} This macro also absorbs
+ the break-page and page number incrementation logic from TH.
+ (TH): Adapt semantics of "an-first" register to mean not "first
+ page rendered" (apparently) but "first page of new document".
+ If we are _not_ on the first page of a new document and the TH
+ macro is called, we must be batch processing: force the previous
+ man page to end (call an-end if continuously rendering, or
+ an-start-new-document if not). After all the header and footer
+ strings have been configured for the man page, call an-header if
+ we're on the first page of the document, not (just) if we're
+ continuously rendering. Zero an-first register at end of macro
+ here unconditionally instead of conditionally in .an-header.
+ (an-header): Drop conditional on continuous rendering.
+
+ When I batch-render our 62 man pages to the terminal, I do note
+ one cosmetic regression: the lj4_font(5) page, when continuously
+ rendered in batch processing, has no space between its header
+ line and first section heading ("Name"). Another cosmetic issue
+ in this scenario is that the footers for every rendered page but
+ the last, which had (wrongly) been absent entirely, are set with
+ no space after them and the header of the next.
+
+ * tmac/tests/an-old_page-footers-present.sh:
+ * tmac/tests/an-old_page-header-has-current-data.sh: Add man
+ page header/footer regression tests.
+ * tmac/tmac.am (tmac_TESTS): Run the tests.
+
+ Fixes <https://savannah.gnu.org/bugs/?60609>.
+
+2021-05-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (initialization): Key the reprocessing guard
+ {like a C language #include guard} on the existence of the TH
+ macro instead of RI. The latter seemed kind of random and TH
+ is even more guaranteed to exist; it is the macro name most
+ characteristic of the man(7) language and the andoc.tmac
+ superstructure relies on it. (TH may have been avoided because
+ of its use with tbl(1); however, neither man(7) nor mdoc(7)
+ support tbl's TH feature, and GNU tbl does not supply its own
+ empty fallback definition as it does for TS and TE. If we ever
+ want TH-like functionality in future man pages, I suggest we
+ pick a new, non-colliding name for it.)
+ (initialization): Relocate load of devtag package; we don't
+ need it before entering compatibility mode. Move assignment of
+ format of an-page-letter register from a "loose declaration"
+ amid macro definitions to within existence test of X register.
+ Stop initializing an-extra[123] strings outside of any macro;
+ they need to be reinitialized at every TH call when batch
+ rendering.
+ (TH): Call DT in a less surprising place.
+ (TH): Initialize all header/footer-related strings before
+ calling header macros, even those not needed for the default
+ header configuration.
+ (TH): Add style warnings for underspecified arguments.
+ (an-ne): Rename register from "an-need", which is pretty
+ confusing in context, to "an-amount", since (1) a (vertical)
+ amount is what it is, and (2) it's only used within this macro.
+ Also due to factor (2), remove the register after using it.
+
+2021-05-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * m4/groff.m4 (GROFF_URW_FONTS): Update configure script check
+ for URW fonts to recognize recent releases of the URW Base 35
+ fonts from Artifex Software. Look for the AR (Arial roman
+ equivalent) font under all of the names recognized by
+ fonts/devpdf/Foundry.in.
+ * m4/groff.m4 (GROFF_URW_FONTS_CHECK): Update wording of notice
+ when URW fonts are not found. Replace dead URL with working
+ one. Try to hedge against the future, but the Web is an
+ ephemeral place, as are the file names Artifex gives to its
+ fonts. Thanks to T. Kurt Bond and Thomas Dupond for reporting
+ and investigating the problem.
+
+ Fixes <https://savannah.gnu.org/bugs/?60604>.
+
+2021-05-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (ms Document Control Settings) <DI>:
+ * doc/ms.ms (Document control settings, Displays and keeps)
+ <DI>:
+ * tmac/groff_ms.7.man (Document control settings, Displays and
+ keeps) <DI>: Document this register; it had been mentioned only
+ in passing.
+
+2021-05-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (ms Document Control Settings) <DD>:
+ * doc/ms.ms (Document control settings) <DD>:
+ * tmac/groff_ms.7.man (Document control settings) <DD>: Fix
+ error; changes to \n[DD] take effect at the next display
+ boundary (including the end of the active one), not the next
+ "paragraph" (paragraph macros cannot be called inside a display
+ anyway).
+
+2021-05-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/andoc.tmac (reload-man): Delete no-op line that attempts
+ to restore compatibility mode. Individual pages have to do
+ this, and ".do cp \n(.C" is not effective for the reason
+ discussed in the 2020-04-16 ChangeLog entry.
+
+2021-05-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (@RT): Delete definition; make it an alias for
+ par@finish. Until commit 021ba0e7 (1 May), they had identical
+ definitions. I find it difficult to imagine what use it would
+ be to have an undocumented reset macro that resets everything
+ _except_ the deeply internal \n[.ev]:ai.
+
+2021-05-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: Handle HF strings with an embedded font family when
+ applying italic-to-bold-italic remapping; the feature now works
+ on troff devices as well.
+
+ * tmac/an-old.tmac (initialization): Do more validity checking.
+ Store heading family in new string \*[an-heading-family]. Clean
+ up after self.
+ (SH, SS): Include the heading family in the remapping target.
+
+ * tmac/groff_man.7.man.in (Description/Document structure
+ macros) <.SH, .SS>: Document it.
+
+2021-05-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff_char.7.man (Glyph tables/Mathematical symbols): Fix
+ errors in special character descriptions; \[sqrt] is a "special"
+ glyph (that is, it uses mathematical metrics on typesetter
+ devices), and \[radicalex) is not (and is thus a "text" glyph).
+ See Werner Lemberg's ChangeLog entry of 2003-01-05. Problem
+ dates to 07a6233ad, 27 May 2014.
+
+ The overloaded use of the word "special" really pinches here.
+
+2021-05-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tty.tmac: Replace fallback glyphs for radical extension
+ and square root extension; use \[rn] instead, which works fine.
+
+ Now the only glyph in the page that doesn't render on a UTF-8
+ terminal (if one's font has adequate coverage) is the Bell
+ System logo.
+
+2021-05-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tty.char: Add fallback characters for \[fm] and \[sd].
+
+2021-05-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [man]: If \*[HF] is a bold style, substitute bold italics for
+ italics in section and subsection headings, keeping the font
+ weight consistent.
+
+ * tmac/an-old.tmac (initialization): Set a flag for this based
+ on the interpolation of \*[HF] matching "B" as its last
+ character.
+ (SH, SS): Apply and reverse font remapping based on this flag.
+
+2021-05-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac (EX): Work around Savannah #59522 by changing
+ fonts differently on DVI output, avoiding a font warning.
+
+2021-05-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac: If in nroff mode, remap font CBI to BI.
+ * tmac/dvi.tmac: Remap font CBI to CWI. (Computer Modern
+ Constant Width has no bold styles.)
+
+2021-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (NL, SM, LG): Issue warning diagnostic if macro
+ called with arguments.
+ (par*define-font-macro): Construct font macro with diagnostic to
+ warn if called with excess arguments.
+ (UL, BX): Issue warning diagnostic if macro called with excess
+ arguments.
+
+ Fixes <https://savannah.gnu.org/bugs/?60522>.
+
+2021-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi: Delete redefinition of \putwordAppendix
+ Texinfo macro. This restores the word "Appendix" to the names
+ of all appendices and fixes two bad internal links to Appendix
+ E, the Register Index, in the DVI and PDF output formats. Per
+ consultation with Texinfo maintainer Gavin Smith, it's difficult
+ to get the behavior we want, so give up trying for now.
+
+2021-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (@MC): Actually diagnose and recover when user
+ tries to .MC inside a diversion.
+
+2021-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Differences from AT&T ms):
+ * doc/ms.ms (Differences from AT&T ms):
+ * tmac/groff_ms.7.man (Differences from AT&T ms): Document our
+ different default (empty) for the center footer in nroff mode;
+ this behavior appears to date back to June 1991 or earlier,
+ drawing few complaints.
+
+ Fixes <https://savannah.gnu.org/bugs/?59826>.
+
+2021-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/*: Rename files to use consistent scheme; one
+ underscore to separate the package name from the test objective,
+ dashes to otherwise separate words.
+ * tmac/tmac.am (tmac_TESTS): Use new names.
+
+2021-05-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Restore support for AT&T ms PN register.
+
+ * tmac/s.tmac (pg): Make register PN an alias of %.
+
+ * doc/groff.texi (Differences from AT&T ms):
+ * doc/ms.ms (Differences from AT&T ms):
+ * tmac/groff_ms.7.man (Differences from troff ms): We don't need
+ PN, and it was removed in commit 08291b40 (25 October 2020), but
+ since it is documented in Lesk 1978 we're stuck with it. Advise
+ users to stick with %. Also warn them of the hoop they must
+ jump through if they redefine the page trap macro PT, which Lesk
+ 1978 also encourages.
+
+ * tmac/tests/s_PN-works.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?59823>.
+
+2021-05-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Restore default IP paragraph indentation after an SH call.
+
+ * tmac/s.tmac (par@finish): Set "ai" register for the current
+ environment to the paragraph indent (PI) setting for the current
+ environment.
+
+ * doc/groff.texi (Highlighting in ms) <IP>:
+ * doc/ms.ms (Highlighting) <IP>:
+ * tmac/groff_ms.7.man (Usage/Highlighting) <IP>: Update
+ documentation.
+
+ * tmac/tests/s_SH_resets_IP_indentation_amount: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?60222>.
+
+2021-05-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (DS): Issue diagnostic and attempt recovery if
+ document attempts to start a display within another display.
+
+ Fixes <https://savannah.gnu.org/bugs/?55136>.
+
+2021-04-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Implement alternative rendering for automatic
+ footnote numbers in nroff mode, inspired by Heirloom Doctools
+ ms; since superscripting is not universally available on
+ terminals, surround number with square brackets instead.
+ (fn@init): New macro finishes initializing footnote module,
+ setting up aliases to par@sup-{start,end} strings in troff mode
+ and otherwise defining fn@sup-{start,end} as brackets. Define *
+ string here, using new strings.
+ (par): Call fn@init after par@sup-{start,end} are defined, and
+ prior to other footnote integration material.
+ (par*fp!0): Migrate from par@sup-{start,end} to
+ fn@sup-{start,end}.
+
+ * doc/groff.texi (ms Document Control Settings) <FF>:
+ * doc/ms.ms (Footnotes) <FF>:
+ * tmac/groff_ms.7.man (Usage/Footnotes) <FF>: Document it.
+
+ Fixes <https://savannah.gnu.org/bugs/?60228>.
+
+2021-04-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * test-groff.in: Stop passing the built groff executable -b and
+ -ww options by default. This reverses a change from 2017. Dave
+ Kemper has convincingly argued that there's no way to override
+ -b and turn backtraces on warnings/errors back off, and that the
+ built groff should behave as much like a "normal" one as
+ possible. The latter factor is of added importance now that we
+ are using test-groff for generation of documents.
+
+ * src/roff/groff/tests/regression_savannah_58153.sh: Adapt.
+
+2021-04-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (BX): Add alternative implementation for terminal
+ {nroff} devices. Store width of boxed text, adding .4m only on
+ troff devices (to make room for the vertical box lines). Break
+ long input line in troff implementation. If not in troff mode,
+ use ISO 6429 color escapes to render boxed text in black on
+ white. Use the \Z escape to match breaking semantics of macro
+ in troff mode.
+
+ * doc/groff.texi (Highlighting in ms) <BX>:
+ * doc/ms.ms (Highlighting) <BX>:
+ * tmac/groff_ms.7.man (Usage/Highlighting) <BX>: Document it.
+
+ Fixes <https://savannah.gnu.org/bugs/?60477>.
+
+2021-04-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am: Make $(PROCESSEDDOCFILES) depend on all the same
+ targets as $(PROCESSEDEXAMPLEFILES); this way the me, ms, and
+ pic.ms manuals are all regenerated upon changes to their
+ underlying macro packages.
+
+2021-04-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * INSTALL.extra: Update.
+ (Evaluation): New section updates material on "test-groff"
+ script. Also tell people how to preview our Texinfo manual (in
+ info, text, DVI, PDF, and HTML formats).
+ (In Case of Trouble): New section updates bug reporting URL.
+
+ Fixes <https://savannah.gnu.org/bugs/?57863>.
+
+2021-04-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Make the FAM string work more sensibly; it now
+ applies to headers, footers, and footnotes only if set
+ before the first call of a sectioning, paragraphing, or
+ {non-date} document description macro.
+ (PT, BT): Set the font family to that saved for titles.
+ (fn*do-FS): Set the font family to that saved for footnotes.
+ (par@init): Copy the document font family to independent strings
+ for titles and footnotes.
+ (par@reset): If in a footnote environment, set the font family
+ to that saved for footnotes; otherwise use \*[FAM].
+
+ * tmac/groff_ms.7.man (Differences from troff ms/Text settings):
+ Describe placement-dependent effect of FAM string setting.
+
+ * doc/groff.texi (Highlighting in ms):
+ * doc/ms.ms (Highlighting): As above, and suggest different
+ occasions in which ".ds FAM C" and "CW" are convenient.
+
+ Fixes <https://savannah.gnu.org/bugs/?60422>.
+
+2021-04-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (source, source_quietly)
+ (macro_source, macro_source_quietly): Use idiomatic Boolean
+ literals.
+
+2021-04-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi: Drop workarounds for Texinfo pre-5.0 versions;
+ our local macros produced many warnings during generation of our
+ Texinfo manual.
+ (Langlemacro):
+ (Ranglemacro):
+ (Lparenmacro):
+ (Rparenmacro):
+ (Lbrackmacro):
+ (Rbrackmacro): Delete. Replace call sites with literals.
+ (Lbracemacro):
+ (Rbracemacro): Delete. Replace call sites with @lbracechar{}
+ and @rbracechar{}.
+ (angles): Reimplement in terms of @guilsinglleft{} and
+ @guilsinglright{}. Flesh out comment.
+
+ Fixes remainder of <https://savannah.gnu.org/bugs/?59524>.
+
+2021-04-17 Dave Kemper <saint.snit@gmail.com>
+
+ * doc/meintro.me:
+ * doc/meref.me: Correct and make consistent usage of the term
+ "point size".
+
+ Fixes <https://savannah.gnu.org/bugs/?60403>.
+
+2021-04-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (SS): Add devtags support. Set a subsection
+ title as a second-level heading and add it to a table of
+ contents, if any. Prompted by a query from Hans Unzner to the
+ groff mailing list. Thanks, Hans!
+
+2021-04-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (SH): Fix apparent thinko. Pass the devtags
+ macro a literal "1" argument. Passing it \n[an-level] wasn't
+ correct (it stores the relative inset level, not a sectioning
+ level), and was useless anyway: SH has already called
+ .an-set-margin by this point, which resets \n[an-level] to 1.
+ man(7) does not support nesting of SH macros. Also call
+ .DEVTAG-NH by its alias .DEVTAG-SH since section headings are
+ not numbered in man(7).
+
+2021-04-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tmac]: Adjust editor file encoding hints.
+
+ * tmac/cs.tmac: Tell Vim the file is "iso-8859-2" (ISO Latin-2).
+ * tmac/en.tmac: Stop telling Emacs the file is "latin-1"; it's
+ ASCII.
+ * tmac/fr.tmac: Tell Vim file is "iso-8859-15" (ISO Latin-9).
+
+ Vim users may need to use ":e ++enc=iso-8859-2", for instance,
+ to see correct glyphs.
+
+2021-04-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ The first-order determinant of hyphenation points is language,
+ not territory. Use ISO 639 2-letter language codes for
+ hyphenation and exception patterns instead of ISO 3166 2-letter
+ territory codes.
+
+ * tmac/*.us: Rename *.us files to *.en.
+ * tmac/troffrc: Change hyphenation language "us" to "en".
+ * tmac/en.tmac: Add English localization file. Set hyphenation
+ mode to 4.
+ * tmac/troffrc: Derive groff locale from system.
+
+ * doc/groff.texi (Manipulating Hyphenation):
+ * man/groff.7.man (Hyphenation):
+ * man/groff_diff.7.man (Implementation differences): Refer to
+ "U.S. English" hyphenation patterns as simply "English"; they
+ will be mostly correct for Commonwealth English as well, and no
+ alternative English hyphenation patterns for other territories
+ are available.
+
+ * doc/groff.texi (Manipulating Hyphenation):
+ * man/groff_diff.7.man (New requests): Note that default
+ hyphenation mode depends on the language used on the system.
+ Add concept index entry for localization. Add file index
+ entries for the locale macro files (cs.tmac, etc.). Update to
+ reflect rename of English hyphenation patterns and .hla
+ identifier from "us" to "en".
+
+ * src/roff/groff/tests/localization_works.sh: Add 10 test cases.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+ * tmac/LOCALIZATION: Rewrite.
+
+ Fixes <https://savannah.gnu.org/bugs/?59814>.
+
+2021-04-12 Dave Kemper <saint.snit@gmail.com>
+
+ * doc/meref.me: Correct various small issues.
+
+ Fixes <https://savannah.gnu.org/bugs/?60379>.
+
+2021-04-12 Dave Kemper <saint.snit@gmail.com>
+
+ * man/groff.7.man (Registers/Writable registers) <year, yr>:
+ Drop discussion of Y2K issues.
+
+ Fixes <https://savannah.gnu.org/bugs/?60372>.
+
+2021-04-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Setting Registers) <rnn>: Fix error: the
+ request is not ignored if the second argument (the new name)
+ does not exist. Problem dates back to 52a6d12a (11 May 2000).
+
+2021-04-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Implement new .soquiet and .msoquiet requests.
+
+ Needed for two planned developments: {1} the i18n patch in
+ Savannah #59814 can use this to quietly attempt to open a
+ localization file. groff only supports a few locales, so people
+ with LANG=es_ES, for instance, would ordinarily see warning
+ diagnostics on every groff startup; and {2} system- or
+ site-configurable support of per-user {.,}troffrc or man.local
+ files, gracefully failing if they don't exist.
+
+ * src/roff/troff/input.cpp:
+ (do_source): Add new function, taking boolean "quietly"
+ parameter and absorbing function of source(), with added
+ conditional.
+ (source): Convert into a wrapper to call do_source() unquietly.
+ (source_quietly): Wrap do_source(), quietly.
+ (do_macro_source, macro_source, macro_source_quietly): Analogous
+ to the foregoing.
+ (init_requests): Hook "msoquiet" to macro_source_quietly() and
+ "soquiet" to "source_quietly().
+
+ * doc/groff.texi (I/O):
+ * man/groff.7.man (Requests/Request short reference):
+ * man/groff_diff.7.man (Language/New requests): Document them.
+
+ * src/roff/groff/tests/msoquiet_works.sh:
+ * src/roff/groff/tests/soquiet_works.sh: Test them.
+
+ * src/roff/groff/groff.am (groff_TESTS): Add tests.
+
+ Fixes <https://savannah.gnu.org/bugs/?59973>.
+
+2021-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (ms Document Control Settings) <FF>: Update
+ description to cover application of footnote format to footnote
+ markers in general, not just numbers. Clarify different
+ behavior of format 1 with respect to automatic numbers and other
+ markers.
+ (ms Footnotes) <*>: Describe string operation in more detail.
+ <FS>: Describe more precisely how the optional argument is
+ handled.
+
+ * doc/ms.ms (Footnotes): Synchronize with doc/groff.texi. Add
+ example using document's own text as a model.
+
+ * tmac/groff_ms.7.man (Usage/Footnotes): Resync relevant
+ portions with doc/ms.ms.
+
+ Fixes <https://savannah.gnu.org/bugs/?60227>.
+
+2021-04-06 Dave Kemper <saint.snit@gmail.com>
+
+ * src/roff/nroff/nroff.sh: Recognize -k and -K options and pass
+ them through to troff. Document them in usage message.
+ * src/roff/nroff/nroff.1.man: Document new -k and -K options.
+
+ Fixes <https://savannah.gnu.org/bugs/?60349>.
+
+2021-04-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Manipulating Hyphenation):
+ Recast introductory paragraph to better distinguish the
+ automatic breaking of words and placement of hyphens at
+ user-specified hyphenation points (done with the \% escape) and
+ automatic determination of hyphenation points within words (what
+ the pattern files and most of the hyphenation mode parameters
+ are for). Clarify that what our manual calls "automatic
+ hyphenation" pertains only to the latter.
+ <hw> Correct over-general claim; hyphenation exceptions defined
+ with the .hw request _do_ honor .hy value 2 (don't break a word
+ at the bottom of a page), but none of the others.
+ <\%> Recast description of escape to emphasize independence of
+ its two uses (e.g., "\%pseudo\%unununium" is hyphenated only
+ after "pseudo-", if at all).
+ <\:> Clarify that escape is an input word boundary.
+ <shc> Clarify that the soft hyphen glyph is applied to manual as
+ well as automatically-determined hyphenation points.
+ <hy> Recharacterize as setting the _automatic_ hyphenation mode.
+ Note that restrictions apart from value 2 are not applied to
+ words with manually-assigned hyphenation points.
+ <nh> Note that request affects only automatic hyphenation.
+
+ * man/groff.7.man (Requests/Request short reference) <.hy,.nh>:
+ Clarify that requests deal with _automatic_ hyphenation.
+ (Registers/Read-only registers) <.hy>:
+ Clarify that register applies to _automatic_ hyphenation.
+ (Hyphenation): Add new introductory paragraph summarizing manual
+ hyphenation support and features, including notice that breaking
+ at explicit hyphens is performed in fill mode, i.e., even if
+ _automatic_ hyphenation is disabled.
+
+ Thanks to Peter Schaffter for the report.
+
+ Fixes <https://savannah.gnu.org/bugs/?60332>.
+
+2021-03-27 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Changes to the ghostscript fontnames (9.53.3).
+
+ * font/devpdf/Foundry.in: HI and HBI switch to using
+ Italic rather than Oblique.
+
+2021-03-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Manipulating Filling and Adjustment):
+ * man/groff_diff.7.man (Language/Extended requests): Fix
+ incorrect claim that additional inter-sentence space is applied
+ only in fill mode. Drop word "parameter" from description of
+ unit used in .ss request arguments; it is a needlessly specific
+ reference to the font file format. Tighten wording.
+
+ * man/groff.7.man (Control Characters): Fix incorrect claim that
+ end-of-sentence detection is attempted only in fill mode. Note
+ that .ss request also affects inter-word spacing.
+
+ * man/groff_diff.7.man (Language/Extended requests):
+ - Drop example.
+ - Move discussion of AT&T vs. GNU troff difference in .ss
+ handling from here...
+ (Implementation Differences): ...to here.
+
+ Thanks to Dave Kemper for his continued scrutiny!
+
+2021-03-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (ms Cover Page Macros):
+ * doc/ms.ms (Cover page macros):
+ * tmac/groff_ms.7.man (Usage/Cover page macros): Revise and
+ rename (sub)sections to "Document description macros".
+
+2021-03-15 Dave Kemper <saint.snit@gmail.com>
+
+ * Makefile.am: Fix typos. Thanks to Bjarni Ingi Gislason for
+ the report.
+
+ Fixes <https://savannah.gnu.org/bugs/?59457>.
+
+2021-03-14 Dave Kemper <saint.snit@gmail.com>
+
+ * man/groff_tmac.5.man: Correct erroneous reference to PSPIC
+ where PDFPIC was intended. Fix numerous smaller style and
+ content problems.
+
+ Fixes <https://savannah.gnu.org/bugs/?60229>.
+
+2021-03-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Optional man extensions) <CW, EX, PN, Pn>:
+ (Highlighting in ms) <CW>:
+ (Additional ms macros) <CW>: Use "monospaced" to refer to font
+ selected, retaining "constant-width" term only where it explains
+ the macro mnemonic. Thanks to Dave Kemper for pointing out the
+ issue. Also fix error: .CW in the ms package seems to have
+ originated with Research Unix, not Berkeley.
+
+ * doc/ms.ms (Highlighting) <CW>: Sync with our Texinfo manual.
+ * tmac/groff_ms.7.man: Sync with ms.ms, omitting FAM advice.
+
+ Fixes <https://savannah.gnu.org/bugs/?60037>.
+
+2021-03-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Identifiers, Strings, Writing Macros)
+ (Diversions): Improve cross-linkage of documentation regarding
+ shared name space of macros, strings, diversions, and boxes.
+
+ Fixes <https://savannah.gnu.org/bugs/?58995>.
+
+2021-03-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Improve diagnostic messages.
+ (@diag): New macro wraps .tm request, always prefixing it with
+ the name of the macro package, as well as file and line
+ indicators only if these are set to non-empty or non-zero
+ values, respectively.
+ (@error, @warning): Call @diag instead of .tm directly.
+ (@fatal): Retire; it had only one call site and it would have
+ greatly complicated @diag to support calling .ab instead of .tm.
+ An ugly alternative would have been to call .ab with a redundant
+ message after calling @diag.
+ (@divert): New macro wraps .di request, remembering the name of
+ the current file (\n[.F]) when a diversion is started.
+ (@error-recover): Call .ab instead of (deleted) @fatal.
+ (pg@super-eject): Tell user what the last file name seen was
+ when recovering from an unfinished diversion when processing
+ ends.
+
+ Fixes <https://savannah.gnu.org/bugs/?55099>.
+
+2021-02-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Fix bug where having line numbering off but the output line
+ number register \n[ln] set to a positive value would cause
+ tbl(1) table rows to spontaneously become numbered. Use new
+ \n[.nm] register to determine whether line numbering is enabled.
+
+ * src/preproc/tbl/table.cpp (table::init_output, table::do_row)
+ (table::do_bottom): Predicate all conditions on \n[ln]
+ additionally on \n[.nm].
+
+ Thanks to Olle Lögdahl for the report. Problem appears to date
+ back to commit b69062693d3360efce9d4d63fac337be21e07db7, 20 July
+ 2011.
+
+ Fixes <https://savannah.gnu.org/bugs/?59812>.
+
+2021-02-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #59812.
+
+ * src/preproc/tbl/tests/cooperate-with-nm-request.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TEST): Run test.
+
+2021-02-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Implement new read-only register ".nm". It reports the
+ enablement status of output line numbering (caused by the .nm
+ request) irrespective of the temporary suspension of numbering
+ with the .nn request. Needed because there was no way to
+ introspect its state, tbl(1) needs to do so, and the writable
+ line number register \n[ln] is not a reliable proxy for it.
+
+ * src/roff/troff/env.h: Add get_numbering_nodes(), returning
+ `int`, to public interface of `environment` class.
+ * src/roff/troff/env.cpp: Implement get_numbering_nodes().
+
+ * src/roff/groff/tests/dot-nm_register_works.sh: Test it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+ * doc/groff.texi (Miscellaneous):
+ * man/groff_diff.7.man (Language/New number registers):
+ * man/groff.7.man (Registers/Read-only registers): Document it.
+
+ * NEWS: Add item.
+
+2021-02-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Emit warning diagnostic when using a multi-page
+ table with a repeating header (".TS H").
+ (KS): Rename diversion from "kp*div" to "kp@div" since the name
+ is now referenced outside the keep module.
+ (KF): ...similarly for kp@fdiv.
+ (generally): Update diversion dereference sites and derived
+ names.
+ (@TS): When handling "H" argument, check identity of current
+ diversion and emit appropriately worded warning.
+
+2021-02-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * FOR-RELEASE: Add more procedures and information related to
+ incrementing groff's version number.
+
+2021-02-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/searchpath.cpp (search_path::open_file)
+ (search_path::open_file_cautious): Save errno before calling
+ free() and restore it afterwards. A future version of POSIX
+ will require that free() not change errno if it succeeds[1];
+ some C library implementations, including recent versions of
+ glibc[2], lack this property. free() is called in these
+ libgroff functions to clean up after an unsuccessful fopen() of
+ a heap-allocated file name string, and because the errno from
+ fopen() may be passed to strerror() in a diagnostic message, it
+ needs to be accurate. I checked the rest of groff's codebase
+ and found no other instances of free() being used to clean up
+ after fopen() failure.
+
+ [1] https://www.austingroupbugs.net/view.php?id=385
+ [2] https://sourceware.org/bugzilla/attachment.cgi?id=13073
+
+2021-02-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Address build failure on macOS.
+
+ Follow the advice of the gnulib manual ("Changing your source
+ for use with gnulib") more scrupulously; include config.h in
+ more files.
+
+ * src/libs/libgroff/curtime.cpp [HAVE_CONFIG_H]:
+ * src/libs/libgroff/device.cpp [HAVE_CONFIG_H]:
+ * src/libs/libgroff/fatal.cpp [HAVE_CONFIG_H]:
+ * src/libs/libgroff/string.cpp [HAVE_CONFIG_H]:
+ * src/libs/libgroff/strsave.cpp [HAVE_CONFIG_H]:
+ * src/preproc/eqn/other.cpp [HAVE_CONFIG_H]:
+ * src/preproc/eqn/text.cpp [HAVE_CONFIG_H]:
+ * src/preproc/pic/object.cpp [HAVE_CONFIG_H]: Do it.
+
+ * src/libs/libgroff/assert.cpp [HAVE_CONFIG_H]:
+ * src/libs/libgroff/errarg.cpp [HAVE_CONFIG_H]:
+ * src/libs/libgroff/error.cpp [HAVE_CONFIG_H]: #include
+ config.h using angle brackets instead of quotation marks.
+
+ Fixes <https://savannah.gnu.org/bugs/?60035>.
+
+2021-02-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #60025.
+
+ * tmac/tests/doc_Mt-works.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2021-02-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Demote definition of \[yogh] special character escape from
+ unconditional availability to be defined only if the output
+ device defines it or if .AM macro is called to enable support
+ for Berkeley-style accent marks.
+
+ See
+ https://lists.gnu.org/archive/html/groff/2021-01/msg00000.html
+ and follow-ups for discussion.
+
+ * tmac/s.tmac (initialization): Move definition of \[yogh] (only
+ if the output device doesn't already define it) from here...
+ (AM): ...to here.
+
+2021-02-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/ms.ms: Use \[ps] special character instead of local
+ character definition using numeric code point escape, which is
+ less portable.
+
+ Fixes <https://savannah.gnu.org/bugs/?59528>. Thanks to Bjarni
+ Ingi Gislason for the report and a suggested patch.
+
+2021-02-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (initialization): Call par*define-font-macro with
+ arguments "CW" and "R" in nroff mode to silence font warnings
+ from documents using .CW macro in nroff mode.
+
+2021-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::init_output): Save value of
+ hyphenation maximum consecutive line count register (\n[.hlm])
+ more carefully to keep it from being incorrectly parsed as a
+ decrement, because negative values of \n[.hlm] are valid (in
+ fact, "-1" is the default). In documents with a large number of
+ tables, this can lead to a Persian chessboard problem and an
+ integer overflow (at the groff language level, caught and
+ handled by src/roff/troff/number.cpp:parse_term()).
+
+ It is wise to wrap a non-literal second argument to the .nr
+ request in parentheses if assignment is desired and its value
+ can be negative. See section 5.6.1 ("Setting Registers") of the
+ groff Texinfo manual.
+
+ Fixes <https://savannah.gnu.org/bugs/?59993>.
+
+2021-02-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * test-groff.in: Add support for rfc1345.tmac.
+
+2021-02-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Integrate rfc1345.tmac into build system.
+
+ * contrib/rfc1345/rfc1345.am: Do it.
+ * Makefile.am: Include contrib/rfc1345/rfc1345.am.
+
+2021-02-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (open_mac_file): Report problem when
+ attempting to open macro files (-m arguments) and the error is
+ something other than ENOENT.
+ (process_macro_file): Update diagnostic to be more precise; the
+ file couldn't be _opened_, not necessarily _found_, and clarify
+ that the string being reported back to the user is the argument
+ to the -m option, not a file name.
+ (macro_source): Update diagnostic to report that the file
+ couldn't be _opened_, not necessarily _found_, and include the
+ nature of the problem.
+
+2021-01-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [tbl]: Save and restore hyphenation parameters.
+
+ * src/preproc/tbl/table.cpp (table::init_output): When starting
+ a table, save the hyphenation parameters (\n[.hy], \n[.hla],
+ \n[.hlm], \n[.hym], \n[.hys]). Restore them in the table reset
+ macro (confusingly called "3init"), which is called before
+ performing each diversion and before exiting a table.
+
+ This enables people to, e.g., turn off hyphenation in a table
+ text block with .nh, just as they can turn off adjustment with
+ .na, without having to manually reset it. The next text block,
+ and the material after the table, will not be affected.
+
+ Fixes <https://savannah.gnu.org/bugs/?59971>.
+
+2021-01-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #59971.
+
+ * src/preproc/tbl/tests/\
+ save-and-restore-hyphenation-parameters.sh: Do it.
+ * src/preproc/tbl/tbl.am (tbl_TEST): Run test.
+
+2021-01-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am ($(TMACSTRIPFILES)):
+ ($(TMACMDOCSTRIPFILES)): Remove unidiomatic for loop which
+ frustrated parallel make operation.
+
+ Thanks to an anonymous contributor for the report and patch.
+
+ Fixes <https://savannah.gnu.org/bugs/?59958>.
+
+2021-01-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/ms.ms (Document control settings): Document old FAM string
+ and new FR string.
+
+2021-01-29 T. Kurt Bond <tkurtbond@gmail.com>
+
+ [ms]: Add new string FR to hold an expression for computing the
+ footnote length relative to the line length, consistently for
+ single- and multi-column modes, which \n[FL] has never done.
+
+ * tmac/s.tmac: Initialize FR string to "11/12".
+ (@MC): Compute footnote column width using \*[FR] instead of a
+ hard-coded "11/12" expression.
+ (par@init): Compute default \n[FL] using \*[FR] instead of a
+ hard-coded "11/12" expression.
+
+ * doc/groff.texi (Macro Packages/ms/Document control settings):
+ * tmac/groff_ms.7.man (Usage/Document control registers):
+ Document it.
+
+ Fixes <https://savannah.gnu.org/bugs/?59605>.
+
+2021-01-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp: Add ADJUST_MAX enumeration constant to
+ record maximum valid numerical adjustment mode.
+ (adjust): Verify numeric argument against ADJUST_MAX instead of
+ a numeric literal. Ignore excessively large values instead of
+ setting adjustment mode to "right". Update warning diagnostic.
+
+2021-01-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for .ad and .na requests.
+
+ * src/roff/groff/tests/adjustment_works.sh: Do it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2021-01-24 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Manipulating Filling and Adjustment):
+ * man/groff.7 (Requests/Request short reference): Clarify
+ behavior of ".na" and ".ad l".
+
+ Thanks to Bjarni Ingi Gislason for pointing out the potential
+ for confusion and for his careful review of the new text.
+
+ Fixes <https://savannah.gnu.org/bugs/?59795>.
+
+2021-01-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/grog/grog.pl: Report program name in fatal error
+ diagnostics. Also drop sentence-ending punctuation since Perl
+ supplies additional information.
+
+ Continues the long process of fixing Savannah #52463.
+
+2021-01-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (RE): Style-warn if macro arguments are out
+ of range or redundant.
+
+ Fixes <https://savannah.gnu.org/bugs/?55320>.
+
+2021-01-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Improve style of troffrc{,-end} files. Follow established
+ idioms and make them consistent with each other.
+
+ * tmac/troffrc:
+ * tmac/troffrc-end:
+ - Identify files in header comments as part of GNU troff.
+
+ * tmac/troffrc:
+ - Clarify purpose of .do request.
+ - Identify .X (set by groff -X) as a register, not a string.
+ - Remove temporary registers one per line to make
+ synchronization with foregoing logic easier. Fixes name
+ space management nits: an undefined string troffrc!Xps was
+ being removed, and troffrc!{ascii,latin1,utf8,cp1047} were
+ not being removed despite being defined.
+
+ * tmac/troffrc-end:
+ - Clarify that file is read after -m file arguments (not "all
+ macro sets", which can be loaded with .mso after this file
+ is processed).
+ - Advise usage of .do for groff extensions.
+ - Line-break one-off conditionals as troffrc does.
+ - Add empty string comment to empty string definitions.
+
+2021-01-14 Dave Kemper <saint.snit@gmail.com>
+
+ Commit 87edb525, from 2003, added character U+2026 (HORIZONTAL
+ ELLIPSIS) to most base groff fonts, but there has been no
+ kerning information for this character. To produce consistent
+ typography, it should be kerned the same way as the period,
+ which is in 818 kern pairs across all the devps fonts.
+
+ Apply the following shell command to the groff description files
+ of the PostScript fonts.
+
+ for file in font/devps/*[A-Z]
+ do sed -Ei\~ 's/(.*)(^| )\. (.*)/&\n\1\2u2026 \3/' $file
+ done
+
+ * font/devps/AB:
+ * font/devps/ABI:
+ * font/devps/AI:
+ * font/devps/AR:
+ * font/devps/BMB:
+ * font/devps/BMBI:
+ * font/devps/BMI:
+ * font/devps/BMR:
+ * font/devps/HB:
+ * font/devps/HBI:
+ * font/devps/HI:
+ * font/devps/HNB:
+ * font/devps/HNBI:
+ * font/devps/HNI:
+ * font/devps/HNR:
+ * font/devps/HR:
+ * font/devps/NB:
+ * font/devps/NBI:
+ * font/devps/NI:
+ * font/devps/NR:
+ * font/devps/PB:
+ * font/devps/PBI:
+ * font/devps/PI:
+ * font/devps/PR:
+ * font/devps/TB:
+ * font/devps/TBI:
+ * font/devps/TI:
+ * font/devps/TR:
+ * font/devps/ZCMI: Apply above script.
+
+ Fixes <https://savannah.gnu.org/bugs/?58897>. However, this
+ will need to be done again if afmtodit is used to regenerate the
+ above files, or afmtodit will need to be modified to add this
+ kerning information itself.
+
+2021-01-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/relocate.cpp (set_current_prefix) [_WIN32]:
+ Move declaration of `pathextstr` to lie within preprocessor
+ conditional, since it is dereferenced only there.
+
+2021-01-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add support for strsignal().
+
+ POSIX.1-2008 added strsignal() to the C library and recommended
+ its use over sys_siglist[], but groff's pipeline management
+ hadn't been updated in that respect since that time.
+
+ * configure.ac: Check for strsignal().
+ * src/roff/groff/pipeline.c (xstrsignal): Return strsignal() if
+ it is defined.
+
+ Thanks to an anonymous contributor for the report and the patch.
+
+ Fixes <https://savannah.gnu.org/bugs/?59835>.
+
+2021-01-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/libs/libgroff/relocate.cpp (relocatep): Add assertion to
+ identify logic error if `curr_prefix` is unexpectedly a null
+ pointer.
+ (set_current_prefix) [_WIN32]: Allocate memory from heap for
+ `curr_prefix` only on Windows; on other systems, this file's
+ searchpath() is used to populate `curr_prefix`, and that
+ function (except on Windows) performs its own allocation. Fixes
+ memory leak noted by Ingo Schwarze.
+ (set_current_prefix) [!_WIN32]: Move logic attempting to set
+ `curr_prefix` by calling searchpathext() from here...
+ [WIN32]: ...to here. The PATHEXT environment variable has
+ semantics only under Windows, not POSIX systems, so the
+ placement of this code seemed erroneous.
+
+ See <https://savannah.gnu.org/bugs/?55475>.
+
+2021-01-06 Colin Watson <cjwatson@debian.org>
+
+ * contrib/glilypond/glilypond.pl:
+ * contrib/gperl/gperl.pl:
+ * contrib/gpinyin/gpinyin.pl:
+ * tmac/hyphenex.pl: Avoid Perl's unsafe "<>" operator.
+
+ The "<>" operator is implemented using the two-argument form of
+ "open", which interprets magic such as pipe characters, allowing
+ execution of arbitrary commands which is unlikely to be
+ expected. Perl >= 5.22 has a "<<>>" operator which avoids this,
+ but also forbids the use of "-" to mean the standard input,
+ which is a facility that the affected groff programs document.
+
+ ARGV::readonly would probably also fix this, but I fundamentally
+ dislike the approach of escaping data in preparation for a
+ language facility to unescape it, especially when the required
+ escaping is as non-obvious as it is here. (For the same reason,
+ I prefer to use subprocess invocation facilities that allow
+ passing the argument list as a list rather than as a string to
+ be interpreted by the shell.) So I've abandoned this dubious
+ convenience and changed the affected programs to iterate over
+ command-line arguments manually using the three-argument form of
+ open.
+
+ glilypond doesn't need the initial unshift since that's already
+ handled in contrib/glilypond/args.pl.
+
+ Fixes <https://savannah.gnu.org/bugs/?55557>.
+
+2021-01-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Set footnote line length in multi-column
+ environments to 11/12ths of the text line length for consistency
+ with earlier change to FL register default.
+
+ Thanks to T. Kurt Bond for bringing this issue to my attention.
+
+2021-01-04 John Gardner <gardnerjohng@gmail.com>
+
+ * tmac/strip.sed: Escape '.' wildcard when matching lines using
+ .as and .ds requests.
+
+ Fixes <https://savannah.gnu.org/bugs/?59498>.
+
+2021-01-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Document use of SOURCE_DATE_EPOCH and TZ.
+
+ The semantics of SOURCE_DATE_EPOCH to groff were not established
+ with respect to time zone selection, prompting divergent
+ interpretations; Debian and distributions derived from it have
+ for several years patched groff to implicitly use UTC as the
+ time zone when interpreting the current time (or
+ SOURCE_DATE_EPOCH) as a local time. While a convenient and
+ defensible choice for reproducible build efforts[1], it runs
+ against the grain of user expectations. Systems programmers
+ like monotonically increasing clocks; the broader user base
+ usually prefers a clock that follows an applicable civil
+ calendar. To the latter audience, a difference between
+ $ date "+%Y-%M-%d %H:%m:%S"
+ and
+ $ groff <<EOF
+ .af year 0000
+ .af mo 00
+ .af dy 00
+ .af hours 00
+ .af minutes 00
+ .af seconds 00
+ .tm \n[year]-\n[mo]-\n[dy] \n[hours]:\n[minutes]:\n[seconds]
+ EOF
+ is difficult to explain.
+
+ * doc/groff.texi (Environment):
+ * src/devices/grohtml/grohtml.1.man (Environment):
+ * src/devices/gropdf/gropdf.1.man (Environment):
+ * src/devices/grops/grops.1.man (Environment):
+ * src/roff/groff/groff.1.man (Environment):
+ * src/roff/troff/troff.1.man (Environment): Expand description
+ of use of SOURCE_DATE_EPOCH to note that it converts the time
+ {as seconds since the Epoch} to local time, which motivates
+ documentation of the TZ environment variable. Explain what the
+ time stamps are used for: troff merely stores the human-readable
+ time components in registers; the grohtml, gropdf, and grops
+ output drivers write the information to the output in comments.
+
+ Fixes <https://savannah.gnu.org/bugs/?57218>.
+
+ [1] https://reproducible-builds.org/docs/source-date-epoch/
+
+2020-12-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/doc.am (.texi.dvi): Call texi2dvi with FORCE_SOURCE_DATE=1
+ in the environment, avoiding an embedded timestamp in the
+ generated groff.dvi file, which frustrated reproducible builds.
+ Thanks to Werner Lemberg for the suggestion.
+
+ * src/roff/groff/tests/string_case_xform_unicode_escape.sh: Fix
+ test to no longer use Bash process substitution, resulting in
+ nondeterministic file descriptor numbers appearing in test logs,
+ frustrating reproducible builds.
+
+ * contrib/pdfmark/pdfmark.am (PDFROFF): Call pdfroff without
+ `--keep-temporary-files` option. Temporary directories are
+ created with mktemp(1) and files with an embedded process
+ identifier, which frustrates reproducible builds.
+
+ See <https://savannah.gnu.org/bugs/?57218>.
+
+2020-12-21 Dorai Sitaram <ds26gte@yahoo.com>
+
+ * tmac/s.tmac (@IP): Handle inter-sentence space correctly in
+ paragraph tags by copying \n[.sss] from the enclosing
+ environment to that used to format the paragraph tag.
+
+ Fixes <https://savannah.gnu.org/bugs/?59742>.
+
+2020-12-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #59742.
+
+ * tmac/tests/s_IP_respects_inter-sentence_space_in_tags.sh: Do
+ it.
+ * tmac/tmac.am (tmac_TESTS): Run it.
+
+2020-12-21 Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+ * src/utils/addftinfo/addftinfo.cpp (usage): Use size_t for loop
+ index when iterating over a count of size_t items. Quiets
+ signedness mismatch compiler warning.
+
+ Fixes <https://savannah.gnu.org/bugs/?59583>.
+
+2020-12-20 Colin Watson <cjwatson@debian.org>
+
+ * src/devices/gropdf/gropdf.pl:
+ * src/utils/afmtodit/afmtodit.pl: Sort Perl hash keys. Hash
+ iteration order may differ between runs, which makes builds
+ harder to reproduce. Sort hash keys in gropdf and afmtodit
+ output to avoid this.
+
+2020-12-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/ms.ms (Basic Information): Tweak unit definitions. groff
+ defines a typesetter's point as precisely 1/72 inches. Also use
+ the correct symbol for inch units--strictly, it's the same as
+ that for "seconds" as in subdivisions of the degree, and not a
+ typographical quote of any sort.
+
+ Fixes <https://savannah.gnu.org/bugs/?59463>.
+
+2020-12-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ [ms]: Set footnote line length to AT&T default.
+
+ groff ms has since its initial implementation used a default
+ footnote line length of 5/6ths of the text line length; this may
+ correspond to an early AT&T ms default (perhaps documented in
+ the 1974 version of the M. E. Lesk paper, "Typing Documents on
+ the UNIX System"[1]). However, as early as V6 Unix (1975), AT&T
+ ms actually used a footnote line length of 11/12ths of the text
+ line length instead[2].
+
+ Heirloom Doctools and neatroff ms also use this default.
+
+ * tmac/s.tmac: Set default footnote line length to 11/12ths of
+ the text line length.
+
+ * doc/groff.texi (ms Document Control Settings):
+ * doc/ms.ms (Document control registers): Document new default.
+
+ [1] https://www.troff.org/using-ms.pdf
+ [2] https://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/lib/tmac.s
+
+2020-12-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Lower new unplanted trap error to 'mac' warning.
+
+ * src/roff/troff/div.cpp (top_level_diversion::change_trap):
+ Change error upon invalid attempt to move an unplanted trap into
+ a warning of type 'mac'.
+
+ * doc/groff.texi (Warnings):
+ * src/roff/troff/troff.1.man (Warnings): Recast description of
+ 'mac' warning type to include the above scenario.
+
+ Thanks to Bjarni Ingi Gislason for reporting the diagnostic
+ arising in real life, and to Peter Schaffter for the discussion
+ and recommendation. Some bike sheds get painted quickly!
+
+ Fixes <https://savannah.gnu.org/bugs/?59573>.
+
+2020-12-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_mdoc.7.man: Tweak mandatory macro explanations.
+
+ Update descriptions and template of .Dd, .Dt, .Os usage to
+ reflect recent changes and recommended conventions.
+
+ Thanks to Ingo Schwarze, Colin Watson, and Alan D. Salewski for
+ the discussion, and Florent Rougon and Robert Bihlmeyer (many
+ years ago) for the original report.
+
+ Fixes <https://bugs.debian.org/284002>.
+
+2020-12-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/xtotroff/xtotroff.c (MapFont): Avoid writing past
+ the end of a static buffer. Problem found and patch supplied by
+ Bjarni Ingi Gislason. I tweaked it to comment it differently
+ {in case the buffer ever needs to grow, but the prospects of
+ future X11 server-side font rendering development seem dim} and
+ use snprintf() instead of retaining the existing sprintf().
+
+ Fixes <https://savannah.gnu.org/bugs/?55257>.
+
+2020-12-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/xtotroff/xtotroff.c (CanonicalizeFontName)
+ (FontNamesAmbiguous, MapFont, main): Format diagnostic messages
+ more consistently with GNU Coding Standards. Prefix with name
+ of complaining command. Put argument literals in quotation
+ marks. Put each message on one line only.
+
+2020-11-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Parameters): Fix error in example. Arguments
+ to .als were in the wrong order (.als is not ln(1)). Also mark
+ output to the standard error stream using the @error Texinfo
+ command instead of @result.
+
+ Thanks to Dorai Sitaram for finding this error.
+
+ Fixes <https://savannah.gnu.org/bugs/?59566>.
+
+2020-11-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Debugging): Update with a more helpful
+ introduction, summarizing available procedures. Mention
+ backtracing since it is much more useful now (post-groff
+ 1.22.4.)
+
+ * man/groff.7 (Debugging): Add new section summarizing
+ material added to our Texinfo manual.
+
+ * man/groff_diff.7.man (Debugging): Add new section describing
+ groff extensions.
+
+2020-11-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Traps): Update. Organize subsubsections "Page
+ Location Traps" and "Diversion Traps" under new subsection node
+ "Vertical Position Traps" to make the conceptual organization
+ more clear. Define and discuss trap visibility earlier.
+ Document unit used for page location trap reporting. Introduce
+ analogy of .wh and .ch requests as queue operations. Document
+ what happens when the same macro is planted as a trap in
+ multiple locations; supply example. Supply example of .itc
+ usage. Consistently refer to an end-of-input macro as such, to
+ contrast it with the "end macro" that can be used with, e.g.,
+ .de and .ig requests.
+
+ * man/groff.7 (Traps): Add new section summarizing
+ language feature.
+
+2020-11-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common-u (doc-footer): When performing
+ double-sided page layout, set page number on outside of _recto_
+ {odd-numbered} pages, as is conventional and for consistency
+ with man(7).
+
+ * tmac/groff_mdoc.7.man
+ (Formatting with groff, troff, and nroff): Document what
+ double-sided layout (not "printing") means. Also correct
+ description of continuous rendering, which implied that page
+ headers and footers were not written at all, and used an
+ incorrect groff driver name.
+
+ Fixes <https://bugs.debian.org/919890>. Also see:
+ https://lists.gnu.org/archive/html/groff/2019-01/msg00021.html
+ Thanks to Ralph Corderoy for the discussion.
+
+ * tmac/tests/doc-D_places_page_numbers_correctly.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2020-11-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common-u (doc-header): Fix infinite loop when
+ attempting to trim header string (like "FTP(1)") to fit when the
+ available title length won't allow even extreme shortening.
+ Measure the string before and after calling .substring on it,
+ and break out of loop if it didn't get shorter.
+
+ Problem dates back to at least
+ ed63b0ae76a611b581601a1afc192f6a7367be6f (7 July 2002), possibly
+ as far as the Great Mdoc Rewrite of
+ 058f72af832fc68488d33cd09ec819e5c560fa09 (23 March 2001).
+
+ One can never check loop invariants too many times...
+
+ Fixes <https://bugs.debian.org/411227>.
+
+ * tmac/tests/\
+ doc-do_not_loop_infinitely_when_shortening_headers.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2020-11-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/nroff/nroff.sh: Recognize -b and -z options and pass
+ them through to troff. Document them in usage message.
+ * src/roff/nroff/nroff.1.man: Document new -b and -z options.
+
+2020-11-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/div.cpp (top_level_diversion::change_trap):
+ Emit error diagnostic if an attempt is made to move an unplanted
+ macro. This could have been a warning, as it's pretty harmless
+ {though possibly a big surprise to anyone who was wondering why
+ their .ch was a no-op}, but there's no good warning category for
+ this kind of problem and I am not about to start a bike shed
+ discussion about it right now.
+
+2020-11-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi: Update. Add introductory material. Rewrite
+ the first section of the "gtroff Reference" chapter of our
+ Texinfo manual. It is written as an introduction for readers
+ who want to go straight to "raw" troff without knowing much or
+ anything about existing macro packages. Thanks to Dave Kemper
+ and John Gardner for feedback and support.
+
+ Clarify whitespace usage. "Whitespace" is defined in this
+ manual as "spaces, tabs, and newlines". Say only "spaces and
+ tabs" when newlines should not be included.
+
+ Rename "Font Files" to "Device and Font Files".
+
+ Rename "Manipulating Filling and Adjusting" to "Manipulating
+ Filling and Adjustment".
+
+ Update discussion of "copy mode". Rename from "copy-in mode",
+ which I don't think eludicdated anything; is there a "copy-out
+ mode"? Rename nodes accordingly. Attempt to explain more
+ clearly. Recast to shift emphasis to what _isn't_ merely copied
+ in copy mode, since that is what seems to cause confusion among
+ the inexperienced.
+
+ Update "Conditionals and Loops". Add introductory paragraph.
+ Add nodes/subsections "if-then" and "Conditional Blocks". Add
+ subsection "Conditional Blocks" to explain the behavior of the
+ \{ and \} escapes much more precisely. I don't think this
+ syntactical area is well understood. Supply examples.
+
+2020-11-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add style checks to man(7) macro package.
+
+ Not otherwise documented yet; experimental--subject to change.
+
+ * tmac/an-old.tmac: Initialize CHECKSTYLE to false if not
+ already set.
+ (an-style-warn): New macro emits diagnostic of type "style" when
+ called if CHECKSTYLE register is true.
+ (TH): Call an-style-warn if fewer than two or more than five
+ arguments are seen.
+ (RI, IR, IB, BI, RB, BR): Call an-style-warn if fewer than two
+ arguments are seen.
+
+2020-11-11 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+ Update copyright.
+
+ * update-copyright.sh: use gnulib's 'update-copyright' script.
+ Pass this script in directories 'arch', 'contrib', 'font',
+ 'man', 'tmac', 'src' and on a list of extra files.
+
+ * FOR-RELEASE: mention this point.
+
+2020-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/preconv.1.man (Description): Fix error:
+ groff's -K option, not -k, specifies a character econding (and
+ overrides GROFF_ENCODING in the environment). Also explain how
+ valid encoding strings are determined.
+
+ Thanks to Bjarni Ingi Gislason for the report.
+
+ Fixes <https://savannah.gnu.org/bugs/?59445>.
+
+2020-11-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::compute_separation_factor):
+ Add word "table" to diagnostic message to better cue the user
+ that it is produced by roff that has been injected into the
+ document by the tbl(1) preprocessor. The other 3 such possible
+ diagnostic messages already do this. Thanks to Bjarni Ingi
+ Gislason for bringing the inconsistency to light.
+
+ Fixes <https://savannah.gnu.org/bugs/?59443>.
+
+2020-11-07 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_mdoc.7.man (Predefined strings): Ensure the table
+ fits even on ASCII and Latin-1 terminals. Thanks to Bjarni Ingi
+ Gislason for the report.
+
+ Fixes <https://savannah.gnu.org/bugs/?59424>.
+
+2020-11-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_mdoc.7.man (General text domain/Enclosure and
+ Quoting Macros): Fix errors in macro descriptions.
+ <.Dq>: Encloses its arguments in directional double quotes where
+ available.
+ <.Eq>: Misrendered example; say "XstringY" rather than
+ "XXstring".
+ <.Sq>: Encloses its arguments in directional single quotes where
+ available.
+
+2020-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add support for CS and CT registers to mdoc(7), just like in
+ man(7), from a year ago.
+
+ * tmac/doc.tmac-u (doc-print-recursive): Call .stringup on each
+ argument if register doc-do-capitalize is true.
+ * tmac/mdoc/doc-common-u (Dt): Call .stringup on
+ doc-document-title if \n[CT] is true.
+ (Sh): Set doc-do-capitalize to value of \n[CS]. Set
+ doc-do-capitalize false before returning.
+ * tmac/mdoc/doc-ditroff-u:
+ * tmac/mdoc/doc-nroff-u: Set CS and CT registers to 0 (false)
+ if the user has not defined them.
+
+ * tmac/groff_mdoc.7.man \
+ (Formatting with groff, troff, and nroff): Document it.
+
+ * tmac/tests/doc-CS_works.sh:
+ * tmac/tests/doc-CT_works.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run tests.
+
+2020-10-31 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, do_width)
+ (do_special, do_if_request, read_color_draw_node): Improve
+ diagnostic messages for missing closing delimiters by describing
+ the incomplete structure and the problem token.
+ (read_rgb, read_cmy, read_cmyk, read_gray): Improve English
+ syntax of diagnostic message when color definition missing.
+
+2020-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-ditroff-u:
+ * tmac/mdoc/doc-nroff-u: Recognize but ignore the groff_man(7)
+ string HF and registers FT, IN, P, SN, and X (by initializing
+ them empty or zero if they are not set). This reserves them so
+ that they don't become used for divergent purposes. man(1)
+ programs set these and other parameters already handled (like
+ LL) to configure page rendering, and it would break the
+ macro-package agnosticism afforded by andoc.tmac to expose
+ different externally-programmable registers and strings.
+ * tmac/groff_mdoc.7.man \
+ (Formatting with groff, troff, and nroff): Document this.
+
+2020-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Implement \*< and \*> strings for subscripting.
+ groff ms has had (extension) strings for superscripting since
+ 1991 at the latest, and the asymmetry possessed me of a madness.
+ Both pairs of string names follow similar usage in Eric Allman's
+ "me" macros.
+
+ * NEWS:
+ * doc/groff.texi:
+ * tmac/groff_ms.7.man: Document it.
+
+2020-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_mdoc.7.man (Predefined strings): Fix error: the
+ \*[Lq] and \*[Rq] strings degrade to neutral double quotes (")
+ on "nroff" devices (-Tascii and -Tlatin1), not "``" and "''".
+
+2020-10-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac (ds*end!0): Improve diagnostic to mention .RD.
+
+2020-10-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/s.tmac: Revise diagnostic messages. Define a common
+ prefix string, starting all such messages with "s.tmac".
+ Continues the long process of fixing Savannah #52463. Drop the
+ word "macro" from diagnostic since this will now be clear from
+ the prefix. Prefix every macro name in a diagnostic message
+ with a leading dot; this was already done in four cases.
+ (cov*first-page-init): Use temporary string to avoid multi-line
+ diagnostic message.
+ (@NH): Use temporary string to prevent overlength line.
+
+ A further benefit of this revision is that index information
+ produced by ms's .IX macro (which writes to the standard error
+ stream) will now be trivially easy to extract even for documents
+ that cause diagnostic messages. One can simply filter them with
+ grep -v '^s\.tmac:'
+ or similar.
+
+2020-10-28 Ingo Schwarze <schwarze@openbsd.org>
+
+ * man/roff.7.man, tmac/groff_man.7.man.in: Correct man(7)
+ history.
+
+2020-10-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Fix ms .R macro to work as documented, by handling its arguments
+ instead of ignoring them.
+
+ * tmac/s.tmac (R): Delete. During set up, call
+ par*define-font-macro for R font just as we do for B, I, and BI.
+
+ Problem dates back at least to groff 1.02, June 1991.
+
+ * tmac/tests/s_R-handles-its-arguments.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?59348>.
+
+2020-10-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Fix ms .TC macro by allowing it to actually use lowercase Roman
+ numerals for the page(s) of the table of contents when a custom
+ title (header or footer) is defined containing '%'.
+
+ As a side effect, eliminate the PN register, which was
+ apparently misused because it was undocumented and had a name
+ just long enough to be both suggestive and ambiguous. Another
+ pin goes into my Ken Thompson voodoo doll.
+
+ * tmac/s.tmac (IX): Write out page number of index term(s) using
+ the % register (instead of PN), obtaining whatever format is
+ assigned to the register at that time.
+ (CH): Similarly, output %, not PN, in the center of the default
+ heading.
+ (PT): Save the format of %, set it to decimal, copy its value to
+ a new register, pg*page-number-in-decimal, then restore %'s
+ previous format. Compare the new register, not %, to 1 to
+ determine whether special page one behavior should be used.
+ (pg*end-page): Assign pg*next-format to %, not PN.
+ (XA): Define toc*num with the interpolation of %, not PN.
+
+ * tmac/tests/s_TC-works-with-percent-in-custom-titles.sh: Test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Problem appears to be very old; as I read it, Larry Kollar was
+ complaining of it in his ms.ms document over 20 years ago.
+
+ Fixes <https://savannah.gnu.org/bugs/?59345>.
+
+2020-10-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7 (Requests/Request short reference) <.af>: Fix
+ error; "l" is not a valid register format. Explain what the
+ request does, and the default format, as tersely as possible.
+
+2020-10-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Use only `malloc()` and `free()` to manage memory of paths
+ opened by the parser instead of mixing in C++ new/delete
+ management under some runtime-dependent circumstances.
+
+ * src/libs/libgroff/relocate.cpp (relocatep): Use `malloc()`,
+ not new.
+ * src/roff/troff/input.cpp (process_macro_file)
+ (process_startup_file, macro_source): Use `free()`, not
+ `{a_,}delete()`.
+
+ Thanks to an anonymous contributor for the report and patch.
+
+ Fixes <https://savannah.gnu.org/bugs/?56694>.
+
+2020-10-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff_char.7.man (Description/Special character escape
+ forms): Clarify discussion of Unicode Normalization Form D and
+ its applicability to code points acceptable in Unicode numeric
+ special character escapes. Also document that these escapes
+ must use uppercase hexadecimal digits.
+
+ Attempts once again to slay the unkillable beast that is
+ <https://savannah.gnu.org/bugs/?57618>.
+
+2020-10-21 Ingo Schwarze <schwarze@openbsd.org>
+
+ On systems without NAME_MAX, use FILENAME_MAX as a last resort.
+
+ Problem reported by Eli Zaretskii <eliz at gnu dot org>
+ on MS Windows in https://savannah.gnu.org/bugs/?55449
+
+2020-10-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (environment::possibly_break_line):
+ Emit break warning and return if the output width is not
+ positive. The code assumes that it will be and loops infinitely
+ if it isn't. I _think_ this is because we're not able to get
+ width data for (some?) CJK glyphs. Based on a patch by Osamu
+ Sayama.
+
+ * src/roff/groff/tests/\
+ do_not_loop_infinitely_when_breaking_cjk.sh: Test it.
+ * src/roff/groff/groff.am: Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?44018>.
+
+2020-10-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::init_output): Save the value
+ of \n[.tabs] when starting a table. In the reset macro, restore
+ the saved value.
+
+ Based on a patch by Bjarni Ingi Gislason (tweaked to use a more
+ normative preprocessor symbol; "REG"s aren't "NAME"s).
+
+ * src/preproc/tbl/tests/save-and-restore-tab-stops.sh: Test it.
+ * src/preproc/tbl/tbl.am (tbl_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?42978>.
+
+2020-10-20 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/nroff/nroff.sh: Recognize -E option and pass it
+ through to troff. Document it in usage message.
+ * src/roff/nroff/nroff.1.man: Document new -E option.
+
+ Based on a patch by Ingo Schwarze.
+
+ Fixes <https://savannah.gnu.org/bugs/?44289>.
+
+2020-10-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Stop remapping ` and '. Our own pages now
+ appear to be clear of wrong-quote problems, so let's make them
+ visible if they recur. Those who don't want to fix bad man
+ pages (distributors, site admins) can restore the mappings in
+ their man.local files.
+
+2020-10-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-warn): New; emits warning diagnostic.
+ (R): Use new macro instead of .tm* requests directly.
+
+2020-10-18 Ingo Schwarze <schwarze@openbsd.org>
+
+ #include "config.h" before <stdio.h>
+
+ Required with e.g. gcc 4.2.1 because gnulib/lib/stdio.in.h
+ uses the "restrict" keyword since this gnulib commit:
+ commit 182afcba2635cbff91240656c7fb3742dd23ab6f
+ Author: Bruno Haible <bruno@clisp.org>
+ Date: Sat Feb 22 20:57:30 2020 +0100
+
+ Otherwise, the build may die from the declaration of
+ various printf-like functions with messages like:
+ ./lib/stdio.h:851: error: expected ',' or '...' before 'fp'
+
+ * src/libs/libgroff/assert.cpp, src/libs/libgroff/errarg.cpp,
+ src/libs/libgroff/error.cpp, src/preproc/eqn/eqn.ypp:
+ #include "config.h".
+
+2020-10-18 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+ hpftodit: incorrect 'delete' after new[]
+
+ * src/utils/hpftodit/hpftodit.cpp (output_font_name): use
+ 'delete[]'.
+
+ Fixes bug #55331. Found by David Binderman, fixed by Ingo
+ Schwarze.
+
+2020-10-18 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+ preconv: don't use libuchardet if input is stdin
+
+ * src/preproc/preconv/preconv.cpp (do_file): don't call
+ detect_file_encoding if input file is "-"
+
+ This fixes the failure on MS-Windows described #55334, however
+ this does not fix the encoding detection with uchardet if the
+ input is stdin (the user would have to pass with -D the correct
+ encoding as explained in the man page).
+
+2020-10-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/lex.cpp (troff_defs): Set the "..." token on
+ the baseline, not vertically centered, aligning the actual
+ behavior with what our eqn(1) man page has claimed since 2007.
+
+ Fixes <https://savannah.gnu.org/bugs/?59285>.
+
+2020-10-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grops/grops.1.man
+ (Usage/TrueType and other font formats): Remove dead URL to
+ ttftot42 utility. Update URL to fontforge tool. Replace much
+ of the discussion with an example, motivated by Jordan Torbiak's
+ "groff-install-font" script on GitHub Gist, of how to add the
+ Roboto Slab Regular font to a user-local groff font directory
+ {and how to test it, too}.
+
+ Fixes <https://savannah.gnu.org/bugs/?58077>.
+
+2020-10-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Report program name in warning
+ diagnostics.
+
+ Continues the long process of fixing Savannah #52463.
+
+2020-10-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Add fallback for lq, rq strings.
+
+ Define \*(lq and \*(rq as '"' if the output device has no \(lq
+ or \(rq special character escapes defined (respectively).
+
+ This is a bit belt-and-suspenders for groff since our output
+ devices all guarantee availability of these glyphs, but if this
+ macro file gets used with other implementations (and if they
+ support the 'c' conditional), it should prevent the strings from
+ producing empty output.
+
+ Man page writers should simply use \(lq and \(rq unless they are
+ aiming for pathological levels of portability (e.g., composing
+ man pages today for consumption on simulators of 1980s Unix
+ systems).
+
+2020-10-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Define an-end with .de1. We need to define
+ an-end with de1 (execute macro with compatibility mode off)
+ because, as of 37b4180a27a6eeaea429e40ec278abefcda7f3a7 (11
+ October), it can now be called from a trap executing in a
+ context whence compatibility mode might be on (namely,
+ "reload-doc" in andoc.tmac).
+
+2020-10-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/eqn/main.cpp (main):
+ * src/preproc/pic/main.cpp (main):
+ * src/preproc/tbl/main.cpp (main):
+ * tmac/eqnrc:
+ * tmac/troffrc: Perform checks of register and macro definitions
+ with a .do request, since we might be in compatibility mode.
+
+2020-10-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (do_if_request): Emit warning of type
+ "syntax" if a groff conditional expression extension is used
+ when compatibility mode is active.
+
+ * doc/groff.texi:
+ * src/roff/troff/troff.1.man: Update description of "syntax"
+ warning type to be more general. It was inaccurate, referring
+ only to "dubious syntax in numeric expressions", which was not
+ the case. Instead it was being used only for poor construction
+ of character classes with the .class request.
+
+2020-10-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (main): Stop ignoring -T. GNU tbl
+ was undocumentedly ignoring the -T option; apparently IRIX tbl
+ implemented it, something on the system called tbl with that
+ option (I'm guessing IRIX's man(1)) and its users spammed James
+ Clark with bug reports. We can probably weather the volume of
+ such spurious reports from IRIX users today.
+
+2020-10-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/main.cpp (main): Clarify fatal diagnostic in
+ generated document by informing the user that the program is
+ aborting, and also that it is groff extensions that are required
+ rather than GNU troff per se (since Heirloom Doctools troff
+ claims groff extension support via the .g register).
+
+2020-10-14 Ingo Schwarze <schwarze@openbsd.org>
+
+ In groff(1), fix the combination of -v with -k, -j, and -J.
+
+ * src/roff/groff/groff.cpp: Pass the -v option through to the
+ preconv, chem, and ideal preprocessors, just like for all
+ other preprocessors, to print the version of the preprocessor
+ and to avoid garbage output.
+
+ Bugfix patch from Eli Zaretskii <eliz at gnu dot org>
+ submitted in: https://savannah.gnu.org/bugs/?55297
+
+2020-10-12 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+ Update 'gnulib' submodule.
+
+ * gnulib: now points on d60a35e94c4f5b8f09f15828242418f5073d46e7
+ from 'gnulib' repository.
+
+ * configure.ac: minimum autoconf version is now 2.64 due to
+ gnulib upgrade.
+
+ * FOR-RELEASE: add the gnulib update to the checklist.
+
+2020-10-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/andoc.tmac: When switching between macro packages in
+ andoc and using continuous-rendering mode, flush any partially
+ collected output line and write page footer.
+ (reload-doc): Call an-end if it is defined.
+ (reload-man): Call doc-end-macro if it is defined.
+ * tmac/tests/andoc-flush-between-packages.sh: Add regression
+ test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?59106>.
+
+2020-10-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/andoc.tmac: Remove traps set by mdoc package by the names
+ they actually use.
+ * tmac/tests/andoc-clear-doc-traps.sh: Add regression test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Fixes <https://savannah.gnu.org/bugs/?59246>.
+
+2020-10-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::init_output): In the release
+ macro written to the output, reword the warning diagnostic that
+ is emitted when a table row is to be output without enough room
+ before the next page location trap. The former wording said
+ that a "text block" would not fit on the page, and that is
+ normally how table rows grow longer than one line in the first
+ place. However, there are other ways the conditional can be
+ satisfied, as witnessed in Savannah #57665, so simply say what
+ is known; that the table _row_ overruns the space to the next
+ trap (we say the row won't "fit on [the] page").
+
+ Fixes <https://savannah.gnu.org/bugs/?59233>.
+
+2020-10-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp
+ (double_line_entry::double_line_entry):
+ (double_line_entry::simple_print): Remove garbage lines
+ inadvertently added in previous commit.
+
+2020-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Stop tbl from injecting spurious blank lines (and emitting
+ spurious warnings about tables and "text blocks" not "fitting on
+ a page") into long tables in man pages when continuous rendering
+ is used (the default for nroff output devices).
+
+ * src/preproc/tbl/table.cpp (USE_KEEPS_REG): New preprocessor
+ symbol stores name of groff register for dynamic determination
+ of keep usage.
+ (table::init_output): If the NOKEEP flag is not set, then in
+ generated groff output, see if the usekeeps register is defined;
+ if not, define it and enable usage of keeps.
+ (table::do_row): In groff output, check usekeeps register before
+ calling keep and release macros.
+ (table::do_bottom): In groff output, check usekeeps register
+ before calling release macro.
+
+ * tmac/an-old.tmac (TS): Set the usekeeps register used by tbl
+ to the logical complement of the man(7) cR (continuous
+ rendering) register.
+
+ * tmac/tests/an-old_TS_do_not_keep_tables_when_cR_set.sh: Add
+ regression test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+ Problem appears to date back to the introduction of continuous
+ rendering in groff 1.17 (3 May 2001).
+
+ Fixes <https://savannah.gnu.org/bugs/?57665>.
+
+2020-10-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (simple_entry::position_vertically):
+ (block_entry::position_vertically):
+ (table::determine_row_type):
+ (printfs): Update assertions to indicate what actually went
+ wrong.
+
+2020-10-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/node.cpp: Make diagnostics slightly more
+ informative in unusual error cases.
+ (real_output_file::~real_output_file): If ferror() reports error
+ status on a stream say that, instead of "error writing". If it
+ does not, but fflush() fails on the stream, describe the flush
+ as failing, and use strerror() since fflush() sets errno. If
+ pclose() fails, say that we were unable to close a pipe instead
+ of repeating the name of the C library function to the user, who
+ might not be a C programmer. Report strerror() in this case and
+ for a failing fclose().
+ (real_output_file::flush): Repeat updated fflush() logic from
+ previous function.
+
+2020-09-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (register setup): Make interaction of \n[C]
+ register and HTML output more clear in code and comments.
+
+2020-09-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/regression_savannah_59202.sh: Reduce test
+ case.
+
+2020-09-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Fix SEGV arising from recursing destructor.
+
+ * src/roff/troff/node.h (output_file): Add class member
+ `is_dying` to track whether destructor has already been entered;
+ initialize false.
+ * src/roff/troff/node.cpp (real_output_file::~real_output_file):
+ Set `is_dying` true when destructor entered.
+ * src/roff/troff/div.cpp (cleanup_and_exit): Only delete
+ `the_output` object if it is not already being destroyed.
+ * src/roff/groff/tests/regression_savannah_59202.sh: Add test.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+ Thanks to "hackerb9" for reporting the problem. Problem appears
+ to date back to groff 1.02 (June 1991) or earlier.
+
+ Fixes <https://savannah.gnu.org/bugs/?59202>.
+
+2020-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (register setup): Condition decisions on
+ \n[an-html] rather than a string comparison using \*[.T]; that
+ is what the register is there for.
+
+2020-09-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/andoc.tmac: Save alias to .ne request.
+ (reload-doc): Restore .ne request, which an-old.tmac meddles
+ with if continuous rendering is used. (The meddling ultimately
+ dates back to 777e2d262862621966c18d685a000cc88f432bc6, 26
+ January 2002, which simply redefined .ne as empty on nroff
+ devices.)
+
+2020-09-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Ship tests in distribution archive.
+
+ * src/preproc/preconv/preconv.am (EXTRA_DIST):
+ * src/roff/groff/groff.am (EXTRA_DIST):
+ * src/roff/nroff/nroff.am (EXTRA_DIST):
+ * tmac/tmac.am (EXTRA_DIST): Add
+ $({preconv,groff,nroff,tmac}_TESTS), as appropriate.
+
+ * src/roff/nroff/nroff.am (MOSTLYCLEANFILES): Stop adding
+ $(nroff_TESTS), which can only have unhappy consequences.
+
+2020-09-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am: Fix problem with recently-relocated mdoc macro
+ files not ending up in the right place in the distribution
+ archive.
+ (dist_tmac_DATA): Also include $(TMACUNSTRIPFILES).
+ (TMACMDOCSTRIPFILES): Rename from $(TMACMDOCFILES). Update
+ interpolation sites.
+ (TMACMDOCUNSTRIPFILES): New variable holds mdoc macro files in
+ the tmac/mdoc subdirectory. Stop adding these files to
+ $(TMACUNSTRIPFILES) since those reside in tmac/ directly.
+ (EXTRA_DIST): Add $(TMACMDOCUNSTRIPFILES).
+ ($(TMACSTRIPFILES)): Depend only on $(TMACUNSTRIPFILES).
+ ($(TMACMDOCSTRIPFILES)): Add new rule, much like the foregoing.
+ Depend on $(TMACMDOCUNSTRIPFILES) and copy files into tmac/mdoc.
+ (dist-hook, tmac-dist-hook): Remove; they no longer do any
+ distinct work.
+
+ Fixes <https://savannah.gnu.org/bugs/?59186>.
+
+2020-09-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/tbl/table.cpp (table::init_output):
+ (table::compute_expand_width):
+ (table::compute_separation_factor): Use consistent format for
+ diagnostic messages.
+ - Do not spread a single diagnostic across multiple lines.
+ - Report messages in GNU Coding Standards format, that is:
+ - Report the name of the file the problem is in...
+ - ...then the line number...
+ - ...then the diagnostic severity level...
+ - ...then the specific problem.
+
+2020-09-26 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Emit warnings when configuration registers
+ are ignored when producing output for HTML.
+
+2020-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (an-p-footer): Define \*[an-page-string] if
+ (1) the output device is not HTML; (2) \n[X] has been defined;
+ and (3) the page number has not yet reached the threshold
+ defined by \n[X].
+
+ Fixes <https://savannah.gnu.org/bugs/?59179>.
+
+2020-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for Savannah #59179.
+
+ * tmac/tests/an-old_X_register_works.sh: Do it.
+ * tmac/tmac.am (tmac_TESTS): Run it.
+
+2020-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac:
+ * tmac/doc.tmac-u: Emit more informative fatal diagnostic when
+ installed version of groff is too old. Report the version found
+ and explicitly note consequent abort.
+
+2020-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am: Regenerate stripped macro files upon changes to
+ any of their unstripped counterparts. This is crude, but they
+ weren't being regenerated at _all_. Defeating a central
+ function of Make is bad.
+ (TMACUNSTRIPFILES): New variable. Populate with -u files.
+ ($(TMACMDOCFILES) $(TMACSTRIPFILES)): Depend on
+ $(TMACUNSTRIPFILES).
+
+2020-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac:
+ * tmac/andoc.tmac:
+ * tmac/doc.tmac-u:
+ * tmac/s.tmac: Clarify fatal diagnostics by informing the user
+ that the program is aborting.
+
+2020-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/www.tmac.in: Revise diagnostic message handling.
+ (www:fatal): New macro handles fatal macro usage errors.
+ (www:lenstr): Use www:fatal instead of writing to standard error
+ with .tm (rather than www:error) and then calling .ab without
+ arguments, which produces an unsightly "User Abort." message.
+ (www:lenstr):
+ (www:splitstr):
+ (www:url_breaks):
+ (www:url_breaks_split):
+ (LINKSTYLE): Report expected number of arguments in diagnostics.
+ (www:fontstyle): Shorten diagnostic message.
+
+2020-09-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/div.cpp
+ (top_level_diversion::clear_diversion_trap): Fix copy and paste
+ error in diagnostic, which wrongly reported that a top-level
+ diversion trap couldn't be "set" when "clear"ed was meant.
+
+2020-09-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/grn/main.cpp (conv):
+ * src/roff/troff/node.cpp (suppress_node::tprint): Remove
+ embedded newlines from diagnostic messages.
+
+2020-09-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Move setup of remaining rendering option
+ parameters (registers C, D, P, and X) to end of file.
+
+2020-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): Move setup of rendering parameter
+ registers IN and SN from here to the end of the file. Update
+ comments.
+
+2020-09-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Drop \*[an-empty] string. This string is
+ documented as preventing "looping" (presumably infinitely) if
+ someone calls a two-font macro with an inconvenient parameter;
+ the example shown is ".RB ( \\ )". This string was being
+ interpolated at the end of each argument pair to the two-font
+ macros BI, BR, IB, RB, and RI. This code dates back to groff
+ 1.10 (dc5351364982f78f8c630f1e856d692d4a82666f, 26 November
+ 1995). Did you notice a two-font macro missing? It was: IR.
+ Using it with the proscribed input fails to cause a problem; the
+ others similarly operate just fine when the empty string
+ interpolation is removed. Presumably at some point in the past
+ 25 years, this workaround became unnecessary.
+ (BI, BR, IB, RB, RI): Remove interpolations of string.
+
+ * tmac/tests/an-old_avoid_two-font_denial_of_service.sh: Add
+ regression test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2020-09-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Refactor continuous rendering handling.
+ Relocate set up of \n[cR] to end of file in parallel with other
+ rendering parameter management. Instead of conditionally
+ defining the an-ne and an-bp macros, define them
+ unconditionally. Also define them with .de instead of .de1,
+ since they will only be called within the contexts of macros
+ that are already running with compatibility mode off (i.e., the
+ public interface macros). Relocate definition of an-end to sit
+ alongside these other continuous-rendering-mode specific macros
+ and avoid a forward reference and scattering of \n[cR]
+ conditionals around the file.
+ (an-set-up-continuous-rendering): Define new macro to move
+ macros (and end macro) into place. Call it at the end of the
+ file only if cR eventually winds up being true.
+
+2020-09-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Improve name space management. Rename .ne
+ request to .an-ne instead of outright clobbering it (and in
+ parallel with .an-bp). Rename 'an-ne' register to 'an-need' to
+ prevent confusion with renamed request.
+
+2020-09-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Drop .ll hack for LL register.
+
+ Drop the .ll hack for setting the line length on nroff devices.
+
+ Once upon a time, the only way to get man pages to render on a
+ terminal at any width other than the nroff default of 65n was to
+ put an .ll request into the page--a mortal sin against
+ portability--or your man(1) program could sneak such a request
+ into nroff's input stream.
+
+ Also, long ago, John Eaton of UT Austin wrote a man(1) program.
+ In a few years this implementation branched into two lines of
+ development, which I'll call man-db man (Wilford/Polacco/Watson)
+ and another, Brouwer/Lucifredi man, which as of this writing saw
+ its last release in 2011 (1.6g).
+
+ The man and mdoc macros of groff 1.18 (July 2002) introduced an
+ LL register to configure the line length, respecting an -rLL
+ command-line option. The source change was made by Werner
+ Lemberg on 3 May 2002 and Colin Watson updated man-db man(1)--on
+ the same day!--to synthesize the option when calling groff.
+
+ Later, in August 2005, Keith Marshall, a user of version 1.5m of
+ Brouwer/Lucifredi man(1), which did not set the LL register,
+ suggested that the existing .ll setting (technically, the value
+ of \n[.l], the only way the result of an .ll request could be
+ introspected) be honored in the absence of the LL register.
+ However, it is impossible to distinguish a user-supplied ".ll
+ 65n" request from nroff's default setting, which was in that
+ case overridden to the modern default of 78n.
+
+ And so, in what is now git commit
+ f9d5df4aebd3d834b4084ffefa52a115e00dce38 (1 September 2005), it
+ was done.
+
+ This led to (1) surprising behavior for users accustomed to old
+ methods and desirous of the nroff default and (2) lengthy
+ apologia in groff source code comments and the groff_man(7) man
+ page.
+
+ Ironically, Brouwer/Lucifredi man(1) had already added support
+ for the LL register by the time of its 1.6 release two months
+ earlier (20 June 2005). (Curiously, it did so similarly to the
+ old .ll hack, by injecting an '.nr LL' request into groff's
+ input stream, rather than using the -r command-line option.)
+ Moreover, Marshall and the groff list were already aware of
+ this, but the change was accepted anyway because version 1.6
+ was "too new"! (Distributions are slow sometimes, true...)
+
+ Let us survey the field in 2020. man-db man(1) has supported
+ the LL register for eighteen years, and Brouwer/Lucifredi man(1)
+ for fifteen. Heirloom Doctools's man macros set the line length
+ to 78n on nroff devices unconditionally. mandoc(1) similarly
+ also always formats for 78 columns on terminals. groff's
+ mdoc(7) macros grew support for LL in parallel with man(7) in
+ 2002 and never added the \n[.l] introspection at all.
+
+ There no longer seems to be any reason to preserve this hack.
+
+ * tmac/an-old.tmac (initialization): Drop complex setup of LL
+ register.
+ (TH): Relocate line length reset; no behavior change.
+ (after .mso man.local): Initialize LL only if the user hasn't;
+ use device default in troff mode, and 78n in nroff mode.
+
+ * tmac/groff_man.7.man.in (Options) <-rLL>: Stop documenting .ll
+ hack.
+
+ Fixes <https://savannah.gnu.org/bugs/?58992>.
+
+2020-09-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_LL_init_sanely.sh: Add test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2020-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/xditview/GXditview.ad: Widen the default geometry
+ to accommodate the width of a page rendered using the X100-12
+ device. Display devices these days have much greater horizontal
+ resolution than they did 20 years ago.
+
+2020-09-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Use correct point size default for
+ X{75,100}-12 devices.
+
+2020-09-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/mdoc/doc-common-u (doc-prepare-section-heading): New
+ macro defines new string doc-sec-head to enable recognition of
+ mixed-case section headings in mdoc man pages. For example,
+ "Name" and "Description" are now recognized in addition to
+ "NAME" and "DESCRIPTION".
+ (doc-section-{name,synopsis,library,description,see-also,files,
+ authors}): Redefine strings to be mixed-case. Add trailing
+ comment guard per recommended best practice.
+ (Sh): Call doc-prepare-section-heading instead of
+ doc-first-parameter, and compare predefined section strings to
+ doc-sec-head instead of doc-str-dfp.
+
+ * tmac/tests/doc-accept-mixed-case-section-headings.sh: Test it.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+ * tmac/tests/doc-smoke-test.sh: Use mixed-case section headings.
+
+2020-09-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * makevarescape.sed: Use \[] form of special character escapes.
+
+ The only man page we have that doesn't turn compatibility mode
+ off (neqn) also doesn't use any sed-substituted patterns where
+ characters replaced by a \[] special character escape form are
+ likely to be used.
+
+ The @g@ command prefix is the main avenue for intrusion of such
+ escapes, but I think it improbable that many people are going to
+ include apostrophes, double quotes, carets, grave accents, or
+ tildes in the command prefix; some or all of these will pick
+ fights with the shell and require quoting that we don't
+ represent in man page text anyway.
+
+ On top of that, neqn is largely a stub page.
+
+ If it's a problem, a better fix than reverting this is to make
+ neqn switch out of compatibility mode like our other man pages.
+
+2020-09-03 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * FOR-RELEASE: Start a release checklist. We probably should
+ have done the afmtodit.tables update for 1.22.4. There were no
+ AGL changes and the Unicode decomposition changes were limited
+ to additions for Balinese (11), CJK compatibility ideographs
+ (5), and 13 code points outside the Basic Multilingual Plane.
+
+2020-09-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.tables: Regenerate using Unicode
+ 13.0.0.
+
+2020-09-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ make-afmtodit-tables: Automate AGL reassignments.
+
+ Automate the procedure done manually in
+ b72b91e85e80a69304e6569db535bcca0e0ecab5 (9 April 2007), so that
+ it doesn't regress when we regenerate afmtodit.tables.
+
+ * src/utils/afmtodit/make-afmtodit-tables: Do it.
+ * src/utils/afmtodit/afmtodit.tables: Regenerate it.
+
+2020-09-02 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/groff.1.man (Options) <-E>:
+ * src/roff/troff/troff.1.man (Options) <-E>: Document that -E
+ implies -Ww.
+
+ Fixes <https://savannah.gnu.org/bugs/?59030>.
+
+2020-09-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff_char.7.man: Revise glyph descriptions.
+
+ Fixes <https://savannah.gnu.org/bugs/?59031>.
+
+2020-09-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tty.tmac: Define fallback glyphs for Bell System logo
+ {non-breaking adjustable space} and radical extension and square
+ root extension (both dummy characters '\&') to suppress warnings
+ from groff_char(7). As none of these are encoded in Unicode it
+ seems unlikely they will become supported soon.
+
+2020-08-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/troff.1.man (Options) <-I>: The current working
+ directory is searched _last_, not first, unless the order is
+ altered with "-I .".
+
+ * src/roff/groff/groff.1.man (Options) <-I>: Rearrange
+ description.
+
+2020-08-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Update mdoc package to honor HY register as man does now, per
+ suggestion from Colin Watson. Recognize but ignore AD string
+ for man package compatibility (essentially "reserving" it),
+ though mdoc intentionally does not permit configuration of
+ adjustment.
+
+ * tmac/mdoc/doc-ditroff-u:
+ * tmac/mdoc/doc-nroff-u: Do it.
+
+ * tmac/mdoc/doc-common-u: Initialize \n[doc-hyphen-flags] from
+ \n[HY].
+
+ * tmac/groff_mdoc.7.man \
+ (FORMATTING WITH GROFF, TROFF, AND NROFF): Document it.
+
+2020-08-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): Reset inter-word and inter-sentence
+ spacing to default with each new page rendered.
+
+ {To observe the problem prior to this change,
+ $ groff -mandoc groff_mmse.7 $any_other_man_page
+ groff_mmse(7) loads sv.tmac, which changes the sentence
+ spacing.}
+
+2020-08-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * PROBLEMS: Undocument the problem with test-groff and mdoc.
+ It's resolved.
+
+ Fixes <https://savannah.gnu.org/bugs/?51073>.
+
+2020-08-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am (NORMALFILES, MDOCFILES): Drop unused variables.
+ ($(TMACMDOCFILES) $(TMACSTRIPFILES)): Scrub trailing whitespace.
+ Wrap long line.
+
+2020-08-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ mdoc: Relocate within build tree.
+
+ The (modern) mdoc macro package has not been usable within the
+ build tree, unlike the others. This makes it more troublesome
+ to test changes, and frustrates deploying our test
+ infrastructure against it. Re-arrange the build tree to
+ resemble an installation tree closely enough for the macro
+ package to load.
+
+ * tmac/doc-common-u:
+ * tmac/doc-ditroff-u:
+ * tmac/doc-nroff-u:
+ * tmac/doc-syms-u: Rename to...
+ * tmac/mdoc/doc-common-u:
+ * tmac/mdoc/doc-ditroff-u:
+ * tmac/mdoc/doc-nroff-u:
+ * tmac/mdoc/doc-syms-u: ...these.
+
+ * tmac/tmac.am (TMACMDOCFILES): Look for files in tmac/mdoc.
+ ($(TMACMDOCFILES)): Create tmac/mdoc in build tree.
+
+ Fixes <https://savannah.gnu.org/bugs/?51003>.
+
+2020-08-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test for usable in-tree mdoc.
+
+ * tmac/tests/doc-smoke-test.sh: Add test.
+ * tmac/tmac.am (tmac_TESTS): Run test.
+
+2020-08-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_TH_repairs_ad_damage.sh:
+ * tmac/tests/an-old_TH_repairs_hy_damage.sh: Add tests.
+ * tmac/tmac.am (tmac_TESTS): Run tests.
+
+2020-08-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): Set hyphenation mode to user preference
+ with each new page rendered, in case a hostile page meddled with
+ '.hy' or '.nh'.
+ (after .mso man.local): Relocate setting of default hyphenation
+ mode here (instead of just before .mso man.local). Eliminate
+ conditional on \n[an-html]; this doesn't matter because
+ grohtml(1) doesn't support hyphenation anyway. If it does learn
+ to hyphenate, we should treat it the same as other output
+ devices in any case. Add comment explaining why we fall back to
+ different defaults depending on \n[cR].
+
+2020-08-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (TH): Set adjustment to user preference with
+ each new page rendered, in case a hostile page meddled with
+ '.ad' or '.na'.
+ (after .mso man.local): Set the default adjustment mode only if
+ a -d option or man.local did not. Also do the same for the HF
+ string; relocate its definition here and make it similarly
+ conditional. Also update comment on setting of CS and CT
+ registers and style their conditionals consistently with the
+ rest of the package.
+
+ * tmac/groff_man.7.man.in (Strings) <\*(AD>: Document it.
+ (Strings) <\*(HF>: Parallelize language with new \*(AD.
+ (Options) Expand introductory sentence to discuss -d and -r
+ options.
+ (Options) <-dAD>: Document default and likely values. Nobody
+ right-justifies or centers man page text; send the curious to
+ groff(7) for '.ad' request documentation.
+ (Options) <-dHF>: Document default and steer people to groff(7)
+ for '.ft' request documentation.
+
+2020-08-21 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac (set-an-margin): Rename...
+ (an-set-margin): ...to this. It was the only package-internal
+ register, macro, string, or diversion that wasn't named using
+ the "an-*" schema.
+ (TH, SH, SS): Update call sites.
+
+2020-08-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac (.ME, .UE): Restore hyphenation after
+ "punctuation" arguments have been output. The next token will
+ always be a space node, the end of the document, or similar.
+
+ * tmac/tmac.am (tmac_XFAIL_TESTS): Mark the punctuation
+ hyphenation tests as expected to fail, because they now do.
+
+2020-08-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/ps.tmac: Define ordinary hyphen-minus as fallback
+ character for U+2011 (non-breaking hyphen). Prompted by
+ discussion with Dave Kemper in Savannah #58390.
+
+2020-08-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Fix hyphenation bug. The UR/UE and MT/ME macros were much too
+ aggressive about turning hyphenation off. Disable it only when
+ writing the actual URL or email address.
+
+ * tmac/an-ext.tmac (.MT, .UR): Stop disabling hyphenation here.
+ (.ME, .UE): Disable hyphenation right before output of
+ URL/address; restore it right before output of supplementary
+ arguments ("punctuation").
+
+ * tmac/tests/an-ext_ME_punct_hyphenates.sh:
+ * tmac/tests/an-ext_MT_body_hyphenates.sh:
+ * tmac/tests/an-ext_UE_punct_hyphenates.sh:
+ * tmac/tests/an-ext_UR_body_hyphenates.sh: Test behavior.
+
+ * tmac/tmac.am (tmac_TESTS): Run tests.
+
+2020-08-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Adapt to the fact that \: reënables hyphenation. Rename
+ "hyphenless [discretionary] break" to "non-printing break point"
+ in documentation.
+
+ * doc/groff.texi (Manipulating Hyphenation): Rename "hyphenless
+ break" to "non-printing break point". Clarify that it is the
+ soft hyphen glyph, not necessarily a hyphen, that is ordinarily
+ written to the output on hyphenation breaks. Note that the
+ remainder of a word after \: is subject to hyphenation as
+ normal. Note (new) '\:\%' idiom for getting what people will
+ want at least some of the time. Update example to use it.
+ * makevarescape.sed: Insert \% after we insert \: to rewrite
+ slashes in filenames, to protect later portions of the filename
+ from hyphenation.
+ * man/groff.7.man (Escape Sequences/Escape short reference):
+ Rename "hyphenless break" to "non-printing break point".
+ * man/groff_diff.7.man (Language/Escape sequences): Resync with
+ our Texinfo manual.
+ * tmac/groff_man.7.man.in (Description/Hyperlink and email
+ macros): Rename "hyphenless break" to "non-printing break
+ point".
+
+2020-08-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ documentation: Re-christen 'ESCAPE_AMPERSAND'.
+
+ s/zero[- ]width space character/non-printing input break/
+
+ * doc/groff.texi (Requests): Rename. Update conceptual index
+ entries; retain old name (with an appended "[sic]") to aid
+ readers accustomed to it.
+ (Ligatures and kerning): Update conceptual index entries.
+ Supply context ("effect on kerning").
+ (Drawing requests): Update conceptual index entries. Supply
+ context ("effect on '\l'").
+ * man/groff.7.man (Description): Rename in macro-advice-writing
+ shorthand.
+ (Escape Sequences/Escape short reference): Rename.
+ * tmac/groff_man.7.man.in (Description/Command synopsis macros
+ [style]: Rename.
+ (Description/Portability) [style]: Rename.
+ * tmac/groff_mdoc.7.man (TROFF IDIOSYNCRASIES/Macro Usage):
+ Rename.
+ (TROFF IDIOSYNCRASIES/Other Possible Pitfalls): Rename.
+
+2020-08-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_man.7.man.in (Description/{Document structure
+ macros <.TH>, Horizontal and vertical spacing}): Fix erroneous
+ use of "flush left". The current uses were introduced by me,
+ but the page has borne incorrect uses of it as far back as 1999
+ {in the description of .TP}. Simply say "with no indentation"
+ instead.
+
+2020-08-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_man.7.man.in (Description/Number registers): Inform
+ reader that registers can be set in man.local file and
+ cross-reference it.
+ (Files/*/man.local): [style] Supply example of man.local
+ customizations, prompted by recent discussions on groff,
+ linux-man, and man-db mailing lists.
+
+2020-08-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tmac.am: Use a stamp file for m4 keyword check.
+ (M4CHECK): Add stamp file variable.
+ ($(M4CHECK)): Create stamp file if check succeeds.
+
+2020-08-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Split groff_man(7) into two pages; one a (relatively) terse
+ reference and the other a tutorial and style guide. Both are
+ generated from the same source, which is processed by m4 into
+ two man page sources.
+
+ * tmac/groff_man.7.man: Rename...
+ * tmac/groff_man.7.man.in: ...to this.
+
+ * tmac/groff_man.7.man.in: Add m4 directives and define macros.
+ Protect m4 keywords in English from unintended expansion (this
+ affected the word "include"). Add new .TH and apropos lines for
+ style guide. Convert marker comments into m4 macros for content
+ control. Uncomment material intended only for basic reference
+ page.
+
+ * tmac/tmac.am (man7_MANS): Add groff_man_style.7.
+ (EXTRADIST) Add groff_man.7.man.in.
+ (MOSTLYCLEANFILES): Add m4-generated man page sources
+ tmac/groff_man{,_style}.7.man.
+ Add targets to generate those same two pages from the renamed
+ file. Add target to grep the page for unprotected English m4
+ keywords and halt the build if they are found. Make generation
+ of those pages depend on this new target.
+
+2020-08-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_man.7.man: Add material on hooks and encoding.
+ (Description, ./Deprecated features): Stop identifying .PT and
+ .BT as "deprecated"; they shouldn't ever be called in man pages,
+ but that has never been their intention.
+ (Description): Identify character encoding and line-ending
+ requirements (tutorial/style-guide material).
+ (Description/Hooks): Add new subsection to house descriptions of
+ .PT and .BT. Add mnemonic expansions for both.
+
+2020-07-31 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Control Characters): Incorrect claims were
+ made. Double quotes can indeed be used to enclose arguments to
+ string interpolations. The statement about a leading " in a
+ string definition (or appendment with .as) was stated too
+ generally. The leading quote is not necessary to include
+ leading tab characters, which can be input as-is, even in
+ compatibility mode.
+
+2020-07-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Requests/Request short reference/.ft): Fix
+ some outright damage in the description of the request; the
+ escape sequences that are synonymous with a nullary .ft had been
+ wrongly removed.
+
+2020-07-25 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/meintro.me:
+ * doc/meref.me:
+ * tmac/e.tmac-u: Remove postal address for Eric Allman. It's
+ probably decades out of date. Adjust footnote symbols. Thanks
+ to Dave Kemper for the bug report and the patch. Fixes
+ <https://savannah.gnu.org/bugs/?58726>.
+
+2020-07-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Migrate macro packages from font CW to CR. The font name "CW"
+ {"constant-width"} is a legacy item we can dispose of (except
+ for the DVI device, which also has CWI for "constant-width
+ italic"), and much of the groff codebase already did starting
+ with commit 0de1d6d79cdb959ffa7dac3af77c2a36ef31873f {October
+ 2017}. Courier is available in the usual four styles {roman,
+ bold, italic, bold+italic}.
+
+ * tmac/an-ext.tmac (.EX): Set font to R, not CW. The existing
+ .ft request was somewhat redundant with the '.do fam C'
+ immediately before, which set the font family to Courier.
+ * tmac/s.tmac (.UC): Use font CR, not CW.
+
+2020-07-23 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tty.tmac: Stop suppressing nonexistent font warning.
+ Prompted by a 2017 suggestion and patch from Bjarni Ingi
+ Gislason. Documents and macro packages that want to change the
+ font family should do so in awareness that this is meaningless
+ on terminal (nroff) devices (and -Thtml as well).
+
+ Fixes <https://savannah.gnu.org/bugs/?51364>.
+
+2020-07-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_man.7.man (.PP, .LP, .P): Fix error: these macros
+ do not reset the left margin.
+
+2020-07-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Strings): Document behavior of .ds request
+ when only one argument is supplied. (The string is defined as
+ empty.) Thanks to Dave Kemper for the report and the patch.
+
+ Fixes <https://savannah.gnu.org/bugs/?58746>.
+
+2020-07-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Using Symbols): Fix error in .rfschar
+ description, which should refer to "font f" rather than "glyph
+ f". Thanks to Dave Kemper for the report and the patch.
+
+ Fixes <https://savannah.gnu.org/bugs/?58767>.
+
+2020-07-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_man.7.man (.EE, .YS): Fix error: refer to "initial
+ hyphenation setting" instead of "previous hyphenation mode".
+ Incidentally, this fact points out why putting ".hy 0" or ".nh"
+ in your man page is futile.
+
+2020-06-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Requests/Request short reference): Fix error
+ in description of .hc; it changes the hyphenation character
+ rather than supplying an additional one.
+
+2020-06-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Groff Options): Remove editorial comment about
+ '-a' option being "useless". It isn't. Update example for
+ contemporary systems (like Debian) and to reflect the fact that
+ the GNU troff(1) man page needs to be preprocessed with tbl(1).
+ (Invoking grotty): Recast discussion of -c option, importing
+ much language from grotty(1) page rewrite from a year ago. Add
+ program index entries for col, more, and ul. Fix transposition
+ error in ISO document number.
+
+ * src/devices/grotty/grotty.1.man (Description/Legacy output
+ format): Make slight wording changes prompted by content of
+ parallel section in our Texinfo manual.
+
+ * src/roff/groff/groff.1.man (Options/-a): Parallelize with
+ first sentence of corresponding material in our Texinfo
+ manual.
+
+ * src/roff/troff/troff.1.man (Options/-a): Parallelize with
+ our Texinfo manual.
+
+ Fixes the rest of
+ <https://savannah.gnu.org/bugs/?55278>.
+
+2020-06-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff_diff.7.man (Language/Long names): Fix error: groff
+ adds three new requests with short names, not two. List them in
+ an adjacent comment.
+
+2020-06-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-ext.tmac (.ME, .UE): Fix portability issue. While
+ widely supported, the \$* escape is not documented in CSTR #54.
+ If groff is not the typesetter, append macro arguments using
+ \$1, \$2, ..., \$9 instead.
+
+2020-05-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * man/groff.7.man (Numerical Expressions): Fix error: negative
+ expressions evaluate false, not true as was implied.
+ Parallelize descriptions with our Texinfo manual and
+ groff_diff(7) (in abbreviated form).
+
+2020-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Manipulating Filling and Adjusting): Fix error
+ in code sample: missing 'n' in number register interpolation.
+
+2020-05-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/preconv/tests/smoke-test.sh: Make BOM detection
+ override less hinky (i.e., use more normative input). Add tests
+ for all five detected BOMs.
+
+2020-05-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/env.cpp (space_size): Prevent assertion
+ failure. If an argument to the .ss request is negative, throw a
+ range warning and ignore it.
+ * src/roff/groff/tests/regression_savannah_58337.sh: Add test.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+ Fixes https://savannah.gnu.org/bugs/?58337.
+
+2020-05-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Update documentation of .ss request.
+
+ * doc/groff.texi (Manipulating Filling and Adjusting): Rewrite
+ documentation of .ss request and \n[.ss] and \n[.sss] escapes.
+ Note that negative values are not permitted in either argument
+ to .ss. Use new terminology, "minimal inter-word spacing" and
+ "additional inter-sentence spacing" for clarity. Clarify that
+ additional inter-sentence spacing is only used when the output
+ line is not full when the end of a sentence occurs. Add index
+ nodes to help readers find discussion of details of spacing
+ between words and sentences. Move discussion of differences
+ from AT&T troff to section "Implementation Differences". Update
+ example to more closely resemble a real-world case, use second
+ argument to .ss request, and eliminate hackish use of .nop
+ request.
+
+ * man/groff_diff.7.man (New number registers): Recast in
+ parallel with the foregoing.
+
+ * man/groff.7.man (Read-only registers): Use new terminology and
+ describe \n[.ss] and \n[.sss] in meaningful terms, not by
+ reference to arguments to the .ss request (which wasn't even
+ accurate, because these registers have default values).
+
+ Fixes https://savannah.gnu.org/bugs/?54101.
+
+2020-05-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Undocument plans to support end-of-file GNU Emacs coding tags.
+
+ * src/preproc/preconv/preconv.cpp (check_coding_tag): Update
+ comments.
+ (detect_file_encoding): Alter debugging output so it's easier to
+ grep and verify Emacs coding tag detection.
+
+ * src/preproc/preconv/preconv.1.man (Bugs): Delete; its sole
+ concern was the absence of this feature.
+ (Usage): Document detection algorithm in more detail. Note
+ which detection methods don't work on unseekable input (pipes).
+ Offer recommendations for those struggling with encoding
+ detection.
+ (Usage/Coding Tags): Stop manipulating line adjustment. Use
+ hyphen-minus (\- escape) characters in coding tag names, since
+ they are literals that one might copy and paste. Stop
+ referencing XEmacs, whose development appears moribund.
+ (See Also): Add cross-references to iconv(3) and locale(7) man
+ pages.
+
+ * src/preproc/preconv/tests/smoke-test.sh: Test each of the
+ steps in the detection algorithm.
+ * src/preproc/preconv/preconv.am: Run test.
+ (preconv_TESTS): Add new variable.
+ (TESTS): Append $(preconv_TESTS).
+
+2020-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/afmtodit/afmtodit.pl: Format usage message with
+ full capitals for parameters, and break out -v option in a
+ separate "synopsis".
+
+2020-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * font/devpdf/util/BuildFoundries.pl: Stop throwing away
+ diagnostics from afmtodit. This results in only one extra line
+ of build output:
+
+ both Upsilon1 and Upsilon map to *U at .../afmtodit line
+ 6413.
+
+2020-05-05 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Correct documentation of .pm request.
+
+ * man/groff.7.man (Requests/Request short reference): The .pm
+ request's classical behavior was described instead of groff's,
+ and omitted mention of strings and diversions; correct it.
+
+ * man/groff_diff.7.man (Implementation Differences): Document
+ this difference between AT&T troff and groff.
+
+ * doc/groff.texi (Debugging): Relocate description of .pm
+ behavioral difference...
+ (Implementation Differences): ...hither.
+
+2020-04-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/addftinfo/addftinfo.cpp (usage):
+ * src/utils/tfmtodit/tfmtodit.cpp (usage): Add "usage:" prefix
+ to messages documenting auxiliary modes of invoking the program.
+ The output doesn't look right without one, and it feels
+ dishonest to not document the relevant options (-v, --version)
+ disjunctively. I'm trying to strike a balance between the
+ ultra-terse BSD approach and the ultra-garrulous GNU one (see,
+ e.g., ls(1)). Likely both camps will be unhappy. :-/
+
+2020-04-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/tfmtodit/tfmtodit.cpp (read_map): Report invalid
+ character code from map file in diagnostic.
+ (main): Report invalid skew character position in diagnostic.
+ Explicitly report insufficient arguments in addition to usage
+ message. Lift invariant computed expressions out of loops (more
+ to shorten long lines than because I think the compiler won't
+ figure it out). Give content to "impossible assertion".
+ (tfm::load): Capitalize TFM initialism in diagnostics.
+ (usage): Use full capitals for parameters as is conventional.
+ Document disjunction of -v/--version flag from other
+ invocations.
+
+2020-04-29 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/utils/addftinfo/addftinfo.cpp (usage): Add overloaded
+ version that accepts a constant string argument, which emits the
+ argument as a diagnostic and then calls usage().
+ (main): Add diagnostics to usage message where the problem is
+ clear. Add comment explaining why it sometimes isn't.
+ (usage): Refactor main usage message (which prints the summary)
+ to report the actual names of the accepted option arguments
+ instead of just "-param", which is not literally accepted.
+
+ Sort param_table alphabetically for use by the usage message.
+
+2020-04-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Delete groffer.
+
+ Per discussion on the groff development mailing list, there is
+ no desire to retain the maintenance of this portion of the groff
+ distribution.
+
+ See
+ <https://lists.gnu.org/archive/html/groff/2020-04/msg00051.html>
+ et seq.
+
+ * contrib/groffer: Recursively delete.
+
+ * Makefile.am:
+ * arch/mingw/mingw.am: Stop building groffer.
+
+ * m4/groff.m4 (GROFF_GROFFERDIR_DEFAULT):
+ (GROFF_GROFFERDIR_OPTION): Delete; remove "--with-grofferdir"
+ configuration option.
+ * configure.ac: Stop calling these macros.
+
+ * MANIFEST:
+ * NEWS:
+ * PROJECTS:
+ * TODO:
+ * contrib/chem/chem.1.man:
+ * contrib/chem/examples/122/README.txt:
+ * contrib/chem/examples/README.txt:
+ * contrib/glilypond/glilypond.1.man:
+ * contrib/gperl/gperl.1.man:
+ * contrib/gpinyin/gpinyin.1.man:
+ * contrib/groff_filenames/groff_filenames.5.man:
+ * man/groff_font.5.man:
+ * man/roff.7.man:
+ * src/roff/groff/groff.1.man:
+ * src/roff/grog/grog.1.man:
+ * src/utils/addftinfo/addftinfo.1.man:
+ * tmac/groff_trace.7.man: Delete references to groffer.
+
+2020-04-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/include/curtime.h: #include <time.h> if we're returning
+ a time_t from current_time().
+
+ * src/libs/libgroff/curtime.cpp (current_time): Quote
+ $SOURCE_DATE_EPOCH variable content in diagnostics produced due
+ to bad input since it's under user control and could have all
+ kinds of bogosity in it (like whitespace).
+
+2020-04-19 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * **/*.{man,tmac}: Save compatibility mode robustly.
+
+ Use new \n[.cp] register to save compatibility mode.
+
+ Use register names based on the filename (at the source
+ maintenance level) to avoid clobbering other files' saved
+ compatibility modes.
+
+ * tmac/html.tmac: Eliminate test of saved-compatibility
+ register by moving its body inside the block where compatibility
+ mode is off. This is the only part of this changeset that was
+ not automated.
+
+ Fixes <https://savannah.gnu.org/bugs/?58162>.
+
+2020-04-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Implement new read-only .cp register.
+
+ Within a .do request, \n[.cp] holds the saved value of
+ compatibility mode.
+
+ The register \n[.cp] is specialized and may require a statement
+ of rationale. When writing macro packages or documents that use
+ groff features and which may be mixed with other packages or
+ documents that do not—common scenarios include serial processing
+ of man pages or use of the .so or .mso requests—you may desire
+ correct operation regardless of compatibility mode in the
+ surrounding context. It may occur to you to save the existing
+ value of \n(.C into a register, say, _C, at the beginning of
+ your file, turn compatibility mode off with “.cp 0”, then
+ restore it from that register at the end with “.cp \n(_C”. At
+ the same time, a modular design of a document or macro package
+ may lead you to multiple layers of inclusion. You cannot use
+ the same register name everywhere or you risk “clobbering” the
+ value from a preceding or enclosing context. The two‐character
+ register namespace of AT&T troff is confining and mnemonically
+ challenging; you may wish to use groff's more capacious
+ namespace. However, attempting “.nr _my_saved_C \n(.C” will not
+ work in compatibility mode; the register name is too long.
+ “This is exactly what .do is for,” you think, “.do nr
+ _my_saved_C \n(.C”. The foregoing will always save zero to your
+ register, because .do turns compatibility mode off while it
+ interprets its argument list. What you need is:
+ .do nr _my_saved_C \n[.cp]
+ .cp 0
+ at the beginning of your file, followed by
+ .cp \n[_my_saved_C]
+ at the end. As in the C language, we all have to share one big
+ namespace, so choose a register name that is unlikely to collide
+ with other uses.
+
+ * src/roff/troff/input.cpp (do_request, init_input_requests):
+ Implement it.
+
+ * doc/groff.texi:
+ * man/groff.7.man:
+ * man/groff_diff.7.man: Document it.
+
+ * src/roff/groff/tests/dot-cp_register_works.sh: Test it.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+ Enables a fix for
+ <https://savannah.gnu.org/bugs/?58162>.
+
+ Thanks to John Gardner and Ingo Schwarze for the discussion.
+
+2020-04-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Implementation Differences):
+ * man/groff_diff.7.man (New requests): Rewrite description of
+ .do request, and replace example with a more illustrative one.
+
+ * man/groff.7.man (Request short reference): Rewrite description
+ of .do request briefly.
+
+2020-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Implementation Differences): Remove incorrect
+ claim. The .C register cannot be manipulated manually.
+
+2020-04-14 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/smoke-test_html_device.sh: Simplify
+ charmap test.
+
+2020-04-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ It's too easy for the nroff version to get desynced from the
+ groff version when we're running test cases, leading to spurious
+ results. Make it easier to see a discrepancy.
+
+ * src/roff/nroff/nroff.sh: Call groff with -v or --version when
+ we are called that way. Let test cases tell us to use
+ test-groff as groff with an environment variable.
+
+ * src/roff/nroff/tests/verbose_option_works.sh.in: Rename to...
+ * src/roff/nroff/tests/verbose_option_works.sh: ...this. Check
+ the nroff version being tested against the groff version being
+ wrapped. This exposes a bug; the system groff rather than the
+ build tree groff was being invoked. Refactor. Stop messing
+ with @GROFF_BIN_PATH_SETUP@ (enabling the rename); instead, let
+ test-groff handle that for us. Locate it and export the
+ variable GROFF_TEST_GROFF so nroff can find it. Because we
+ manipulate $PATH to run the tests, the $PATH of an installed
+ groff system will _always_ differ from that used by a build
+ tree; ignore it in the test cases. Dispose of bashisms and set
+ shebang to /bin/sh.
+
+ * src/roff/nroff/nroff.am: Stop generating the above test
+ script. It can now be run as it ships.
+
+2020-04-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Make our assert() C99-conformant.
+
+ groff has its own implementation of the standard C library's
+ assert() macro. It hasn't been updated since C89. C99 requires
+ that the diagnostic emitted by assert() contain the failing
+ expression and name of the function in scope.
+
+ * src/include/assert.h: Add additional pointer to const char
+ arguments to do_assert() and assertion_failed() for function
+ name and stringified expression.
+ (assertion_failed): Update prototype.
+ (do_assert): Accept 'func' and 'msg' parameters and pass them to
+ assertion_failed().
+ (assert): Update macro to collect '__func__' and stringify the
+ expr parameter (as 'msg') and pass them do do_assert().
+ * src/libs/libgroff/assert.cpp (assertion_failed): Rewrite
+ diagnostic to more closely match GNU Coding Style format and
+ also report function and failing expression.
+
+ Example output:
+ troff: ../src/roff/troff/input.cpp:2644: do_request():
+ assertion failed: '0 == "But first, here's a rotten old
+ BBC programme."'
+
+ We have no excuse to assert(0) ever again. Express the
+ invariant that has been violated.
+
+2020-04-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/smoke-test_html_device.sh: Set
+ LC_CTYPE=C.UTF-8 so that byte sequences in the pipelines are
+ handled correctly. Skip the test if the environment doesn't
+ support UTF-8. Thanks to Bjarni Ingi Gislason for the trouble
+ report.
+
+ Fixes <https://savannah.gnu.org/bugs/?58164>.
+
+2020-04-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/html.tmac: Use .do so we correctly load unicode.tmac in
+ compatibility mode.
+
+ Fixes the following problem (wrapped, filenames abbreviated):
+
+ $ echo | ./build/test-groff -C -Thtml >/dev/null
+ troff: backtrace: file '.../groff/build/../tmac/html.tmac':546
+ troff: backtrace: file '.../groff/build/../tmac/troffrc':30
+ troff: .../groff/build/../tmac/html.tmac:546: warning: macro
+ 'ms' not defined
+
+2020-04-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/smoke-test_html_device.sh: Add test.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2020-04-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/regression_savannah_58153.sh:
+ * src/roff/groff/tests/\
+ use_point_size_escape_with_single_digit_arg.sh: Use "set -e" to
+ ensure that multi-test script files don't hide problems. There
+ are arguments against "set -e" (and you can ask Greg Wooledge
+ for all of them), but I'm so used to it from years of writing
+ Debian package maintainer scripts that I feel comfortable with
+ it. It is less verbose than several alternatives (especially
+ having one test script per case).
+
+ * src/roff/groff/tests/string_case_xform_unicode_escape.sh:
+ Update with respect to new failure output (in a comment only,
+ since this is an XFAIL test).
+
+ * tmac/tests/an-old_AT_and_UC_footer_saved_and_restored.sh:
+ Drop unnecessary "|| exit 1" from end of script. Incidentally,
+ this script illustrates an alternative to "set -e".
+
+2020-04-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Rework documentation of .spreadwarn.
+
+ * doc/groff.texi (Debugging):
+ * man/groff.7.man (Request short reference):
+ * man/groff_diff.7.man (New requests): Recast description of
+ .spreadwarn request, some based on suggestions from Dave Kemper.
+ Make more prominent the fact that spreading only applies to
+ adjustment mode 'b'. Document warning type used.
+
+ Fixes half of Savannah #58035.
+
+2020-04-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Require Texinfo 5.0 (February 2013) at a minimum.
+
+ * m4/groff.m4 (GROFF_MAKEINFO): Check for version 5.0 (increased
+ from 4.8). Update diagnostics and comments.
+
+ * INSTALL.extra:
+ * README:
+ * doc/groff.texi:
+ * doc/webpage.ms: Document updated requirement.
+
+ * doc/fixinfo.sh: Delete; it is no longer necessary to work
+ around Texinfo 4.x bugs.
+
+ * doc/doc.am (EXTRA_DIST): Stop shipping fixinfo.sh.
+ (.texi.html): Remove makeinfo < 5.0 version check and consequent
+ execution of fixinfo.sh. Update comment.
+
+2020-04-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Enable backtracing across process/file boundaries when errors or
+ non-ignored warnings are encountered.
+
+ Experimentation reveals that .so, .mso, and .pso requests acted
+ as barriers to backtracing except when explicitly requested with
+ the .backtrace request. Judging by the git history, this
+ behavior dates back to June 1991 or earlier. The intention,
+ according to a source comment, was only to suppress the
+ backtrace output for the line corresponding to the outermost
+ level of the input stack (commonly, a file argument to groff).
+ Unfortunately, that wasn't its only effect.
+
+ This change does result in one additional line of output for
+ each error or (non-ignored) warning when -b is given. However,
+ I regard this as unobjectionable because {1} a backtrace was in
+ fact explicitly requested; and {2} it seems a poor tradeoff to
+ suppress most of the backtrace in some complicated and
+ frustrating cases for the sake of one fewer line of backtrace
+ output in a trivial one.
+
+ Now, backtracing behaves the same no matter what triggers it.
+
+ Fixes Savannah #58153.
+
+ * src/roff/troff/input.cpp (file_iterator::backtrace): Call
+ get_location() for its side effect of rewriting a filename of
+ "-" to "<standard input>", for consistency with other diagnostic
+ messages. (In this class, this member function always returns
+ 1, so ignore the return value. This fact is an essential part
+ of what led to the bug; the conditional
+ p && !p->get_location(0, &f, &n)
+ which appeared in the for loop of input_stack::backtrace() prior
+ to this change would always evaluate to false when a node of the
+ file_iterator class was encountered.)
+ (input_stack::backtrace): Replace member function body with that
+ of input_stack::backtrace_all().
+ (input_stack::backtrace_all): Delete.
+ (backtrace_request): Update the only call site of the above.
+
+ * src/roff/groff/tests/regression_savannah_58153.sh: Add test.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+ * src/roff/groff/tests/string_case_xform_errors.sh: Update
+ regression test to not be confounded by additional line of
+ backtrace output. Remove bashism along the way.
+
+ * doc/groff.texi:
+ * man/groff.7.man:
+ * man/groff_diff.7.man: Update documentation.
+
+2020-04-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Reorganize backtrace output.
+
+ * src/roff/troff/input.cpp (string_iterator::backtrace):
+ Prefix the output with the program name if it is known. In a
+ deviation from the GNU Coding Standards, put the string
+ "backtrace:" immediately next instead of the file and line
+ number; this is because, particularly in cases where the
+ backtrace is most interesting or needed, it will produce
+ multiple lines of output and the common prefix aids visual
+ understanding.
+ (file_iterator::backtrace): As above; also, change prefix for
+ popened nodes in the iterator from "process" to "pipe". This
+ seemed preferable to omitting the information entirely or using
+ an inscrutable sigil like 'f' or 'p'. The advantage is that the
+ output is better aligned--better ergonomics for those who have
+ to cope with a lot of it. Furthermore, output the filename only
+ once.
+
+ Example of old and new output:
+
+ /tmp/inner:2: backtrace: file '/tmp/inner'
+ echo .so /tmp/inner:1: backtrace: process 'echo .so /tmp/inner'
+ /tmp/outer:1: backtrace: file '/tmp/outer'
+
+ troff: backtrace: file '/tmp/inner':2
+ troff: backtrace: pipe 'echo .so /tmp/inner':1
+ troff: backtrace: file '/tmp/outer':1
+
+2020-04-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (read_size): Add units to diagnostic.
+ This function works only with device-specific basic units
+ internally; users likely think in terms of point size, so add
+ the basic unit suffix "u" to offer a hint about what's going on.
+
+ Example:
+ $ groff -ww >/dev/null
+ \s[10]A\s[-12]B
+ troff: <standard input>:1: warning: point-size escape results in
+ non-positive size -2000u; set to 1u
+
+ On a PostScript device with 1000 basic units to the point, the
+ difference is important and would be confusing without the unit
+ indication.
+
+2020-04-08 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Correct and clarify point size documentation.
+
+ Our Texinfo manual has long documented the request '.ps 0' as
+ restoring the previous point size (just as '\s0' or '.ps' with
+ no argument does), but this is incorrect; since groff 1.02 or
+ earlier (June 1991), the request has not actually worked this
+ way. Instead, '.ps 0' sets the point size to 1 basic unit
+ {though output drivers may clamp this to a higher value}. This
+ behavior is consistent with AT&T troff, Hierloom Doctools troff
+ and, per Ingo Schwarze, Plan 9 troff. (It is, however, not
+ consistent with neatroff.)
+
+ * doc/groff.texi (Changing Type Sizes): Stop claiming that '.ps
+ 0' works like '\s0'. Note that the resulting (computed) point
+ size, not the argument, is clamped. Note that it is
+ non-positive, not negative, point sizes that are clamped to 1u.
+ Add (forward) cross-reference to section where \n[.ps] is
+ defined since it is mentioned here. Move explanation of special
+ handling of zero argument to \s escape description.
+
+ * man/groff.7.man (Request short reference): Explain .ps N
+ independently of \s. Note clamping behavior.
+
+2020-04-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (read_size): Correctly brace 'else'
+ block.
+
+ * src/roff/groff/tests/\
+ use_point_size_escape_with_single_digit_arg.sh:
+ Check that we get a diagnostic when relying on ambiguous form.
+
+2020-04-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp (read_size): Move special-case
+ interpretation of the '\sN' form of point-size escapes when 'N'
+ is 1, 2, or 3 to compatibility mode (groff -C) only, and throw
+ error diagnostic with suggestion for remedy if encountered.
+
+ Traditionally, '\s36A' is interpreted as "set point size to 36,
+ then emit 'A'". However, only values in the range 10-39 are
+ handled specially; '\s40A' is interpreted as a four-point "0A".
+ This is unlike anything else in *roff grammar; see \*, \$, \f,
+ \F, \g, \k, \m, \M, \n, \V, \Y, and \z.
+
+ To anticipate objections: Why not throw only a warning? Because
+ there isn't a warning category for supported but ambiguous
+ syntax (this behavior of AT&T troff dates back to the mid-1970s
+ but was not documented in the Troff User's Manual until 1992).
+ Why not throw the error outside of compatibility mode too?
+ Because outside of compatibility mode we (now) have an
+ unambiguous parse.
+
+ Background: The Graphic Systems C/A/T phototypesetter (the
+ original device target for AT&T troff) only supported a few
+ discrete point sizes in the range 6..36, so Ossanna
+ special-cased the parser to do what the user must have meant.
+ Kernighan warned of this in the 1992 revision of CSTR #54
+ {§2.3}, and more recently, McIlroy referred to it as a "living
+ fossil".
+
+ See:
+ https://lists.gnu.org/archive/html/groff/2020-03/msg00054.html
+ https://lists.gnu.org/archive/html/groff/2020-04/msg00002.html
+ https://lists.gnu.org/archive/html/groff/2020-04/msg00015.html
+ and follow-ups for discussion.
+
+ * NEWS: Advise users of behavior change and offer guidance.
+
+ * doc/groff.texi:
+ * man/groff.7.man: Document the restriction of special handling
+ of point-size arguments to '\s' to compatibility mode.
+
+ * src/roff/groff/tests/\
+ use_point_size_escape_with_single_digit_arg.sh: Add regression
+ test.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2020-04-04 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Improve point-size escape diagnostics.
+
+ * src/roff/troff/input.cpp (read_size): Disclose context
+ {point-size escape interpretation} in diagnostic messages. When
+ a "bad digit" is encountered, describe it if possible. When a
+ relative adjustment results in a negative point size, report the
+ computed value. Also rename a variable for slightly more
+ clarity ("bad" does not refer to all bad parses, just some cases
+ of bad digits), and update an insufficiently generalized comment
+ {"\s(00" is also an acceptable expression for point-size zero}.
+
+ Based on suggestions by Ingo Schwarze and Bjarni Ingi Gislason.
+
+2020-04-01 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Align diagnostic message format.
+
+ * src/libs/libgroff/error.cpp (do_error_with_file_and_line):
+ * src/roff/troff/input.cpp (do_error):
+ Display the diagnostic level when it is "error", instead of
+ leaving it implicit.
+
+ * src/roff/troff/input.cpp (error_with_file_and_line): Include
+ the program name in the diagnostic message if it is known.
+
+ * src/roff/groff/tests/string_case_xform_errors.sh: Update
+ diagnostic message expectation.
+
+2020-02-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi (Page Motions):
+ * man/groff.7.man (Single-character escapes): Document
+ non-breaking spaces as such.
+
+ Report and patch by Dave Kemper <saint.snit@gmail.com>.
+ Fixes <https://savannah.gnu.org/bugs/?55954>.
+
+2020-02-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ nroff: Implement -P and -V options.
+
+ * src/roff/nroff/nroff.sh: Recognize -P option (with argument)
+ and pass it through to groff. Recognize -V option; if given,
+ display constructed groff command instead of executing it.
+ Update usage message to document new options. Tidy up shell
+ style and indentation. Add comments.
+ * src/roff/nroff/nroff.1.man: Document new -P and -V options.
+ * src/roff/nroff/tests/verbose_option_works.sh.in: Test -V
+ option.
+ * src/roff/nroff/nroff.am: Generate test and run it.
+
+2020-02-06 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Stop ms macro package from manipulating warnings.
+
+ * tmac/s.tmac: Remove code block that attempted to enable all
+ warnings "only if none are given on the command line". It did
+ this by simply comparing the value of the warn register
+ {\n[.warn]} against the default value; but of course, a user
+ could specify -w options that exactly matched the default and
+ the test would not be able to tell, causing puzzling and
+ undesired behavior. Furthermore, the hard-coded default was out
+ of date and did not correspond to recent releases of groff. If
+ you want all warnings on, use the ".warn" request with no
+ arguments in your ms document or pass "-w w" to groff (see
+ troff(1) or our Texinfo manual for more on warnings).
+
+ Thanks to Bjarni Ingi Gislason for bringing this issue to our
+ attention.
+
+ Resolves <https://savannah.gnu.org/bugs/?57583>.
+
+2020-01-21 George HELFFRICH <ghfbsd@gmail.com>
+
+ [me]: Fix regression of '.nm' (#57638).
+
+ * tmac/e.tmac-u (nm): Use saved point size and font position
+ for line numbering only if those registers exist.
+
+ Fixes <https://savannah.gnu.org/bugs/?57638>.
+
+2020-01-18 Ingo Schwarze <schwarze@openbsd.org>
+
+ Accept any number of arguments for .Dd in the groff_mdoc(7)
+ macros.
+
+ * tmac/doc-common-u: The .Dd macro behaved in a weird way:
+ Without arguments, it printed the string "Epoch".
+ With one, two, four, or more arguments, it ignored all arguments
+ and used the current date instead.
+ Only for exactly three arguments, it printed the arguments.
+ None of this made sense. Giving the date as "Epoch" is
+ absurd, and printing the current date is just misleading:
+ why should a document be considered up-to-date when the author
+ did not even bother to state the date of the last change?
+ Admittedly, the behaviour for 0 and 4 or more arguments
+ already appeared 4.3BSD-Reno, and the behaviour for 2 or 3
+ arguments in 4.4BSD. But it was already wrong even in those
+ days: several manual pages in 4.4BSD gave .Dd a single, quoted
+ argument, e.g. .Dd "June 9, 1993": cap_mkdb(1), id(1), sed(1),
+ err(3), getcap(3), sysctl(3), amd(8), disklabel(8), and others.
+ Consequently, simply print all the arguments, no matter how
+ many there are.
+
+ This bug was found by Jonathan Gray <jsg@openbsd.org>
+ while he looked at 4.xBSD manual pages.
+
+2020-01-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * doc/groff.texi: Document initial empty set membership of
+ characters with cflags values of 128, 256, or 512 in parallel
+ with preceding paragraphs regarding smaller powers of two.
+
+ Report and patch by Dave Kemper <saint.snit@gmail.com>.
+ Fixes <https://savannah.gnu.org/bugs/?57549>.
+
+2020-01-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/*.sh: Rename some tests so their
+ filenames are more self-descriptive.
+ * src/roff/groff/groff.am (groff_TESTS): Update.
+
+2020-01-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/groff/tests/transparent_end-of-sentence_chars.sh: Add
+ test for end-of-sentence recognition.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2020-01-18 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp: Mark \[dd] character (double dagger)
+ as transparent for purposes of end-of-sentence recognition.
+
+ * doc/groff.texi (Sentences):
+ * man/groff_diff.7.man (New requests/.cflags): Document this.
+
+ Report and patch by Dave Kemper <saint.snit@gmail.com>.
+ Fixes <https://savannah.gnu.org/bugs/?57546>.
+
+2020-01-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/refer.1.man (See Also):
+ * src/utils/indxbib/indxbib.1.man (See Also):
+ * src/utils/lkbib/lkbib.1.man (See Also):
+ * src/utils/lookbib/lookbib.1.man (See Also): Add bibliographic
+ reference to the original Bell Labs "refer" paper by Mike Lesk.
+
+2020-01-17 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_AT_and_UC_footer_saved_and_restored.sh: Add
+ regression test for Ingo's change below.
+
+2020-01-16 Ingo Schwarze <schwarze@openbsd.org>
+
+ Repair .AT and .UC in the groff_man(7) macros.
+
+ * tmac/an-old.tmac: Setting user-defined strings in a macro that
+ will later be called indirectly from page location traps is
+ excessively complicated. Besides, the implementation doesn't
+ work: when the trap is finally sprung, the defaults from the
+ an-init macro clobber what the author specified with .AT or .UC.
+ Instead, all that is needed is setting the strings for the
+ header before triggering the page break, such that they appear
+ right away, while setting the strings for the footer after the
+ page break, such that they don't appear on the previous page.
+
+ This bug was found by Jonathan Gray <jsg@openbsd.org> while he
+ looked at 4.xBSD manual pages.
+
+2020-01-16 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/groff_man.7.man (Document structure macros/.SH): Fix
+ errors in footer description.
+
+2020-01-12 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/tests/an-old_CS_register_on.sh: Tweak flags; all the
+ other tests in this group pass "-Tascii -P-cbou" instead of
+ "-Tutf8". (This is so that output is easy to grep from a shell
+ script.) Bring this test into line. Does not regress anything.
+
+2019-12-30 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Certain pdfmark destination names caused gropdf to fail.
+
+ * src/devices/gropdf/gropdf.pl: Look for pdfmark types, (i.e.
+ DEST, OUT, ANN), only preceding 'pdfmark' at end of line, not
+ anywhere else.
+
+2019-12-30 Ingo Schwarze <schwarze@openbsd.org>
+
+ Correct output of sprintf("%%") in pic(1).
+
+ * src/preproc/pic/pic.ypp: Print "%" rather than "%%".
+
+ Bug reported by Doug McIlroy <doug at cs dot dartmouth dot edu>.
+ Patch using feedback from Larry McVoy <lm at mcvoy dot com>.
+
+2019-12-29 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Update man page of gropdf to document \X calls.
+
+ * src/devices/gropdf/gropdf.1.man: The calls 'pagename' and
+ 'switchtopage' (used by mom to relocate TOC) are documented,
+ together with their convenience commands '.pdfpagename' and
+ '.pdfswitchtopage'.
+
+2019-12-29 Ingo Schwarze <schwarze@openbsd.org>
+
+ Improve documentation of pic(1) regarding printf.
+
+ * src/preproc/pic/pic.1.man:
+ Document which conversion specifications are supported.
+ * doc/pic.ms:
+ Correct the list of supported conversion specifications.
+
+2019-12-21 Ingo Schwarze <schwarze@openbsd.org>
+
+ Update NetBSD, OpenBSD, FreeBSD, Darwin, and DragonFly version
+ strings.
+
+ * tmac/doc-common-u: Update.
+ * tmac/groff_mdoc.7.man: Synchronize.
+
+ Based on a patch from Guillem Jover <guillem@debian.org>
+ via Colin Watson <cjwatson@debian.org>, tweaked by me.
+ Fixes: https://bugs.debian.org/867123
+
+2019-09-22 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Use a vertical spacing of 1v between paragraphs in man page
+ examples. This looks better (on typesetter devices like
+ PostScript and PDF) with the Courier font family also used in
+ examples. Typewriter devices (like the terminal) already used
+ an inter-paragraph spacing of 1v.
+
+ * tmac/an-ext.tmac (EX): Save the value of the PD number
+ register (inter-paragraph distance), and set it to 1v.
+ (EE): Restore previous value of the PD register.
+
+2019-09-21 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Changes to allow configure to check for URW fonts
+
+ * font/devpdf/util/BuildFoundries.pl: Call the program with
+ --dirURW with path provided to ./configure, and --check to do
+ a dry-run just checking if the fonts are available. (bug #56748)
+
+2019-09-21 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Add new ghostscript font names (bug #56748)
+
+ * font/devpdf/Foundry.in: Add changed font names
+
+2019-09-21 Deri James <deri@chuzzlewit.myzen.co.uk>
+
+ Prevent gropdf executing arbitrary commands
+
+ * src/devices/gropdf/gropdf.pl: See bug #55557
+
+2019-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/an-old.tmac: Move test for definitions of CS and CT
+ registers to after man.local is sourced; this way we can both
+ respect any setting of those registers in that file (which is
+ intended for customization by the site administrator) and ensure
+ that the registers are defined when dereferenced later.
+
+2019-09-15 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * **/*.man: Put section headings in title case.
+
+2019-09-13 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/roff/troff/input.cpp: Lift invariant out of loop.
+
+2019-09-11 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/preproc/refer/refer.1.man: Add mention of man and mm
+ packages as supporting the "refer" preprocessor (GNU mm grew
+ this support back in groff 1.22.1).
+
+2019-09-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Mark expected-to-fail test as XFAIL.
+
+ Automake supports XFAIL and XPASS, so actually use the
+ infrastructure as intended.
+
+ * Makefile.am: Declare XFAIL_TESTS variable.
+ * src/roff/groff/groff.am (groff_XFAIL_TESTS): Add
+ string_case_xform_unicode_escape.sh.
+ * src/roff/groff/tests/string_case_xform_unicode_escape.sh: Set
+ the expected output to what it would be if string case
+ transforms worked on groff Unicode escapes.
+
+2019-09-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Retire '@G@' build system macro.
+
+ It existed only for forcibly-capitalized man page titles; it was
+ the uppercase-transformed counterpart of @g@.
+
+ * Makefile.am: Delete sed transformation of @G@.
+ * src/preproc/tbl/tbl.1.man: Replace '@G@EQN' in section heading
+ with '@g@eqn'.
+
+2019-09-10 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * **/*.man: Downcase man page titles, except for glilypond and
+ roff2*, which did not require it.
+
+ Here's a sed script for the aid of those who have a corpus of
+ man pages to migrate.
+
+ # Downcase man page titles.
+ #
+ # Use the first line to skip any .TH lines that require
+ # special handling, perhaps because the name of the
+ # command gets externally macro-expanded. In groff, the
+ # "roff2.1.man" page is an example.
+ #
+ # This script operates _only_ on .TH lines.
+ #
+ # usage: sed -i -f this_script.sed your_man_page.1 ...
+ /@ROFF2MODE@/b
+ /^\.\s*TH/{
+ h
+ s/^\.\s*TH \+\([^ ]\+\) .*/\1/
+ y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+ G
+ s/\([^ ]\+\)\n\(^\.\s*TH \+\)[^ ]\+\( .*\)/\2\1\3/
+ }
+
+2019-09-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ The an (man) macro package supports new CS and CT number
+ registers to control rendering of man page section headings and
+ titles, respectively, in full capitals. These default off (with
+ no visible effect on pages which already fully capitalize these
+ strings in man page sources). The rationale is to encourage man
+ page authors to preserve case distinction information in (or
+ restore it to) their titles and section headings, while giving
+ users (including system administrators, distributors,
+ integrators, and maintainers of man(1) implementations) a way to
+ view the rendered page elements in full capitals if desired.
+
+ * tmac/an-old.tmac (TH/an-init): If number register CT is
+ defined and nonzero, call .stringup on \*[an-title].
+ (SH): Store macro argument list to \*[an-section-heading]. If
+ number register CS is defined and nonzero, call .stringup on it.
+ * tmac/groff_man.7.man (OPTIONS): Document the CS and CT number
+ registers.
+ * tmac/tests/an-old_CS_register_off.sh:
+ * tmac/tests/an-old_CS_register_on.sh:
+ * tmac/tests/an-old_CS_register_unspecified.sh:
+ * tmac/tests/an-old_CT_register_off.sh:
+ * tmac/tests/an-old_CT_register_on.sh:
+ * tmac/tests/an-old_CT_register_unspecified.sh: Add tests.
+ * tmac/tmac.am (tmac_TESTS): Run tests.
+
+2019-09-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Add regression test to check behavior of case transformation
+ request on a string containing a Unicode character escape.
+ Right now, this is not supported, so it is an XFAIL test in the
+ parlance of DejaGNU/POSIX 1003.3.
+
+ * src/roff/groff/tests/string_case_xform_unicode_escape.sh: New
+ test.
+ * src/roff/groff/groff.am (groff_TESTS): Run test.
+
+2019-09-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Implement .stringdown and .stringup requests.
+
+ * src/roff/troff/input.cpp: Add .stringdown and .stringup
+ requests.
+ * doc/groff.texi: Document them, including example.
+ * man/groff_diff.7.man: Same.
+ * man/groff.7.man: Document them briefly.
+
+2019-09-09 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ Regression-test string case transform feature.
+
+ * src/roff/groff/tests/string_case_xform_errors.sh: New test.
+ * src/roff/groff/tests/string_case_xform_requests.sh: New test.
+ * src/roff/groff/groff.am (groff_TESTS): Run tests.
+
+2019-06-30 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * src/devices/grotty/grotty.1.man (Options/-i): Note support of
+ recent versions of xterm for italic (oblique) styles.
+
+ Fixes part of <https://savannah.gnu.org/bugs/?55278>.
+
+2019-06-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ devlatin1: Map \(oq to ' on output.
+
+ * font/devlatin1/R.proto: Render the output glyph \[oq]
+ {opening quote} as 0x27 (apostrophe) instead of 0x60 (grave
+ accent). A grave accent is just flat wrong for the Latin-1
+ character set, a.k.a. ISO 8859-1. The defining document ECMA-94
+ {June 1986} is freely available for perusal. The ECMA-94 Latin
+ character sets do not define any glyphs for directional
+ {"typographer's"} quotation marks, but the apostrophe is
+ depicted as a neutral (vertical) glyph, whereas the grave accent
+ 0x60 and acute accent 0xB4 are mirror-symmetric diacritical
+ marks.
+
+ Note that this change has no effect on _input_ conventions for
+ roff source documents. You can still get directional single
+ quotes on UTF-8, PostScript, PDF, and other output devices
+ supporting them by typing sequences like `this' in the input
+ {character remapping with ".char" requests and similar
+ notwithstanding}.
+
+ Patch and idea from Ingo Schwarze, who originally proposed it
+ for ASCII as well, and included Latin-1 for parallelism.
+ The groff developers could reach no consensus about the wisdom
+ of such a change for ASCII (which was designed to support
+ ambiguity for some code points, requiring the development of
+ supplementary interpretation conventions between parties).
+ ECMA-94/ISO-8859 is more strongly prescriptive.
+
+ See https://savannah.gnu.org/bugs/?55616 and the groff mailing
+ list archives for 31 January to 23 February 2019 at
+ https://lists.gnu.org/archive/html/groff for lengthy discussion.
+
+ * src/roff/groff/tests/on-latin1-device-oq-is-0x27.sh: Check for
+ correct output glyph.
+
+ * src/roff/groff/groff.am: Add test.
+
+2019-06-28 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ * tmac/unicode.tmac: Save and restore compatibility mode since
+ the script uses a GNU extension (.char).
+
+2019-06-27 G. Branden Robinson <g.branden.robinson@gmail.com>
+
+ libdriver: Fix SEGV (Savannah #56555).
+
+ * src/libs/libdriver/printer.cpp: Check result of
+ set_char_and_width() for error condition before relying on it.
+
+ * src/roff/groff/tests/regression-56555.sh: Provoke segfault
+ with five bytes of input using transparent line indicator.
+
+ * src/roff/groff/groff.am: Add test.
+
+ Fixes <https://savannah.gnu.org/bugs/?55278>.
+
+2019-01-12 Ingo Schwarze <schwarze@openbsd.org>
+
+ Correctly handle groff_mdoc(7) .Lk arguments starting with a
+ dot.
+
+ * tmac/doc.tmac-u: Each argument to the .Lk macro is printed
+ on its own roff input line. If it happens to start with a dot
+ or apostroph, it was misinterpreted as a request or macro.
+ Force it to be treated as text by adding "\&" in front of it.
+
+2018-12-31 Ingo Schwarze <schwarze@openbsd.org>
+
+ * man/groff_diff.7.man: remove two stray .RE macros
+
+
+________________________________________________________________________
+
+##### License
+
+Copyright 2018-2021 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.
+
+
+##### Editor settings
+Local Variables:
+fill-column: 72
+mode: change-log
+version-control: never
+End:
+vim:set autoindent textwidth=72: