diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:44:05 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:44:05 +0000 |
commit | d318611dd6f23fcfedd50e9b9e24620b102ba96a (patch) | |
tree | 8b9eef82ca40fdd5a8deeabf07572074c236095d /ChangeLog | |
parent | Initial commit. (diff) | |
download | groff-d318611dd6f23fcfedd50e9b9e24620b102ba96a.tar.xz groff-d318611dd6f23fcfedd50e9b9e24620b102ba96a.zip |
Adding upstream version 1.23.0.upstream/1.23.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 18665 |
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: |